2023 docker Nginx配置教程

~
接上篇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模块,安装该模块即可,网上有很多教程,这里不做展开了。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值