使用Nginx反向代理服务器端口至二级域名

要将 Nginx 配置为反向代理到另一个端口,需要进行以下步骤:

一、安装 Nginx

如果还没有安装 Nginx,可以使用以下命令在 Ubuntu 上进行安装:

1
2
复制代码sudo apt update
sudo apt install nginx

二、配置 Nginx 反向代理

2.1 不使用 HTTPS

  • 例如需要反代我们服务器的8080端口且不适用HTTPS,可以进行以下操作。
  • 在 Nginx 的配置文件(一般为Nginx安装目录下的 nginx.conf )中添加以下内容,将 HTTP 请求代理到服务器的 8080 端口。需要将 example.com 替换为域名或 IP 地址,/ 后面的路径应该是需要代理的应用程序的路径。
1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name example.com; //需要更改为你的域名

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

2.2 使用 HTTPS

  • 使用HTTPS的情况下,需要先在服务器上安装SSL证书,可以通过Let’s Encrypt等服务获取免费的SSL证书。然后,可以按照以下步骤进行反向代理:
  • 编辑Nginx配置文件nginx.conf,添加以下内容:
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
server {
listen 443 ssl;
server_name your_domain_name.com; #需要更改

ssl_certificate /path/to/your/cert.pem; #需要更改
ssl_certificate_key /path/to/your/key.key; #需要更改

location / {
proxy_pass http://my_app; #需要更改
}
}

# 或者以下命令
server
{
listen 80;
listen 443;
server_name your_domain_name.com; #需要更改
ssl on;
ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/key.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
if ($host ~* ^\d+\.\d+\.\d+\.\d+$) {
return 444; # 如果请求的是 IP 地址 返回空响应包,禁止访问
}
location / {
client_max_body_size 500M;

#proxy_redirect off;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
}
}

  • 其中,your_server_port是你的服务器应用端口号,your_domain_name.com是你的域名,/path/to/your/cert.pem/path/to/your/key.key分别是你的SSL证书和私钥文件的路径。该配置将来自NGINX监听的80端口的请求,重定向到443端口,并使用SSL证书对HTTPS请求进行加密。

三、重新加载 Nginx 配置

  • 执行以下命令以重新加载 Nginx 配置:
1
2
3
sudo nginx -t && sudo service nginx reload
// 或者执行以下命令重启 nginx
sudo systemctl restart nginx
  • 现在,Nginx 将代理到服务器的 8080 端口。在浏览器中反代过的域名或 IP 地址,应该就能够访问应用程序了。