如何配置GitLab端口转发实现443访问且不冲突Mattermost服务
可行解决方案步骤
第一步:修改GitLab配置,释放80、443端口
编辑/etc/gitlab/gitlab.rb文件,调整以下配置项,让GitLab内置Nginx仅监听本地回环地址的非公用端口:
# 把external_url改成不带端口的GitLab专属HTTPS域名 external_url 'https://gitlab.example.pl' # 配置内置Nginx仅监听本地127.0.0.1的8081端口,不对外暴露 nginx['listen_addresses'] = ['127.0.0.1'] nginx['listen_port'] = 8081 nginx['listen_https'] = false nginx['redirect_http_to_https'] = false # 关闭GitLab自带的证书签发功能,证书统一交给外层反向代理管理 letsencrypt['enable'] = false
修改完成后执行生效命令:
gitlab-ctl reconfigure
执行完成后可通过ss -tulnp | grep 8081确认GitLab内置Nginx已在本地8081端口监听,且80、443端口未被GitLab占用。
第二步:部署独立Nginx作为全局反向代理
安装系统自带的Nginx后,分别创建GitLab和Mattermost的站点配置,通过不同域名区分两个服务的请求:
GitLab站点配置(示例路径/etc/nginx/sites-available/gitlab)
server { listen 443 ssl; server_name gitlab.example.pl; # 替换为你自己的SSL证书路径 ssl_certificate /path/to/gitlab_ssl.crt; ssl_certificate_key /path/to/gitlab_ssl.key; # 核心配置:仅允许指定网段访问GitLab allow 192.169.0.1/24; deny all; location / { proxy_pass http://127.0.0.1:8081; 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 https; } } # HTTP跳转HTTPS配置 server { listen 80; server_name gitlab.example.pl; return 301 https://$host$request_uri; }
Mattermost站点配置(示例路径/etc/nginx/sites-available/mattermost)
server { listen 443 ssl; server_name mattermost.example.pl; # 替换为你实际的Mattermost访问域名 # 替换为你自己的SSL证书路径 ssl_certificate /path/to/mattermost_ssl.crt; ssl_certificate_key /path/to/mattermost_ssl.key; # 无访问限制,允许所有IP访问 location / { # 替换为你Mattermost实际监听的本地地址和端口 proxy_pass http://127.0.0.1:8065; 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 https; } } server { listen 80; server_name mattermost.example.pl; return 301 https://$host$request_uri; }
第三步:调整UFW规则并重启服务
# 可选:删除不再需要的2000端口放行规则 ufw delete allow 2000 # 开放80、443端口给所有IP,满足Mattermost的公网访问需求 ufw allow 80/tcp ufw allow 443/tcp
启用站点配置并重启Nginx:
ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/ nginx -t # 校验配置语法是否正确 systemctl restart nginx
效果验证
- 192.169.0.1/24网段内的用户直接访问
https://gitlab.example.pl即可正常使用GitLab,无需输入端口 - 非指定网段用户访问GitLab域名会返回403禁止访问
- 所有IP均可正常访问Mattermost服务,不受IP限制影响
内容的提问来源于stack exchange,提问作者tomasz0124k
相关产品推荐
相关产品推荐

