主应用配置

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    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;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    ## 这里加载的conf 将会是单独的 server 。
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

    server {
        listen       8080;
        listen       [::]:8080;
        server_name  fs_h5_server;

        ## 开启 gzip压缩
        gzip on;  
        gzip_min_length 1k; ## 大于或等于这个值,则就会压缩 
        gzip_comp_level 5; ## 压缩等级 5 是最平衡的
        gzip_types text/plain text/css application/json application/javascript text/javascript image/svg+xml; ## gzip压缩的类型
        gzip_vary on;

        ## 会直接将这个目录下的所有文件内容加载到 8080这个端口配置下,在这里可以做子应用的配置。
        include /etc/nginx/fs.conf.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }


        // 所有子应用公用代理端口
        location /api/v1 {
           proxy_pass http://192.168.18.151:8082;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /fs-api/ {
            rewrite ^/fs-api/(.*)$ /$1 break;
            proxy_pass https://open.feishu.cn;  

            proxy_set_header Host open.feishu.cn; ## 转发https时,Nginx 去找后端时需要进行 SSL 握手。需要手动指定固定域名。
            proxy_ssl_server_name on;
            proxy_ssl_protocols TLSv1.2 TLSv1.3;

            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;
        }
    }
}

子应用配置

子应用配置1

location /xxx/ {   ## 后面的 “/”不能去掉。因此在访问时,也是必须这样访问:http:xxxx/xxx/
    alias /usr/local/nginx/html/xxx/;
    index index.html;
    try_files $uri $uri/ /xxx/index.html;

    ## 配置强缓存
    expires 30d;
    add_header Cache-Control "public, no-transform";

    ## 不缓存 html。虽然真实的地址不会这样去访问,但是上面的 try_files 在访问 /xxx的时候会默认去找。也会匹配到这 
    if ($request_filename ~* \.(html|htm)$) {
        expires -1;
        add_header Cache-Control "no-cache, no-store, must-revalidate";
    }
}

子应用配置2

location /xxx/ {
    alias /usr/local/nginx/html/xxx/;
    index index.html;
    try_files $uri $uri/ /xxx/index.html;

    expires 30d;
    add_header Cache-Control "public, no-transform";
    if ($request_filename ~* \.(html|htm)$) {
        expires -1;
        add_header Cache-Control "no-cache, no-store, must-revalidate";
    }
}

location /fin360api {
    proxy_pass https://xxx.cn;

    proxy_set_header Host xxx.cn;

    ## 这两行一定要加上,不加的话,证书可能存在问题
    proxy_ssl_server_name on;  
    proxy_ssl_name xxx.cn;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}