广丰卷烟厂数采质量分析系统
zhuguifei
2026-03-02 80ff784bf60637cd348ae665fc907f7b1e527dd8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
events {
    # 可以根据业务并发量适当调高
    worker_connections  1024;
}
 
http {
    include       mime.types;
    default_type  application/octet-stream;
    # 高效传输文件
    sendfile        on;
    # 长连接超时时间
    keepalive_timeout  65;
    # 单连接最大请求数,提高长连接复用率
    keepalive_requests 100000;
    # 限制body大小
    client_max_body_size 100m;
    client_header_buffer_size 32k;
    client_body_buffer_size   512k;
    # 开启静态资源压缩
    gzip_static on;
    # 连接数限制 (防御类配置) 10m 一般够用了,能存储上万 IP 的计数
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=perserver:10m;
    # 隐藏 nginx 版本号,防止暴露版本信息
    server_tokens off;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    upstream server {
        ip_hash;
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
    }
 
    upstream monitor-admin {
        server 127.0.0.1:9090;
    }
 
    upstream snailjob-server {
        server 127.0.0.1:8800;
    }
 
    server {
        listen       80;
        server_name  localhost;
 
        # https配置参考 start
        #listen       443 ssl;
 
        # 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径
        #ssl on;
        #ssl_certificate      /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_certificate_key  /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_session_timeout 5m;
        #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
        #ssl_prefer_server_ciphers on;
        # https配置参考 end
 
        # 演示环境配置 拦截除 GET POST 之外的所有请求
        # if ($request_method !~* GET|POST) {
        #     rewrite  ^/(.*)$  /403;
        # }
 
        # location = /403 {
        #     default_type application/json;
        #     return 200 '{"msg":"演示模式,不允许操作","code":500}';
        # }
 
        # 限制外网访问内网 actuator 相关路径
        location ~ ^(/[^/]*)?/actuator.*(/.*)?$ {
            return 403;
        }
 
        location / {
            root   /usr/share/nginx/html; # docker映射路径 不允许更改
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
 
        location /prod-api/ {
            # 设置客户端请求头中的 Host 信息(保持原始 Host)
            proxy_set_header Host $http_host;
            # 获取客户端真实 IP
            proxy_set_header X-Real-IP $remote_addr;
            # 自定义头 REMOTE-HOST,记录客户端 IP
            proxy_set_header REMOTE-HOST $remote_addr;
            # 获取完整的客户端 IP 链(经过多级代理时)
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 设置后端响应超时时间(这里是 24 小时,适合长连接/SSE)
            proxy_read_timeout 86400s;
            # SSE (Server-Sent Events) 与 WebSocket 支持参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            # 禁用代理缓冲,数据直接传给客户端
            proxy_buffering off;
            # 禁用代理缓存
            proxy_cache off;
            proxy_pass http://server/;
        }
 
        # https 会拦截内链所有的 http 请求 造成功能无法使用
        # 解决方案1 将 admin 服务 也配置成 https
        # 解决方案2 将菜单配置为外链访问 走独立页面 http 访问
        location /admin/ {
            # 设置客户端请求头中的 Host 信息(保持原始 Host)
            proxy_set_header Host $http_host;
            # 获取客户端真实 IP
            proxy_set_header X-Real-IP $remote_addr;
            # 自定义头 REMOTE-HOST,记录客户端 IP
            proxy_set_header REMOTE-HOST $remote_addr;
            # 获取完整的客户端 IP 链(经过多级代理时)
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 禁用代理缓冲,数据直接传给客户端
            proxy_buffering off;
            # 禁用代理缓存
            proxy_cache off;
            proxy_pass http://monitor-admin/admin/;
        }
 
        location /snail-job/ {
            # 设置客户端请求头中的 Host 信息(保持原始 Host)
            proxy_set_header Host $http_host;
            # 获取客户端真实 IP
            proxy_set_header X-Real-IP $remote_addr;
            # 自定义头 REMOTE-HOST,记录客户端 IP
            proxy_set_header REMOTE-HOST $remote_addr;
            # 获取完整的客户端 IP 链(经过多级代理时)
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # SSE (Server-Sent Events) 与 WebSocket 支持参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            # 禁用代理缓冲,直接传输给客户端
            proxy_buffering off;
            # 禁用代理缓存
            proxy_cache off;
            proxy_pass http://snailjob-server/snail-job/;
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}