使用 NGINX 配置反向代理:详细步骤与多域名应用实践

在日常 Web 服务部署中,Nginx 是最常用的反向代理服务器之一。它不仅能将请求转发至后端服务,还支持 HTTPS 加密、多域名支持、头部处理等功能。本文将介绍如何:

  • 使用 NGINX 手动配置反向代理
  • 启用 HTTPS 访问
  • 通过不同域名代理至不同服务(多站点配置)
  • 使用图形化工具(Nginx Proxy Manager)简化配置过程

一、准备工作

安装 NGINX:

1
sudo apt update && sudo apt install nginx

获取 SSL 证书(可使用 Let’s Encrypt 或自签证书)并放入:

1
2
/etc/nginx/cert/cert.pem
/etc/nginx/cert/key.pem

确认目标服务运行在本地,例如:

  • Node.js 服务:127.0.0.1:3000
  • Flask 服务:127.0.0.1:5000
  • 面板服务:127.0.0.1:8080

二、配置单个服务的反向代理

1. 创建配置文件

1
2
cd /etc/nginx/sites-available
sudo vim myproxy.conf

2. 示例配置(反代至 127.0.0.1:8080)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443 ssl http2;
server_name sub1.example.com;

ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/key.pem;

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

三、配置多个域名代理至不同服务(多站点反代)

以下是多个 server 块分别代理至不同本地服务的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Node.js 服务(端口 3000)
server {
listen 443 ssl http2;
server_name node.example.com;

ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/key.pem;

location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

# Flask 服务(端口 5000)
server {
listen 443 ssl http2;
server_name flask.example.com;

ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/key.pem;

location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

# 面板服务(端口 8080)
server {
listen 443 ssl http2;
server_name panel.example.com;

ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/key.pem;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

warning 确保 DNS 已将这些子域名解析至你服务器的公网 IP。


四、启用配置并重启 NGINX

1. 启用配置文件

1
sudo ln -s /etc/nginx/sites-available/myproxy.conf /etc/nginx/sites-enabled/

2. 检查配置语法

1
sudo nginx -t

3. 重载 NGINX

1
sudo systemctl reload nginx

五、其他建议与补充

🔐 强制 HTTPS 重定向

若希望所有 HTTP 请求跳转到 HTTPS,可添加以下配置:

1
2
3
4
5
server {
listen 80;
server_name your_domain.com;
return 301 https://$host$request_uri;
}

🛡️ 防火墙放行端口

1
2
sudo ufw allow 443
sudo ufw allow 80

六、使用图形化工具简化反向代理配置

虽然使用 Nginx 手动配置反向代理很灵活,但对于新手或不想频繁手动修改配置文件的用户,推荐使用图形化管理工具:

✅ Nginx Proxy Manager(推荐)

  • Web 界面配置域名、SSL 证书、转发地址等
  • 支持 Let’s Encrypt 自动申请证书
  • 可以管理多个反向代理规则
  • 支持 Docker 部署

官网:https://nginxproxymanager.com

✅ 其他运维面板


七、小结

本文介绍了如何使用 NGINX 配置反向代理,内容涵盖:

  • 基础反向代理配置
  • HTTPS 证书接入
  • 多域名转发至多个服务
  • 图形化反代管理工具推荐

希望本文对你在部署多服务 Web 架构时有所帮助。如果需要一键部署脚本,欢迎留言获取。

1
2
3
4

---

如果你希望我再生成一份 `.md` 文件或自动上传到你的 Hexo 博客目录,我也可以帮你完成。需要吗?