1 概述

Nginx的作用主要如下:

1) 作为请求反响代理服务;
2) 请求负载均衡;
3) 作为静态资源服务器,提升静态资源加载速度,减轻应用服务器请求压力;

2 参考配置

2.1 主配置文件

以linux环境下配置为例,nginx.conf文件推荐配置如下:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;  #以liunx安装用户为准
worker_processes auto;
error_log /var/log/nginx/error.log; #存放错误日志的路径
pid /var/run/nginx.pid;

worker_rlimit_nofile 65535;

# include /etc/nginx/modules-enabled/*.conf;

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    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;

    charset   utf-8;

    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;

    keepalive_timeout  65s;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 2k;
    large_client_header_buffers 4 8k;
    client_max_body_size 10m;
    client_header_timeout 15s;
    client_body_timeout 15s;

    open_file_cache max=102400 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 1;

    reset_timedout_connection on;
    send_timeout 15s;
    server_tokens off;

    gzip on;
    gzip_min_length 2k;
    gzip_buffers   4 32k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;

    upstream lczServer {  #乐创者平台服务,可以是多个服务器节点地址、端口,也可以是下级nginx集群的代理地址、端口
        server ip:port weight=1;
        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/server/connectTestting HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczCreaterServer {  #跨设备表/云表单单服务,可以是多个服务器节点地址、端口,也可以是下级nginx集群的代理地址、端口
        server ip1:port weight=1;
        server ip2:port weight=1;
        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/server/connectTestting HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczMatrixServer {  #数智大屏服务,可以是多个服务器节点地址、端口,也可以是下级nginx集群的代理地址、端口
        server ip1:port weight=1;
        server ip2:port weight=1;
        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/server/connectTestting HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczReportServer {  #报表服务(报表服务压力一般都比较大,这里以二级集群为例)
        server ip:port;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/server/connectTestting HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream  lczPlatform { #平台微服务【v7.2.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczPlatform/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream  lczBatchWork { #离线开发微服务【v7.2.0+】 
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczBatchWorkEngine/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream  lczStreamWork { #实时同步微服务【v7.3.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczStreamWork/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream  lczDataProvide { #数据服务微服务【v7.2.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczDataProvide/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream  lczSchedule { # 调度微服务【v7.2.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczSchedule/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream  lczMessageCenter { # 乐创者消息微服务【v7.3.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczMessageCenter/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczChatAI { # lczChatAI微服务【v8.0.0+】
        server    127.0.0.1:9099;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczChatAI/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczChatManage {  # lczChatManage微服务【v8.0.0+】
        server    127.0.0.1:9100;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczChatManage/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczExcelReportServer { # 乐创者报表B/S设计微服务【v8.0.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczExcelReportEngine/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczDataModelServer { # 乐创者数据模型B/S设计微服务【v8.0.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczDataModelEngine/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }
    upstream lczCreaterServer { # 乐创者跨设备表单B/S设计微服务【v8.1.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczDataModelEngine/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }

    upstream lczConvertServer { # 乐创者CS模板转B/S模板微服务【v8.1.0+】
        server ip:port weight=1;

        #健康监测(可选)
        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD /oapi/lczConvertServer/server/health HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
        #check_keepalive_requests 100;
    }

    # include site configs
    include /etc/nginx/conf/http-server.conf;
    include /etc/nginx/conf/https-server.conf;
}

2.1.2 http协议server配置

http-server.conf 配置如下:

server {
    listen       80;
    #server_name  _;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;

    #【可选】【建议】通过动静分离配置,提升静态资源的加载效率及缓存可控性 =====================[[
    # 涉及报表/单元格表单/场景报表/透视分析/智能报告/跨设备表单/数智大屏/微应用/数据开发平台/数据模型/工作流设计/报表设计/模板管理中心/小乐AI等前端静态资源
    # 假设web应用名称为: lczServer,静态资源文件放在nginx安装目录/static/lczServer目录中
    # 注意:root可以使用相对路径(如果静态资源文件放在nginx安装目录/static目录下);alias只能使用绝对路径
    # 具体支持的前端资源范围与版本有关,可参考《动静分离配置》章节内容

    # 小乐AI (禁止html页面和config.js缓存,其他文件保持默认缓存策略)
    location /lczServer/(lczChatAI|lczChatManage)/config.js {
        root static/;
        # 也可以试用绝对路径,如:
        # root /var/nginx/static/;
        # 禁止缓存
        add_header Cache-Control "no-store, no-cache, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/(lczChatAI|lczChatManage)/.*\.(css|js)$ {
        root static/;
        expires 1y;
        add_header Cache-Control "public, immutable";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/(lczChatAI|lczChatManage)/.*\.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot|bmp)$ {
        root static/;
        expires 1h;
        add_header Cache-Control "public";
        # 禁止记录日志
        access_log off;
    }
    location /lczServer/lczChatAI {
        try_files $uri $uri/ /lczServer/lczChatAI/index.html;
    }
    location /lczServer/lczChatManage {
        try_files $uri $uri/ /lczServer/lczChatManage/index.html;
    }

    # 智能门户(禁止html页面缓存,其他文件保持默认缓存策略)
        location ~ ^/lczServer/lczPortal/.*\.(css|js)$  {
        root static/;
        expires 1y;
        add_header Cache-Control "public, immutable";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/lczPortal/.*\.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot|bmp)$  {
        root static/;
        expires 1h;
        add_header Cache-Control "public";
        # 禁止记录日志
        access_log off;
    }
    # 以lczPortal开启头的
    location ^~ /lczServer/lczPortal {
        root static/;

        # 禁止html页面缓存
        add_header Cache-Control "no-store, no-cache, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";

        access_log off;
        try_files $uri $uri/ /lczServer/lczPortal/index.html;
    }

    # *.html页面统一输出(禁止html页面缓存,其他文件保持默认缓存策略)
    location ~ ^/lczServer/lcz.*/.*\.(html|htm)$ {
        root static/;
        # 禁止html页面缓存
        add_header Cache-Control "no-store, no-cache, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/(lczCommon|lczReport)/ {
        root static/;
        expires 1h;
        add_header Cache-Control "public";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/lcz(?!Resource).*/ {
        root static/;
        expires 30d;
        add_header Cache-Control "public";
        # 禁止记录日志
        access_log off;
    }
    # 动静分离配置 =====================]]

    #【可选】websocket 反向代理配置,用于lczPortal长连接(消息数字自动更新)
    location /lczServer/webSocket/user {
        proxy_set_header Host               $host;
        proxy_set_header X-Forwarded-Scheme $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header X-real-ip          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_pass   http://lczServer;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 36000s;
        proxy_send_timeout 36000s;
    }

    # 乐创者后端配置==========================================[[
    # 跨设备表单、云表单等对内/对外的后台接口
    location /lczServer/creater/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczCreaterServer;
        proxy_connect_timeout 60; #单位:秒
    }
    location ~ ^/lczServer/(api|oapi)/(cform|lczCloudForm|creater)/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczCreaterServer;
        proxy_connect_timeout 60; #单位:秒
    }

    # 数智大屏后台接口
    location /lczServer/api/lczMatrix/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczMatrixServer;
        proxy_connect_timeout 60; #单位:秒
    }

    # 报表/单元格表单/场景报表/透视分析/智能报告等后台接口
    location ~ ^/lczServer/(hrServlet|hrServletEx) {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczReportServer;
        proxy_connect_timeout 60; #单位:秒
    }
    location ~ ^/lczServer/api/(lczReport|lczPivot|lczQuery)/ {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczReportServer;
        proxy_connect_timeout 60; #单位:秒
    }

    # 平台微服务控制器 (含 数据开发平台相关控制器、知识库rpc调用 ) 【v7.2.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/(lczPlatform|lczBatchWork|lczKnowledge|lczStreamWork|lczDataService|lczDataModel)/ {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczPlatform;
    }

    # 离线开发微服务控制器 【v7.2.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczBatchWorkEngine/ {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczBatchWork;
    }

    # 实时同步微服务控制器 【v7.3.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczStreamWorkEngine/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczStreamWork;
    }

    # 数据API服务微服务控制器 【v7.2.0+】
    location ~ ^/lczServer/(api|oapi)/(lczDataProvide|dataService)/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczDataProvide;
    }

    # 调度微服务控制器 【v7.2.0+】
    location ~ ^/lczServer/(api|oapi)/lczSchedule/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczSchedule;
    }

    # 乐创者消息微服务控制器 【v7.3.0+】
    location ~ ^/lczServer/(rapi|oapi)/lczMessageCenter/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczMessageCenter;
    }

    # lczChatAI 【v8.0.0+】
    location ~ ^/lczServer/(rapi|api|oapi)/lczChatBI/  {
        # 关闭缓冲
        proxy_buffering off;           # 禁用响应缓冲
        proxy_cache off;               # 禁用缓存
        proxy_request_buffering off;   # 禁用请求缓冲

        # 禁用压缩,避免压缩缓冲
        gzip off;
        proxy_set_header Accept-Encoding "";

        # 强制上层网络(xxx云/代理)不要缓冲
        add_header X-Accel-Buffering no;

        # 长连接保活
        proxy_http_version 1.1;        # 使用 HTTP/1.1
        proxy_set_header Connection ""; # 清除 Connection 头
        keepalive_timeout 300s;

        # 超时时间拉满(防止思考时断流)
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
        send_timeout 300s;

        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        proxy_pass http://lczChatAI;
    }
    #lczChatManage 【v8.0.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczChatManage/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        # 关闭缓冲
        proxy_buffering off;           # 禁用响应缓冲

        proxy_pass http://lczChatManage;
    }

    # 乐创者报表B/S编辑微服务控制器 【v8.0.0+】
        location ~ ^/lczServer/(api|rapi|oapi)/lczExcelReportEngine/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczExcelReportServer;
    }

    # 乐创者数据模型B/S编辑微服务控制器 【v8.0.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczDataModelEngine/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczDataModelServer;
    }

    # 乐创者跨设备B/S编辑微服务控制器 【v8.1.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczCreaterServer/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczCreaterServer;
    }

    # 乐创者模板CS转BS微服务 【v8.1.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczConvertServer/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczConvertServer;
    }
    # 乐创者后端配置==========================================]]

    # 其他请求代理配置
    location / {
    proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Scheme $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://lczServer;
        proxy_connect_timeout 60; #单位:秒
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

2.1.3 https协议server配置

https-server.conf 配置如下:

server {
    listen       443 ssl;
    server_name  生成证书的ip或者域名;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;

    ssl_certificate path\xxxx.pem;  # 证书路径
    ssl_certificate_key path\xxxx-key.pem;  # 私钥路径

    #【可选】【建议】通过动静分离配置,提升静态资源的加载效率及缓存可控性 =====================[[
    # 涉及报表/单元格表单/场景报表/透视分析/智能报告/跨设备表单/数智大屏/微应用/数据开发平台/数据模型/工作流设计/报表设计/模板管理中心/小乐AI等前端静态资源
    # 假设web应用名称为: lczServer,静态资源文件放在nginx安装目录/static/lczServer目录中
    # 注意:root可以使用相对路径(如果静态资源文件放在nginx安装目录/static目录下);alias只能使用绝对路径
    # 具体支持的前端资源范围与版本有关,可参考《动静分离配置》章节内容

    # 小乐AI (禁止html页面和config.js缓存,其他文件保持默认缓存策略)
    location /lczServer/(lczChatAI|lczChatManage)/config.js {
        root static/;
        # 也可以试用绝对路径,如:
        # root /var/nginx/static/;
        # 禁止缓存
        add_header Cache-Control "no-store, no-cache, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/(lczChatAI|lczChatManage)/.*\.(css|js)$ {
        root static/;
        expires 1y;
        add_header Cache-Control "public, immutable";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/(lczChatAI|lczChatManage)/.*\.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot|bmp)$ {
        root static/;
        expires 1h;
        add_header Cache-Control "public";
        # 禁止记录日志
        access_log off;
    }
    location /lczServer/lczChatAI {
        try_files $uri $uri/ /lczServer/lczChatAI/index.html;
    }
    location /lczServer/lczChatManage {
        try_files $uri $uri/ /lczServer/lczChatManage/index.html;
    }

    # 智能门户(禁止html页面缓存,其他文件保持默认缓存策略)
    location ~ ^/lczServer/lczPortal/.*\.(css|js)$  {
        root static/;
        expires 1y;
        add_header Cache-Control "public, immutable";
        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/lczPortal/.*\.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot|bmp)$  {
        root static/;
        expires 1h;
        add_header Cache-Control "public";
        # 禁止记录日志
        access_log off;
    }
    # 以lczPortal开启头的
    location ^~ /lczServer/lczPortal {
        root static/;

        # 禁止html页面缓存
        add_header Cache-Control "no-store, no-cache, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";

        access_log off;
        try_files $uri $uri/ /lczServer/lczPortal/index.html;
    }

    # *.html页面统一输出(禁止html页面缓存,其他文件保持默认缓存策略)
    location ~ ^/lczServer/lcz.*/.*\.(html|htm)$ {
        root static/;
        # 禁止html页面缓存
        add_header Cache-Control "no-store, no-cache, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";

        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/(lczCommon|lczReport)/ {
        root static/;
        expires 1h;
        add_header Cache-Control "public";

        # 禁止记录日志
        access_log off;
    }
    location ~ ^/lczServer/lcz(?!Resource).*/ {
        root static/;
        expires 30d;
        add_header Cache-Control "public";
        # 禁止记录日志
        access_log off;
    }
    # 动静分离配置 =====================]]

    #【可选】websocket 反向代理配置,用于lczPortal长连接(消息数字自动更新)
    location /lczServer/webSocket/user {
        proxy_set_header Host               $host;
        proxy_set_header X-Forwarded-Scheme $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header X-real-ip          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_pass   http://lczServer;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 36000s;
        proxy_send_timeout 36000s;
    }

    # 乐创者后端配置==========================================[[
    # 跨设备表单、云表单等对内/对外的后台接口
    location /lczServer/creater/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczCreaterServer;
        proxy_connect_timeout 60; #单位:秒
    }
    location ~ ^/lczServer/(api|oapi)/(cform|lczCloudForm|creater)/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczCreaterServer;
        proxy_connect_timeout 60; #单位:秒
    }

    # 数智大屏后台接口
    location /lczServer/api/lczMatrix/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczMatrixServer;
        proxy_connect_timeout 60; #单位:秒
    }

    # 报表/单元格表单/场景报表/透视分析/智能报告等后台接口
    location ~ ^/lczServer/(hrServlet|hrServletEx) {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczReportServer;
        proxy_connect_timeout 60; #单位:秒
    }
    location ~ ^/lczServer/api/(lczReport|lczPivot|lczQuery)/ {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczReportServer;
        proxy_connect_timeout 60; #单位:秒
    }

    # 平台微服务控制器 (含 数据开发平台相关控制器、知识库rpc调用 ) 【v7.2.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/(lczPlatform|lczBatchWork|lczKnowledge|lczStreamWork|lczDataService|lczDataModel)/ {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczPlatform;
    }

    # 离线开发微服务控制器 【v7.2.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczBatchWorkEngine/ {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczBatchWork;
    }

    # 实时同步微服务控制器 【v7.3.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczStreamWorkEngine/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczStreamWork;
    }

        # 数据API服务微服务控制器 【v7.2.0+】
        location ~ ^/lczServer/(api|oapi)/(lczDataProvide|dataService)/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczDataProvide;
    }

    # 调度微服务控制器 【v7.2.0+】
    location ~ ^/lczServer/(api|oapi)/lczSchedule/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczSchedule;
    }

        # 乐创者消息微服务控制器 【v7.3.0+】
    location ~ ^/lczServer/(rapi|oapi)/lczMessageCenter/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczMessageCenter;
    }

    # lczChatAI 【v8.0.0+】
    location ~ ^/lczServer/(rapi|api|oapi)/lczChatBI/  {
        # 关闭缓冲
        proxy_buffering off;           # 禁用响应缓冲
        proxy_cache off;               # 禁用缓存
        proxy_request_buffering off;   # 禁用请求缓冲

        # 禁用压缩,避免压缩缓冲
        gzip off;

        # 长连接保活
        proxy_http_version 1.1;        # 使用 HTTP/1.1
        proxy_set_header Connection ""; # 清除 Connection 头
        keepalive_timeout 300s;

        # 强制上层网络(xxx云/代理)不要缓冲
        add_header X-Accel-Buffering no;

        # 超时时间拉满(防止思考时断流)
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
        send_timeout 300s;

        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        proxy_pass http://lczChatAI;
    }
    #lczChatManage 【v8.0.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczChatManage/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_buffering off;
        proxy_pass http://lczChatManage;
    }

    # 乐创者报表B/S编辑微服务控制器 【v8.0.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczExcelReportEngine/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczExcelReportServer;
    }

    # 乐创者数据模型B/S编辑微服务控制器 【v8.0.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczDataModelEngine/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczDataModelServer;
    }

    # 乐创者跨设备B/S编辑微服务控制器 【v8.1.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczCreaterServer/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczCreaterServer;
    }

    # 乐创者模板CS转BS微服务 【v8.1.0+】
    location ~ ^/lczServer/(api|rapi|oapi)/lczConvertServer/  {
        proxy_set_header   Host             $host;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass http://lczConvertServer;
    }
    # 乐创者后端配置==========================================]]

    # 其他请求代理配置
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Scheme $scheme;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://lczServer;
        proxy_connect_timeout 60; #单位:秒

        # 强制为所有 Cookie 添加 Secure 和 HttpOnly 属性
        proxy_cookie_flags ~ secure httponly samesite=Lax;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

