文章总结: 该文档详细阐述了如何在Ubuntu环境下搭建Nginx反向代理服务器以增强企业内网安全。通过隐藏后端真实IP,结合防火墙端口映射与DNS解析,实现了对外安全发布内网服务。内容涵盖环境准备、Nginx安装与核心配置、防火墙策略设置及域名解析等步骤,并针对非标准端口访问导致的跳转异常提供了基于proxy_redirect指令的解决方案,具备较高的实操指导价值。 综合评分: 87 文章分类: 安全建设,解决方案,安全工具,实战经验
搭建Nginx反向代理服务器
原创
simple安全团队 simple安全团队
simple安全团队
2026年2月27日 12:05 湖北
概述
企业内网有各式各样的服务器,经常需要开放端口到互联网提供服务,若直接通过出口防火墙进行端口转发,将服务器开放到互联网,是非常不安全的。
若使用Nginx作为反向代理服务器,则可以隐藏后端服务器的真实IP地址和端口,可以增强内网的安全性。
前置条件
1、一台已安装Ubuntu系统(建议20.04 LTS或更新版本)的服务器,该机器需能访问内网服务器
2、拥有该Ubuntu服务器的管理员权限(sudo)
3、拥有一个域名,可在阿里云或腾讯云进行购买,例如:simple.com
4、拥有一台出口防火墙
5、公司网络出口固定的公网IP,例如:118.118.118.118
方案总览
Nginx服务器(172.16.6.8)作为统一的安全入口和反向代理,部署在内网WAF之后(如果有WAF的话)。Nginx服务器的443端口通过出口防火墙端口映射为4443,80端口映射为8880。这里仅演示HTTP的情形。
互联网用户的访问请求将遵循以下路径:
1、用户发起请求:http://oa.simple.com:8880
2、DNS解析:域名oa.simple.com通过DNS解析到出口防火墙的公网IP:118.118.118.118
3、防火墙端口转发:出口防火墙配置地址转换策略,将到达公网IP:118.118.118.118:8880的流量,转发至内网Nginx服务器:172.16.6.8:80端口。
4、Nginx反向代理:Nginx服务器接收到请求后,根据HTTP请求头中的Host字段(即域名),将请求代理转发至对应的后端应用服务器:
1)oa.simple.com的请求转发至oa服务器:http://172.16.6.9:8080
2)ehr.simple.com的请求转发至ehr服务器:http://172.16.6.10:18080
5、响应返回:后端服务器处理请求后,生成的响应沿原路径返回给互联网用户。
拓扑图如下:
详细操作步骤
步骤一:在Ubuntu系统上安装Nginx
1、执行如下命令安装Nginx
sudo apt updatesudo apt install nginx -y
2、启动Nginx服务并设置开机自启
sudo systemctl start nginxsudo systemctl enable nginx
3、验证Nginx是否正常运行
sudo systemctl status nginx
4、配置系统防火墙,允许HTTP(80)和HTTPS(443)流量
sudo ufw allow ‘Nginx HTTP’sudo ufw allow ‘Nginx HTTPS’sudo ufw reload
5、安装完成后,可以在内网通过http://172.16.6.8 访问Nginx默认欢迎页面,以确认服务正常。
步骤二:编写Nginx反向代理核心配置文件
最佳实践是在/etc/nginx/sites-available/目录下创建配置文件,然后软链接到 /etc/nginx/sites-enabled/
1、创建并编辑配置文件
sudo vim /etc/nginx/sites-available/simple_com_proxy.conf
2、输入以下配置内容
注意:这个配置文件只需要server{}块,不需要http{},因为这个文件会被nginx.conf配置文件所调用。
server { listen 80; # 监听HTTP 80端口,如需HTTPS需配置443端口和SSL证书 server_name oa.simple.com; # 指定匹配的域名
location / { # 将请求转发至内网OA服务器的IP和端口 proxy_pass http://172.16.6.9:8080; # 请替换为OA服务器的真实内网IP和端口
# 以下头部信息至关重要,确保后端服务器能获取原始客户端信息 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 $scheme;
proxy_redirect http://oa.simple.com/ http://oa.simple.com:8880/;
# 可选的超时与性能优化配置 proxy_connect_timeout 60s; proxy_read_timeout 120s; proxy_send_timeout 120s; }}
ehr以及其他服务器同理,只需在这个配置文件中增加server{}块即可。
3、创建符号链接以启用站点
sudo ln -s /etc/nginx/sites-available/simple_com_proxy.conf /etc/nginx/sites-enabled/
4、测试配置文件语法是否正确
sudo nginx -t
5、重载nginx配置,使更改生效
sudo systemctl reload nginx
步骤三:配置出口防火墙进行端口转发
1、将到达公网IP:118.118.118.118:8880的流量,转发至内网Nginx服务器:172.16.6.8:80端口
步骤四:配置域名解析
1、登录自己购买的域名的控制台,新增DNS解析A记录
步骤五:测试与验证
1、直接浏览器访问:http://oa.simple.com:8880,能正常显示OA的登录页面或首页
2、查看nginx的访问成功日志/var/log/nginx/access.log,能看到记录
3、可能出现的问题
通过非标准端口(8880)访问Nginx反向代理服务时,页面跳转过程中端口号丢失,导致访问失败。
比如这里我们访问http://oa.simple.com:8880,如果没有正确配置,就会跳转到:http://oa.simple.com/seeyon/index.jsp,由于缺失了端口号,导致访问失败。
4、解决方案
使用proxy_redirect指令修正重定向
proxy_redirect http://oa.simple.com/ http://oa.simple.com:8880/;
将不带端口号的url修正为带端口号的url
END
查看更多精彩内容,关注simple安全团队
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:simple安全团队 simple安全团队 simple安全团队《搭建Nginx反向代理服务器》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论