如何配置Nginx与应用同端口监听实现带认证反向代理
问题答复
该需求完全可以实现。你之前修改监听端口后请求绕过Nginx的核心原因是端口冲突:原后端应用本身已经占用了公网网卡的5555端口,同一IP的同一个端口同一时间只能被一个进程绑定,Nginx修改配置后根本没有成功监听5555端口,请求自然直接打到后端应用上,绕过了认证逻辑。
实现步骤
- 第一步:调整后端应用监听配置
将原本监听所有网卡5555端口的后端应用,修改为仅监听本地回环地址的空闲端口(比如127.0.0.1:5556,端口可自定义选择未被占用的端口即可)。修改完成后重启后端应用,通过curl http://127.0.0.1:5556验证服务本地访问正常即可。注意:必须将后端服务绑定到127.0.0.1本地回环地址,不要绑定公网网卡,否则外部用户可以直接访问后端新端口绕过认证。
- 第二步:修改Nginx配置
将原配置文件调整为如下内容:
server { listen 5555; listen [::]:5555; server_name 123.123.123.123; location / { auth_basic "protected gateway area"; auth_basic_user_file /etc/apache2/.htpasswd; # 转发到修改端口后的本地后端服务 proxy_pass http://127.0.0.1:5556; # 可选:添加常用代理头,保证后端能获取到真实客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
- 第三步:验证配置并重载Nginx
执行nginx -t检查配置语法无报错后,执行nginx -s reload(或对应系统的服务重载命令如systemctl reload nginx)重载配置即可。
效果验证
此时访问服务器公网IP的5555端口,会先触发Nginx的基础认证校验,校验通过后请求才会被转发到后端应用;由于后端仅监听本地回环地址,不存在外部绕过认证直接访问后端的路径。
内容的提问来源于stack exchange,提问作者M. Akar
相关产品推荐
相关产品推荐

