跳到主要内容

Docker_minio快速构建

1.启动minio基本参数介绍

MINIO_ROOT_USER: user
MINIO_ROOT_PASSWORD: password
MINIO_BROWSER_REDIRECT_URL: http://localhost:9000 # 后台地址
MINIO_SERVER_URL: http://localhost:9001 # api地址

server --console-address ":9000" -address ":9001" /data
# --console-address ":9000" 后台地址
# -address ":9001" api地址

2.docker指令快速构建

# 快速构建
docker run -d --name minio \
-e "MINIO_ROOT_USER=scorpion777" \
-e "MINIO_ROOT_PASSWORD=powersee233" \
-p "9000:9000" \
-p "9001:9001" \
-e "MINIO_SERVER_URL=http://120.25.223.81:9001" \
-e "MINIO_BROWSER_REDIRECT_URL=http://120.25.223.81:9000" \
-v /etc/letsencrypt/live/hzy777.eu.org:/root/.minio/certs \
-v /root/minio/data:/data \
-v /root/minio/config:/root/.minio \
minio/minio server /data --console-address ":9000" -address ":9001"

3.docker compose构建(nginx+minio)

  • 编排配置文件docker-compose.yml

networks:
nginx_network:

services:
#nginx服务
nginx_main:
image: nginx #镜像
container_name: mynginx #容器名称
restart: always #开机自动重启
ports: #端口绑定(宿主机:容器内)
- "9000:443"
networks:
- nginx_network
volumes: #目录映射(宿主机:容器内)
- ./conf/nginx.conf:/etc/nginx/nginx.conf #nginx配置文件
- ./log:/var/log/nginx #nginx日志文件
- ./html:/html #nginx静态资源
- ./certs:/certs #nginx密钥
depends_on:
- minio1
#minio服务
minio1:
image: minio/minio
container_name: myminio1
restart: always
networks:
- nginx_network
volumes:
- /root/minio/data:/data
- /root/minio/config:/root/.minio
environment:
- MINIO_ROOT_USER=scorpion777
- MINIO_ROOT_PASSWORD=powersee233
- MINIO_BROWSER_REDIRECT_URL=https://hzy777.eu.org:9000
- MINIO_SERVER_URL=https://hzy777.eu.org:9001
extra_hosts:
- "hzy777.eu.org:127.0.0.1"
command: server /data --console-address ":9000" -address ":9001"

4.nginx配置文件

  • 配置文件nginx.conf
# 工作进程数
worker_processes 1;
# 进程文件路径
use epoll;
# 最大连接数
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 100m;
server {
listen 443 ssl;
# ssl 证书路径
ssl_certificate /certs/fullchain.pem;
# ssl 证书秘钥
ssl_certificate_key /certs/privkey.pem;
# ssl 协议版本
ssl_protocols TLSv1.2;
#该ip是虚拟机地址,根据实际情况修改。
#server_name hzy777.eu.org;
server_name 120.25.223.81;
location / {
proxy_pass http://120.25.223.81:8080;
}
}
server {
listen 9000 ssl;
# ssl 证书路径
ssl_certificate /certs/fullchain.pem;
# ssl 证书秘钥
ssl_certificate_key /certs/privkey.pem;
# ssl 协议版本
ssl_protocols TLSv1.2;
#该ip是虚拟机地址,根据实际情况修改。
# server_name hzy777.eu.org;
server_name 120.25.223.81;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;

proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;

proxy_pass http://minio1:9000;
}
}

server {
listen 9001 ssl;
# ssl 证书路径
ssl_certificate /certs/fullchain.pem;
# ssl 证书秘钥
ssl_certificate_key /certs/privkey.pem;
# ssl 协议版本
ssl_protocols TLSv1.2;
#该ip是虚拟机地址,根据实际情况修改。
#server_name hzy777.eu.org;
server_name 120.25.223.81;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio1:9000;
}
}

server {
listen 9001 ssl;
# ssl 证书路径
ssl_certificate /certs/fullchain.pem;
# ssl 证书秘钥
ssl_certificate_key /certs/privkey.pem;
# ssl 协议版本
ssl_protocols TLSv1.2;
#该ip是虚拟机地址,根据实际情况修改。
#server_name hzy777.eu.org;
server_name 120.25.223.81;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;

proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio1:9001;
}
}

}
  • 一个例子
