Nginx 反向代理配置教程

Nginx 反向代理配置教程

Nginx 不仅可以作为静态网站服务器,还经常用来做反向代理。通过反向代理,可以把用户访问的域名请求转发到后端程序,例如 Node.js、Java、Python、Go、Docker 容器等服务。

本文介绍 Nginx 反向代理的基础配置方法。

一、什么是反向代理

简单理解:

用户访问域名 → Nginx 接收请求 → Nginx 转发给后端服务 → 后端返回结果 → Nginx 返回给用户

比如后端程序运行在:

127.0.0.1:3000

用户访问:

https://example.com

Nginx 可以把请求转发到本机的 3000 端口。

二、适用场景

反向代理常用于:

Node.js 网站部署
Java Spring Boot 项目部署
Python Flask / Django 项目部署
Docker 容器服务访问
前后端分离项目
API 网关
隐藏真实后端端口
统一配置 HTTPS

三、安装 Nginx

Ubuntu / Debian:

apt update
apt install nginx -y

CentOS / Rocky Linux:

yum install nginx -y

启动 Nginx:

systemctl enable nginx
systemctl start nginx

查看状态:

systemctl status nginx

四、准备后端服务

假设后端服务运行在:

127.0.0.1:3000

可以在服务器上测试:

curl http://127.0.0.1:3000

如果能返回内容,说明后端服务正常。

五、配置 Nginx 反向代理

新建配置文件:

vim /etc/nginx/conf.d/example.com.conf

写入:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

保存后检查配置:

nginx -t

如果显示 successful,重载 Nginx:

systemctl reload nginx

六、配置 HTTPS

可以使用 Certbot 申请免费 SSL 证书。

Ubuntu / Debian:

apt install certbot python3-certbot-nginx -y

申请证书:

certbot --nginx -d example.com -d www.example.com

按提示操作后,Certbot 会自动修改 Nginx 配置并启用 HTTPS。

七、WebSocket 反向代理配置

如果后端使用 WebSocket,需要增加:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

完整示例:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    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;
}

八、代理到 Docker 容器

如果 Docker 容器映射到宿主机端口,例如:

宿主机 8080 → 容器 80

Nginx 可以这样代理:

location / {
    proxy_pass http://127.0.0.1:8080;
    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;
}

九、常见错误

1. 502 Bad Gateway

常见原因:

后端服务没启动
后端端口写错
proxy_pass 地址错误
防火墙阻止本地端口
后端程序崩溃

可以先在服务器执行:

curl http://127.0.0.1:3000

如果本机都访问不了,Nginx 也代理不了。

2. 域名访问到默认页面

可能原因:

server_name 写错
配置文件没加载
Nginx 没有 reload
DNS 没解析到服务器

检查配置:

nginx -T | grep server_name

3. HTTPS 跳转异常

如果后端程序需要识别 HTTPS,要确保传递:

proxy_set_header X-Forwarded-Proto $scheme;

十、安全建议

后端服务尽量只监听 127.0.0.1
不要把后端端口直接暴露公网
配置 HTTPS
限制后台路径访问
设置合理的上传大小限制
定期检查 Nginx 日志

访问日志:

/var/log/nginx/access.log

错误日志:

/var/log/nginx/error.log

总结

Nginx 反向代理的核心配置是:

proxy_pass http://127.0.0.1:端口;

只要后端服务正常运行,Nginx 配置正确,并且域名解析到服务器,就可以通过域名访问后端应用。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容