Nginx 用自定义端口反向代理网站服务


在一台服务器上用 Nginx 反向代理多个网站服务是一种常见实践,常见做法是利用服务器上不同的端口来代理不同的网站服务。

但对于一些带有页面重定向的网站服务而言,在页面重定向/页面跳转时会丢失端口信息(比如 Gitlab 登录页面的跳转),进而影响网站服务的正常使用。

问题描述

举个简单例子,比如以下的 URL 反向代理了一套 Gitlab 服务:https://gitlab.mydomain.com:8877

在浏览器地址栏输入以上 URL 后,随即被重定向到:https://gitlab.mydomain.com/users/sign_in

也就是跳转到 https 的默认端口 443,自然无法正常访问到原先在 8877 端口反向代理的 Gitlab 页面:

image-20240307011240614

如何解决

首先,定位到 Nginx 的配置文件,一般位于 /etc/nginx/nginx.conf

然后在配置文件中找到反向代理的配置段,一般是以 location / 标记的内容块。在 proxy_set_header Host 字段中添加 :$server_port 内容,即可在页面重定向时带上自定义端口信息。

image-20240307012548193

然后,重启 Nginx,即可顺利跳转到 Gitlab 的登录页面:

image-20240307012807022

OK.

发表评论