# 工作进程数
worker_processes 1;
# 进程文件路径
pid /user/local/nginx/nginx.pid;
# 日志路径和日志级别 日志级别有:debug|info|notice|warn|error|crit|alert|emerg
error_log logs/error.log debug;
events {
# 设置网路连接序列化 网路连接序列化是为了防止惊群现象发生,默认为 on
accept_mutex on;
# 一个进程是否同时接受多个网络连接 默认值为 off;
multi_accept on;
# 事件驱动模型 事件驱动模型的可选项有:select|poll|kqueue|epoll|resig|/dev/poll|eventport。
use epoll;
# 最大连接数
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
#该ip是虚拟机地址,根据实际情况修改。
server_name 192.168.0.110;
location / {
# Nginx解决浏览器跨域问题
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
root /html;
index index.html index.htm;
}
location /abc {
default_type text/plain;
return 200 "access success";
}
location /api {
# 填写需要跳转的API地址 ,根据实际情况修改。
proxy_pass http://192.168.0.3:8789/data;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Nginx解决浏览器跨域问题
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
}
}
}

event块详解

events {
# 设置网路连接序列化
accept_mutex on;
# 一个进程是否同时接受多个网络连接
multi_accept on;
# 事件驱动模型
use epoll;
# 最大连接数
worker_connections 1024;
}

http块详解

http {
# 文件扩展名与文件类型映射表
include mime.types;
# 默认文件类型
default_type application/octet-stream;
# 是否开启服务日志
access_log off;
# 自定义服务日志格式
log_format myLogFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
# 设置日志的格式
access_log log/access.log myLogFormat;
# 是否开启高效文件传输模式
sendfile on;
# 每个进程每次最大传输值
sendfile_max_chunk 100k;
# 长连接超时时间
keeplive_timeout 100;
# 响应客户端的超时时间
send_timeout 75;
# 客户端请求头的区缓冲区大小
client_header_buffer_size 32k;
# 客户端请求头的最大缓冲区数量和大小
large_client_header_buffers 8 32k;
# 允许客户端请求的最大字节数
client_max_body_size 10m;
# 客户端请求体的缓冲区大小
client_body_buffer_size 128k;
}
  • 1)文件扩展名与文件类型映射表在 nginx/conf 下;
  • 2)默认文件类型的默认值为 text/plain;
  • 3)是否开启服务日志的默认值为 on,开启了之后需要配置 access_log 路径;
  • 4)自定义日志格式的更多变量请参考:【Nginx】之常用内置变量
  • 5)sendfile 指令指定 nginx 是否调用 sendfile 函数来输出文件,减少用户空间到内核空间的上下文切换;对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载;
  • 6)sendfile_max_chunk 指令的默认为 0,表示不设上限;
  • 7)keeplive_timeout 指令的单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置;长连接在请求大量小文件的时候,可以减少重建连接的开销;但如果上传大文件时在设置的超时时间内没上传完成会导致失败,如果设置时间过长,用户又多,长时间保持连接会占用大量资源;
  • 8)send_timeout 指令仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接;
  • 9)使用 client_header_buffer_size 指令时,为避免请求 header 过大出现 400 错误,可以适当设置大一点;
  • 10)使用 large_client_header_buffers 指令时,为避免请求 header 过大出现 400 错误,可以适当设置大一点。除了这些常用的 http 配置外,还用一些特定的 http 配置,比如反向代理配置:

http_proxy反向代理配置

http {
...
# 配置 https_proxy 反向代理
# 表示 Nginx 跟代理服务器连接超时时间;
proxy_connect_timeout 75;
# 表示 Nginx 与代理服务器两个成功的响应操作之间超时时间
proxy_read_timeout 75;
# 表示 Nginx 传输文件至代理服务器的超时时间
proxy_send_timeout 100;
# 用于设置从代理服务器读取并保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
# 设置代理缓冲区大小,Nginx 针对单个连接,缓存来自代理服务器的响应,网页平均在32k以下的话,可以设置为 4 32K;
proxy_buffers 4 32k;
# 设置高负荷下的缓冲大小,一般为 proxy_buffers 的两倍;
proxy_busy_buffers_size 64k;
# 当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系;大于这个值,将从 upstream 服务器传回,设置为 0 禁用;
proxy_max_temp_file_size 64k;
# 当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小;
proxy_temp_file_write_size 64k;
# 用于指定临时文件所在的目录。
proxy_temp_path proxy_temp;
...
}