注意:{/lczServer} 在上面代表可选,例如lczServer.war包部署时是放在ROOT目录下,则可以省略;如果是改成其他名称的,修改为对应的名称即可。

3 部署过程

3.1 linux环境(推荐)

安装之前查看端口,默认nginx使用的80端口,如果80端口已经占用启动过程中可能会报错,针对端口占用情况,可以停止占用端口的服务或者nginx改用其他端口启动,停用和改端口方法不再本文介绍。

yum 安装ningx

nginx添加yum repro库中:

#下载nginx包
wget https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 建立nginx的yum仓库
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

查看nginx信息:

yum info nginx

查看yum源仓库中nginx版本:

yum --showduplicates list nginx | expand

安装nginx,默认安装最新的稳定版本:

yum install nginx

查看nginx的状态:

ps -ef | grep nginx

进入nginx的sbin目录下:

启动nginx: ./nginx
重启nginx: ./nginx -s reload
关闭nginx:
    方式1: ./nginx -s stop  #先查出nginx进程id再使用kill命令强制杀掉进程
    方式2: ./nginx -s quit  #待nginx进程处理任务完毕进行停止

nginx.conf文件修改后,要重启Nginx服务才能生效。

3.2 windows环境

官方下载地址:http://nginx.org/en/download.html,建议下载最新的稳定版本。
下载完成后,解压缩,然后就可通过windows命令行窗口(CMD)进行启动。

