~
接上篇2023 docker nginx安装教程(含portainer教程)
1、nginx.conf配置
/opt/docker/nginx/nginx目录下的nginx.conf为主配置文件,其中有一行代码include /etc/nginx/conf.d/*.conf;
,表示会加载conf.d文件夹下的所有配置文件,所以往后的配置文件在conf.d文件夹下添加就行。
打开nginx.conf文件:
vi /opt/docker/nginx/nginx/nginx.conf
在include /etc/nginx/conf.d/*.conf;
这行代码上方添加:
client_header_buffer_size 256k; #用于设置客户端请求头的缓冲区大小。如果你的应用需要处理大型的请求头,你可以适当地增加这个值。
large_client_header_buffers 4 256k; #用于设置用于存储大型客户端请求头的缓冲区数量和大小。这个指令设置了 4 个大小为 256k 的缓冲区用于存储大型客户端请求头。
server_names_hash_bucket_size 256; #用于设置服务器名称哈希表的桶(bucket)数。如果你的服务器需要处理大量的虚拟主机或者服务器名称,增加这个值可以提高性能。
2、接口基本参数配置文件
往后添加转发的所有接口,均可包含此配置文件做基本配置,方便复用和管理。
创建proxy_params配置文件:
vi /opt/docker/nginx/nginx/conf.d/proxy_params
输入如下内容,可根据需要进行删减:
# 客户端请求控制
client_max_body_size 500m; # 设置最大请求体大小为 500MB
#代理服务器设置
proxy_connect_timeout 600s; # 设置连接后端超时时间
proxy_send_timeout 600s; # 设置发送后端超时时间
proxy_read_timeout 600s; # 设置读取后端超时时间
proxy_http_version 1.1; #指定与后端服务器通信时使用的 HTTP 协议版本为 1.1
proxy_set_header Upgrade $http_upgrade; #将请求中的 Upgrade 头部设置为与客户端相同的值,这通常用于 WebSocket 连接
proxy_set_header Connection $http_connection; #将请求中的 Connection 头部设置为与客户端相同的值,这有助于维持持久连接。
proxy_set_header Host $host; #将请求中的 Host 头部设置为当前请求的主机名
proxy_set_header X-Real-IP $remote_addr; #将请求头中的 X-Real-IP 设置为客户端的真实 IP 地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #向后端服务器传递经过代理的客户端 IP 地址列表。
proxy_set_header X-Forwarded-Proto $scheme; #向后端服务器传递当前请求的协议(http 或 https)。
proxy_cache_bypass $http_upgrade; #当请求包含 Upgrade 头部时,避免缓存该请求,通常用于避免缓存 WebSocket 连接。
#性能优化设置
keepalive_timeout 60s; #用于设置前端客户端与nginx的 keep-alive 连接的超时时间
3、跨域配置文件
创建跨域配置文件:
vi /opt/docker/nginx/nginx/conf.d/cross_domain_configuration
配置如下:
# 允许所有域进行跨域请求的配置
add_header 'Access-Control-Allow-Origin' '*'; # 允许所有域进行跨域请求
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE'; # 允许的 HTTP 方法
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; # 允许的请求头
add_header 'Access-Control-Allow-Credentials' 'true'; # 是否允许发送身份凭证(如 cookies、HTTP 认证信息)到目标服务器
4、自签名SSL证书配置(启用https)
创建证书文件夹:
mkdir -p /opt/docker/nginx/nginx/ssl/private
mkdir -p /opt/docker/nginx/nginx/ssl/certs
创建根证书密钥文件key:
sudo openssl genrsa -out /opt/docker/nginx/nginx/ssl/private/selfsigned.key 2048
创建根证书的申请文件:
sudo openssl req -new -key /opt/docker/nginx/nginx/ssl/private/selfsigned.key -out /opt/docker/nginx/nginx/ssl/private/selfsigned.csr
此时需要输入一些信息,Common Name填写自己的域名或者服务器IP,其他随便填,A challenge password []:密码也可以不用填:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shanghai
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:mjf
Organizational Unit Name (eg, section) []:mjf
Common Name (eg, your name or your server's hostname) []:101.102.109.139
Email Address []:jiulititi@gmail.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
创建一个自当前日期起为期十年的根证书,3650就是时间,自行修改:
sudo openssl x509 -req -days 3650 -in /opt/docker/nginx/nginx/ssl/private/selfsigned.csr -signkey /opt/docker/nginx/nginx/ssl/private/selfsigned.key -out /opt/docker/nginx/nginx/ssl/certs/selfsigned.crt
5、default.conf配置(默认端口80、443)
打开default.conf配置文件:
vi /opt/docker/nginx/nginx/conf.d/default.conf
配置如下:
server {
listen 80; #http配置
listen [::]:80;
listen 443 ssl; #https配置
server_name localhost;
# 添加SSL配置
ssl_certificate /etc/nginx/ssl/certs/selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/private/selfsigned.key;
# 可选:SSL优化设置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
#配置转发
location / {
proxy_pass http://105.109.100.34:8005/; #访问 https://本地IP/ 则代理至http://105.109.100.34:8005/
include /etc/nginx/conf.d/proxy_params; #引用基本配置文件,路径使用docker里的
include /etc/nginx/conf.d/cross_domain_configuration; #引用跨域配置文件,路径使用docker里的
}
#异常跳转
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
以后如果需要添加其他端口的配置,可依据此文档复制一份进行修改。
配置完毕后,进入nginx容器:
docker exec -it nginx bash
重新加载配置文件:
nginx -s reload
如果配置报错:
the "ssl" parameter requires ngx_http_ssl_module
则是缺少https模块,安装该模块即可,网上有很多教程,这里不做展开了。