Nginx反向代理
配置步骤
-
确保内网服务可访问
在Nginx服务器上测试内网服务是否可达(如curl http://内网IP:端口
)。 -
修改Nginx配置文件
编辑Nginx配置文件(通常位于/etc/nginx/nginx.conf
或/etc/nginx/conf.d/
目录下)。 -
添加反向代理配置
示例配置(将公网IP的80端口代理到内网服务192.168.1.100:8080
):server {listen 80; # 监听公网IP的80端口(HTTP)server_name your-public-ip.com; # 替换为公网IP或域名location / {proxy_pass http://192.168.1.100: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;} }
-
保存并测试配置
sudo nginx -t # 检查配置语法 sudo systemctl reload nginx # 重启Nginx生效
关键参数说明
配置项 | 作用 |
---|---|
listen 80; | 监听公网IP的80端口(HTTP),如需HTTPS改用 listen 443 ssl; |
server_name | 填写公网IP或域名(若无私用域名可直接用 _ 或省略) |
proxy_pass | 核心参数:指向内网服务的地址(格式:http://内网IP:端口 ) |
proxy_set_header | 传递客户端真实IP和Host信息,避免内网服务丢失来源信息 |
高级场景配置
1. 通过域名区分多个内网服务
server {listen 80;server_name service1.your-domain.com; # 域名1location / {proxy_pass http://192.168.1.101:8000;} }server {listen 80;server_name service2.your-domain.com; # 域名2location / {proxy_pass http://192.168.1.102:9000;} }
2. 启用HTTPS加密
server {listen 443 ssl;server_name your-domain.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/privkey.pem;location / {proxy_pass http://192.168.1.100:8080;proxy_set_header Host $host;proxy_set_header X-Forwarded-Proto $scheme; # 告诉内网服务是HTTPS} }
3. 路径转发(非根路径)
location /api/ {proxy_pass http://192.168.1.100:3000/; # 注意结尾的斜杠(/)会移除/api前缀 }
网络与安全设置
-
防火墙开放端口
sudo ufw allow 80/tcp # 开放HTTP端口 sudo ufw allow 443/tcp # 开放HTTPS端口
-
路由器端口转发(如果Nginx不在公网)
将公网IP的端口(如80)转发到运行Nginx的内网服务器IP和端口。 -
安全建议
-
使用HTTPS加密流量(免费证书可通过Let's Encrypt获取)。
-
限制访问IP:Nginx配置中通过
allow/deny
控制来源IP。 -
内网服务本身配置防火墙,仅允许Nginx服务器访问。
-
验证访问
通过公网地址测试访问:
curl http://公网IP # 或浏览器访问
若返回内网服务的响应内容,则配置成功。
💡 提示:若遇到502错误,检查内网服务是否运行、Nginx能否访问内网IP、内网防火墙是否放行Nginx服务器的IP。