找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 158|回复: 0

Nginx 反向代理配置详细教程

[复制链接]

16

主题

2

回帖

267

积分

超级版主

积分
267
发表于 2026-6-29 20:08:11 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 Soda 于 2026-6-29 20:21 编辑


一、什么是反向代理

反向代理(Reverse Proxy)是指代理服务器接收客户端的请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端。

正向代理 vs 反向代理:
  • 正向代理:代理客户端,客户端知道目标服务器
  • 反向代理:代理服务器端,客户端不知道真实服务器





二、Nginx 反向代理基本配置

2.1 最简单的反向代理配置

  1. server {
  2.     listen 80;
  3.     server_name example.com;

  4.     location / {
  5.         proxy_pass [url]http://127.0.0.1:8080;[/url]
  6.     }
  7. }
复制代码


2.2 常用配置参数

  1. location / {
  2.     # 后端服务器地址
  3.     proxy_pass http://backend_server;
  4.    
  5.     # 设置请求头
  6.     proxy_set_header Host $host;
  7.     proxy_set_header X-Real-IP $remote_addr;
  8.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9.     proxy_set_header X-Forwarded-Proto $scheme;
  10.    
  11.     # 超时设置
  12.     proxy_connect_timeout 60s;
  13.     proxy_read_timeout 60s;
  14.     proxy_send_timeout 60s;
  15.    
  16.     # 缓冲区设置
  17.     proxy_buffering on;
  18.     proxy_buffer_size 4k;
  19.     proxy_buffers 8 4k;
  20.     proxy_busy_buffers_size 8k;
  21. }
复制代码





三、实际应用场景

3.1 多域名反向代理

  1. # 网站1
  2. server {
  3.     listen 80;
  4.     server_name site1.example.com;
  5.    
  6.     location / {
  7.         proxy_pass [url]http://127.0.0.1:8081;[/url]
  8.         proxy_set_header Host $host;
  9.     }
  10. }

  11. # 网站2
  12. server {
  13.     listen 80;
  14.     server_name site2.example.com;
  15.    
  16.     location / {
  17.         proxy_pass [url]http://127.0.0.1:8082;[/url]
  18.         proxy_set_header Host $host;
  19.     }
  20. }
复制代码


3.2 路径转发

  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.    
  5.     # /api 路径转发到后端服务
  6.     location /api/ {
  7.         proxy_pass [url]http://127.0.0.1:8080/;[/url]
  8.         proxy_set_header Host $host;
  9.     }
  10.    
  11.     # 静态文件由 Nginx 直接处理
  12.     location /static/ {
  13.         alias /var/www/static/;
  14.         expires 30d;
  15.     }
  16.    
  17.     # 其他路径转发到前端服务
  18.     location / {
  19.         proxy_pass [url]http://127.0.0.1:3000;[/url]
  20.         proxy_set_header Host $host;
  21.     }
  22. }
复制代码





四、负载均衡配置

4.1 轮询模式(默认)

  1. upstream backend {
  2.     server 192.168.1.10:8080;
  3.     server 192.168.1.11:8080;
  4.     server 192.168.1.12:8080;
  5. }

  6. server {
  7.     listen 80;
  8.     server_name example.com;
  9.    
  10.     location / {
  11.         proxy_pass http://backend;
  12.         proxy_set_header Host $host;
  13.     }
  14. }
复制代码


4.2 权重模式

  1. upstream backend {
  2.     server 192.168.1.10:8080 weight=3;
  3.     server 192.168.1.11:8080 weight=2;
  4.     server 192.168.1.12:8080 weight=1;
  5. }
复制代码


4.3 IP 哈希模式

  1. upstream backend {
  2.     ip_hash;
  3.     server 192.168.1.10:8080;
  4.     server 192.168.1.11:8080;
  5. }
复制代码





五、WebSocket 反向代理

  1. location /ws/ {
  2.     proxy_pass http://backend;
  3.     proxy_http_version 1.1;
  4.     proxy_set_header Upgrade $http_upgrade;
  5.     proxy_set_header Connection "upgrade";
  6.     proxy_set_header Host $host;
  7.     proxy_read_timeout 86400;
  8. }
复制代码





六、常见问题与解决方案

6.1 502 Bad Gateway
  • 检查后端服务是否正常运行
  • 检查 proxy_pass 地址是否正确
  • 查看 Nginx 错误日志


6.2 504 Gateway Timeout
  • 增加 proxy_read_timeout 时间
  • 优化后端服务响应速度


6.3 获取真实客户端 IP

确保配置了:
  1. proxy_set_header X-Real-IP $remote_addr;
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
复制代码


6.4 重定向问题

如果后端返回 301/302 重定向,地址变成内网地址:
  1. proxy_redirect off;
  2. # 或者手动重写
  3. proxy_redirect http://internal/ http://$host/;
复制代码





七、配置检查与重载

  1. # 检查配置文件语法
  2. nginx -t

  3. # 平滑重载配置
  4. nginx -s reload

  5. # 查看 Nginx 版本
  6. nginx -v
复制代码





总结: Nginx 反向代理是非常强大且常用的功能,掌握好配置方法可以大大提升网站的性能和安全性。建议在生产环境中配合 HTTPS、缓存、限流等功能一起使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|资源侠论坛

GMT+8, 2026-9-12 20:14 , Processed in 0.021692 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表