From 9d186312e50c30cf3e0c07bd904cf2573758e9b0 Mon Sep 17 00:00:00 2001 From: yidl Date: Tue, 24 Jun 2025 00:18:46 +0800 Subject: [PATCH] save --- nginx.conf.gateway | 199 +++++++++++++++++---------------------------- 1 file changed, 76 insertions(+), 123 deletions(-) diff --git a/nginx.conf.gateway b/nginx.conf.gateway index 4221343..8d0756f 100644 --- a/nginx.conf.gateway +++ b/nginx.conf.gateway @@ -22,153 +22,106 @@ http { sendfile on; tcp_nopush on; tcp_nodelay on; + keepalive_timeout 65; - keepalive_timeout 30s; - keepalive_requests 1000; + # Gzip 压缩 + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; - # 安全响应头 - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always; - add_header X-Content-Type-Options nosniff; - add_header X-Frame-Options SAMEORIGIN; - - # --- SSL 配置 --- - # 可以在 http 块中统一配置 SSL,然后 server 块继承,或者在 server 块中重复配置以覆盖 - ssl_certificate /etc/nginx/certs/server.crt; - ssl_certificate_key /etc/nginx/certs/server.key; - ssl_protocols TLSv1.2 TLSv1.3; - ssl_prefer_server_ciphers on; - ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; - ssl_session_cache shared:SSL:10m; - ssl_session_timeout 10m; - - # --- 后端服务定义 --- + # --- 后端服务定义 (Upstreams) --- + # 根据您的描述更新了端口号 + + # 认证中心 (IdentityServer4) + upstream auth_server { + server sys-api:19902; + } + + # Sys 系统 API + upstream sys_api { + server sys-api:19901; + } + + # Lmg 系统 API + upstream lmg_api { + server lmg-api:19903; + } + + # Sys 系统 UI upstream sys_ui { server sys-ui:80; } + + # Lmg 系统 UI upstream lmg_ui { server lmg-ui:80; } - upstream sys_api { - server sys_api:19902; - } - upstream lmg_api { - server lmg_api:19904; - } - upstream auth_api { - server sys_api:19902; # 假设认证服务也由 sys_api 提供,并且端口是 19902 - } - # --- 合并后的网关服务配置 --- + # --- 统一网关服务 --- server { - listen 8000 ssl reuseport; - # 如果你的 IP 106.52.199.114 是你对外的服务地址,可以用它。 - # 如果你有一个域名,比如 www.your-domain.com,那么 server_name 应该指向那个域名。 - # 如果只有一个 IP,可以不写 server_name,或者写 IP 地址。 - # server_name 106.52.199.114; # 或者你的域名 + listen 8000 ssl http2; # 使用 http2 提升性能 + server_name 192.168.1.100; # 替换为您的域名或IP - # SSL 配置 (如果 http 块已配置,这里可以省略,除非需要特定 server 的 SSL 设置) - # ssl_certificate /etc/nginx/certs/server.crt; - # ssl_certificate_key /etc/nginx/certs/server.key; - # ... 其他 SSL 设置 ... + # --- SSL 配置 --- + ssl_certificate /etc/nginx/certs/server.crt; + ssl_certificate_key /etc/nginx/certs/server.key; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 10m; - # 统一代理头配置 + # --- 统一代理头配置 --- + # 这些头对后端服务正确识别客户端信息至关重要 proxy_set_header Host $host; 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; + proxy_set_header X-Forwarded-Host $host; - # --- Sys UI 静态资源服务 --- - # 所有以 /sys/ 开头的请求,都代理到 sys_ui 容器 - # nginx 的 location 会处理路径的匹配和剥离 - location /sys/ { - proxy_pass http://sys_ui/; # 注意这里的 / 后面的斜杠很重要,它会使代理到上游时保持路径 - proxy_set_header Host $host; - 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; - # 如果 sys-ui 的裏面 Nginx 配置了 try_files /index.html; - # 那么这里代理到 http://sys_ui/ 即可,它会代理到 http://sys_ui/sys/ 后, - # sys-ui 的 Nginx 会处理 /sys/index.html 的请求 + # --- 路由规则 (Locations) --- + + # 1. 认证中心 (IdentityServer4) 路由 + # 匹配所有认证相关的路径 + location ~ ^/(connect|Account|\\.well-known)/ { + proxy_pass http://auth_server; } - # --- Sys API 代理 --- - # 所有以 /sys/api/ 开头的请求,都代理到 sys_api - location /sys/api/ { - proxy_pass https://sys_api/api/; # 注意这里,代理目标路径是 /api/,并且会保留原始请求的 /sys/api/ 之后的路径 - proxy_ssl_server_name on; - proxy_ssl_session_reuse off; - # 生产环境建议开启证书验证:proxy_ssl_verify on; - # 如果后端 sys_api 是 HTTP 而不是 HTTPS,请去掉 proxy_ssl_... 配置,直接使用 proxy_pass http://sys_api/api/; - proxy_ssl_verify off; - - proxy_set_header Host $proxy_host; # 使用上游服务的 Host - proxy_set_header Authorization $http_authorization; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host:$server_port; - - # 这是一个很关键的重写,确保上游的 Location Header 也正确指向新的路径 - proxy_redirect https://sys_api/ /sys/api/; + # 2. Sys API 路由 + location /api/sys/ { + # 将 /api/sys/path -> http://sys_api/api/sys/path + proxy_pass http://sys_api; } - # --- Lmg UI 静态资源服务 --- - # 所有以 /lmg/ 开头的请求,都代理到 lmg_ui 容器 + # 3. Lmg API 路由 + location /api/lmg/ { + # 将 /api/lmg/path -> http://lmg_api/api/lmg/path + proxy_pass http://lmg_api; + } + + # 4. Lmg UI 路由 + # IMPORTANT: lmg-ui 的前端路由基础路径(base path)需要配置为 /lmg/ location /lmg/ { - proxy_pass http://lmg_ui/; # 同样,这里的 / 后面的斜杠很重要 - proxy_set_header Host $host; - 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; + # 将 /lmg/path -> http://lmg_ui/path + proxy_pass http://lmg_ui/; + } + + # 5. Sys UI 和根路径路由 + # IMPORTANT: sys-ui 的前端路由基础路径(base path)需要配置为 / + # 或者如果你想用 /sys/ 访问,则前端基础路径配 /sys/ + location / { + # 根路径 / 直接访问 sys_ui + # 将 /path -> http://sys_ui/path + proxy_pass http://sys_ui; } - # --- Lmg API 代理 --- - # 所有以 /lmg/api/ 开头的请求,都代理到 lmg_api - location /lmg/api/ { - proxy_pass https://lmg_api/api/; - proxy_ssl_server_name on; - proxy_ssl_session_reuse off; - proxy_ssl_verify off; - - proxy_set_header Host $proxy_host; - proxy_set_header Authorization $http_authorization; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host:$server_port; - - proxy_redirect https://lmg_api/ /lmg/api/; # 重写 Location 头 + # 6. OAuth 回调地址路由 + # 这个回调是给客户端(UI)的,这里我们假设它由 sys-ui 处理 + location = /Callback { + # 将 /Callback -> http://sys_ui/Callback + proxy_pass http://sys_ui; } - - # --- 认证服务代理 --- - # 这个可以放在一个单独的 location 中,因为它不属于任何 UI - # 假设认证服务在 /auth/ 下 - location /auth/ { - proxy_pass https://auth_api/auth/; - proxy_ssl_server_name on; - proxy_ssl_session_reuse off; - proxy_ssl_verify off; - - proxy_set_header Host $proxy_host; - proxy_set_header Authorization $http_authorization; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host:$server_port; - - proxy_redirect https://auth_api/ /auth/; # 重写 Location 头 - } - - # 如果有其他的根路径请求,可以单独处理,或者暂时不做处理 - # 例如,如果你想让访问根目录 `/` 的时候显示一个默认页面或跳转到某个 UI - # location / { - # return 301 /sys/; # 例如,将所有直接访问根目录的请求重定向到 sys-ui - # } - - # 如果你的 sys-ui 和 lmg-ui 的构建配置是输出到 dist 目录, - # 并且它们的 index.html 都在根目录下,那么代理到上游的时候, - # Nginx 的 location directive 会处理路径。 - # 例如访问 http://your-gateway:8000/sys/ 会代理到 http://sys-ui:80/ - # 此时 sys-ui 内部的 Nginx 会去查找 / (或者 /sys/) 下的 index.html - # 如果 sys-ui 的 Nginx 配置了 try_files $uri $uri/ /index.html; - # 并且它的 index.html 在根目录,那么 Nginx 代理到 http://sys-ui:80/ 会找到 /index.html 并返回。 - # 如果你希望它能处理 /sys/ 的路由,那么 sys-ui 的前端路由也需要支持 /sys/ 开头的路径。 - # 在很多 SPA 应用中,前端会配置一个基础路径(base path),例如 Vue.js 的 publicPath。 - # 如果你的 sys-ui 的 publicPath 是 /sys/,lmg-ui 的 publicPath 是 /lmg/ - # 那么上面的配置就基本是正确的。 } }