打开命令行窗口后,先进入nginx解压后目录下的bin目录,然后可通过下面命令启动、重启、关闭Nginx服务。

启动:start nginx.exe
重启:nginx -s reload
关闭:nginx -s stop 或 nginx -s quit

1)、请不要通过进程管理器中杀进程的方式终止nginx;
2)、nginx.conf文件修改后,要重启Nginx服务才能生效。

4 Web服务响应配置

4.1 Tomcat

如果nginx使用https协议,tomcat使用的是非https端口,则需要在Tomcat的server.xml文件的 Connector 中增加以下配置:
方式一(推荐)、

<Valve className="org.apache.catalina.valves.RemoteIpValve"
       remoteIpHeader="X-Forwarded-For"
       protocolHeader="X-Forwarded-Proto"
       protocolHeaderHttpsValue="https"
       portHeader="X-Forwarded-Port"
       internalProxies="127\.0\.0\.1|::1" />

portHeader: 需要 Tomcat 8.5+;旧版本没有这个属性,但会根据 scheme 推断端口(https → 443),效果基本相同。
internalProxies: 默认信任私网/回环地址。如果 nginx 与 Tomcat 不在同网段或 nginx 是公网 IP,需要显式写上 nginx 的实际 IP,否则头会被忽略。

方式二、
proxyPort=”443” scheme=”https” secure=”true”

例如:

<Connector port="8091" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
      connectionTimeout="20000"
      keepAliveTimeout="60000"
      acceptCount="1000"
      maxConnections="10000"
      enableLookups="false"
      useBodyEncodingForURI="true"
      proxyPort="443"
      scheme="https"
      secure="true"
/>
作者:柳杨  创建时间:2025-12-22 09:19
最后编辑:柳杨  更新时间:2026-10-20 12:18