Nginx 配置与反向代理常见问题总结
·
Nginx 配置与反向代理常见问题总结
1. Nginx.conf 配置解析
问题:解释提供的 nginx.conf 文件的作用。
总结:
- 全局部分
worker_processes 1;:工作进程数量,生产环境通常设置为 CPU 核心数或autouser nobody;(注释):指定 Nginx 进程运行的系统用户pid logs/nginx.pid;(注释):进程 ID 文件位置
- events 块
worker_connections 1024;:每个 worker 允许的最大并发连接数
- http 块
include mime.types;:加载 MIME 类型映射default_type application/octet-stream;:默认 Content-Typesendfile on;:启用高效静态文件传输keepalive_timeout 65;:长连接超时map $http_upgrade $connection_upgrade {...}:用于 WebSocket 升级连接
- upstream 块
- 定义后端服务池
webservers - 支持权重负载均衡
- 定义后端服务池
- server 块(监听 80)
- 静态站点:
location /→html/sky - 错误页:
error_page 500 502 503 504 /50x.html - 反向代理:
/api/→proxy_pass http://localhost:8080/admin/;/user/→proxy_pass http://webservers/user/;/ws/→ WebSocket 配置,支持长连接和 Upgrade
- 静态站点:
2. Nginx 静态页面 + 接口代理原理
问题:访问 localhost:80 时,页面发起的请求会被代理到其他地方吗?
答案:
- 浏览器访问
http://localhost:80→ 打开静态页面 - 页面内部请求
/api/...、/user/...、/ws/...→ Nginx 反向代理到后端 - 浏览器只和 Nginx 通信,不知道后端地址
3. 后端可以是远程服务器吗?
问题:被代理的后端地址可以是线上服务器吗?是否仍然不会跨域?
答案:
proxy_pass可以指向任何可访问的 HTTP/HTTPS 地址,包括远程服务器- 浏览器仍访问
http://localhost:80→ 请求发送到 Nginx - Nginx 再转发到线上后端 → 返回结果给浏览器
- 因为浏览器看到的请求都是同源(localhost:80),不会产生跨域问题
注意事项:
- 确保本机 Nginx 能访问远程服务器 IP/域名和端口
- 注意
proxy_pass尾部/的路径重写规则 - HTTPS 后端需要写
proxy_pass https://...,可配置证书验证
4. 浏览器与 Nginx 的关系
问题:浏览器是否一直访问 Nginx?接口请求也是?
答案:
- 浏览器始终访问 Nginx(本机 localhost:80)
- 前端发起的接口请求
/api/...、/user/...、/ws/...也都是发给 Nginx - Nginx 再代理到本地或远程后端
- 浏览器看不到后端地址 → 跨域问题不会发生
5. 相对地址与跨域
问题:如果前端使用相对地址请求接口,会带上 Nginx 的服务地址,这样是否就不会跨域?
答案:
- 前端请求相对地址
/api/login→ 浏览器自动使用当前页面的域名和端口(本机 Nginx) - 请求被 Nginx 转发到后端(本地或远程)
- 浏览器看到的请求始终是同源 → 不会触发跨域限制
✅ 总结结论
- 浏览器始终访问 Nginx:页面和接口请求都发给 Nginx
- Nginx 负责代理:可代理本地或远程后端
- 跨域问题由 Nginx 消除:浏览器只看到同源请求
- proxy_pass 配置注意:
- 尾部
/会影响路径重写 - 远程 HTTPS 需要使用
https://
- 尾部
- WebSocket 代理:需配置
Upgrade和Connection头以及长超时
更多推荐

所有评论(0)