==========================================================
Nginx 核心配置文件 (用于 Docker 多容器环境)
==========================================================
1. 定义上游服务器 (可选,用于给后端起别名或做负载均衡)
upstream java_backend {
server backend:8080; # 这里 backend 是 Docker Compose 中的服务名
keepalive 32; # 保持长连接,提高性能
}
server {
------------------------------------------------------
A. 基础监听配置
------------------------------------------------------
listen 80; # 监听 IPv4 的 80 端口
listen [::]:80; # 监听 IPv6 的 80 端口
server_name 用来填写域名,如果没有域名那就填写_
server_name _; # _ 代表匹配所有域名或 IP 访问
字符集设置,防止中文乱码
charset utf-8;
------------------------------------------------------
B. 静态资源转发 (前端页面)
------------------------------------------------------
location / {
转发到前端容器的端
front 是你写docker-compse文件的时候给容器命的名
proxy_pass http://frontend:3000;
标准代理头设置
如果你通过域名访问host = **域名** 如果你通过IP访问,host = IP 地址
proxy_set_header Host $host;
告诉后端是谁在找你,获取请求用户的IP地址
proxy_set_header X-Real-IP $remote_addr;
IP链路清单,如果请求经过了多个代理(比如 CDN -> Nginx -> Java),这个字段会像接力棒一样记录所有的 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
支持单页应用 (SPA) 的路由切换,防止 404
try_files uri uri/ /index.html;
}
------------------------------------------------------
C. 后端 API 接口转发 (Java/Spring Boot)
------------------------------------------------------
匹配所有以 /api/ 开头的请求
location /api/ {
1. 转发地址:使用 Docker 服务名 backend 访问
末尾加 / 表示去掉路径中的 /api/ 再转发给后端
proxy_pass http://java_backend/;
2. 身份识别头 (重点笔记!)
告诉后端原本请求的域名/Host是什么
proxy_set_header Host $host;
告诉后端用户的真实客户端 IP
proxy_set_header X-Real-IP $remote_addr;
记录整个请求链路中的所有代理 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
告诉后端请求协议是 http 还是 https
proxy_set_header X-Forwarded-Proto $scheme;
3. 超时设置 (防止大任务处理时连接中断)
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
4. 允许上传大文件 (默认只有 1M)
client_max_body_size 50m;
}
------------------------------------------------------
D. WebSocket 支持 (如果你的 AI Agent 有实时对话功能)
------------------------------------------------------
location /ws/ {
proxy_pass http://backend:8080;
proxy_http_version 1.1;
必须设置以下两个头才能建立 WebSocket 连接
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
------------------------------------------------------
E. 错误页面配置
------------------------------------------------------
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
------------------------------------------------------
F. 安全建议 (可选)
------------------------------------------------------
隐藏 Nginx 版本号,减少被攻击风险
server_tokens off;
}
一般情况来讲,一个NGINX配置文件对应了一个域名的配置,
真实的网络请求发过来的时候,NGINX启动,读取主配置文件,nginx.conf
执行 include:主配置里有一句 include /etc/nginx/conf.d/*.conf;那么就会将子文件的内容全部加载到内存中,进行一个巨大的路由查找。
输入域名,然后在这个巨大的路由这里进行查看,看用户输入的域名跟哪个NGINX配置文件对应,然后进行配置文件的读取,然后进行请求操作。
一个IP地址可以映射多个域名,通常情况下,我们是通过访问域名的方式访问这个网站,通过NGINX,可以让我们知道实际的请求是什么: proxy_pass http://frontend:3000;