http_gzip配置详解

http {
...
# 配置 http_gzip 模块
# 如果设置为 on 则表示开启 gzip 压缩输出,可减少网络传输;
gzip on;
# 设置允许压缩的页面最小字节数(到达这个大小才进行压缩),页面字节数从 header 头的 content-length 中进行获取。默认值是 20。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大;
gzip_min_length 1K;
# 设置系统获取多少个单位的缓存用于存储 gzip 的压缩结果数据流,4 16k 表示按照原始数据大小以 16k 为单位的 4 倍进行内存申请;
gzip_buffers 4 16k;
# 设置 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项;如果你用了 Nginx 的反向代理并启用 Gzip 压缩的话就需要加上,而由于末端通信是 http/1.0,故请设置为 1.0;
gzip_http_version 1.0;
# zip 压缩比,为 1 时,压缩比最小处理速度最快;为 9 时,压缩比最大但处理速度最慢;
gzip_comp_level 6;
# 匹配 mime 类型进行压缩,无论是否指定,text/html 类型总是会被压缩的;
gzip_types text/plain text/css application/json;
# 置开启或者关闭后端服务器返回的结果是否压缩,Nginx 作为反向代理的时候启用,匹配的前提是后端服务器必须要返回包含 Via 的 header头;
gzip_proxied any;
# 该配置和 http 头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过 gzip 压缩的页面,例如:用 Squid 缓存经过 Nginx 压缩的数据。
gzip_vray on;
...
}

server块

server {
# 监听端口
listen 8080;
# 监听服务器地址 监听的服务器地址可以是 IP 或者域名,并且可以使用正则表达式进行匹配
server_name 192.168.56.10;
# 每个连接请求上限次数
keepalive_requests 120;
# 字符集
charset utf-8;
# 服务日志所在目录以及日志格式 日志格式的定义和 http 模块的定义方式相同
access_log logs/host80.log myLogFormat;
# 错误页 错误页的地址为:server_name + error_page。
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}

server_ssl配置详解

server {
# 开启 ssl
ssl on;
# ssl 证书路径
ssl_certificate /opt/ssl/nginx.crt;
# ssl 证书秘钥
ssl_certificate_key /opt/ssl/nginx.key;
# ssl 会话超时时间
ssl_session_timeout 1d;
# ssl 缓存
ssl_session_cache shared:SSL:50m;
# ssl 会话票据
ssl_session_tickets off;
# ssl 协议版本
ssl_protocols TLSv1.2;
# ssl 密码套件
ssl_ciphers 'HIGH:!aNULL:!MD5';
# 开启 ssl 服务密码套件
ssl_prefer_server_ciphers on;
}

localtion块

# 配置请求的路由,以及各种页面的处理情况。

# 紧跟在 location 后面的是 location 模块监听的 url 地址,也就是 location 块的匹配规则,只有匹配正确的地址才会进入该 location 块,可以使用正则表达式进行匹配
location ~* ^.+$ {
# 服务器的默认网站根目录位置
root /var/www/html;
# 默认访问的文件名
index index.html index.htm index.jsp;
# 拒绝的 IP
deny 192.168.56.21;
deny all;
# 允许的 IP
allow 192.168.56.10;
allow all;
}

localtion设置响应头

location {
# 设置允许跨域类型
add_header Access-Control-Allow-Origin * always;
# 是否允许信任证书
add_header Access-Control-Allow-Credentials 'true' always;
# 允许的请求头类型
add_header Access-Control-Allow-Headers * always;
# 设置允许的请求方式
add_header Access-Control-Allow-Methods 'PUT, GET, POST, DELETE, OPTIONS' always;
# 处理 OPTIONS 请求
if ($request_method = 'OPTIONS') {
return 204;
}
}

设置反向代理

location {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;

proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;

# 反向代理服务器地址
proxy_pass http://192.168.56.33;
# 是否重定向代理服务器地址
proxy_redirect off;
}

# 设置向代理服务器发送请求时的请求头数据
location {
# cookie
proxy_pass_header Set-Cookie;
# 主机名
proxy_set_header Host $host;
# 真实 IP
proxy_set_header X-Real-Ip $remote_addr;
# 表示 HTTP 请求端真实 IP
proxy_set_header X-Forwarded-For $remote_addr;
}