Nginx配置求助:需屏蔽IP直连8080端口应用,仅允许域名访问
Nginx配置求助:需屏蔽IP直连8080端口应用,仅允许域名访问
兄弟,我来给你搞定这个问题!首先得搞清楚为啥现在IP:8080能直接访问——你的应用应该是监听了服务器的公网IP(或者0.0.0.0)的8080端口,所以外部请求绕开Nginx直接打到了应用上。要实现「只允许域名访问、屏蔽IP直连」的需求,有两种实用方案,你按需选:
方案一:让应用仅监听本地回环地址(最推荐,简单高效)
这是最直接的解决办法,只要把你的应用配置里的监听地址改成localhost:8080或者127.0.0.1:8080,而不是0.0.0.0:8080或者服务器的公网IP。
这么改了之后,应用就只能在服务器内部被访问,外部用户必须通过Nginx的80端口(也就是用desh.onecloudhelper.com域名访问)才能走代理到应用,直接打IP:8080会直接连接失败,完美达到你的要求。
方案二:用Nginx接管8080端口做访问控制(适合无法修改应用配置的场景)
如果你因为某些限制不能改应用的监听地址,那可以让Nginx也监听8080端口,通过判断请求的Host头来拦截非指定域名的访问,但注意这时候需要把应用改成监听localhost:8080,否则Nginx和应用会端口冲突。
修改你的Nginx配置,新增对应的server块:
# 保留你原来的80端口代理配置 server { listen 80; server_name desh.onecloudhelper.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; proxy_set_header X-Forwarded-Proto $scheme; } } # 新增8080端口的合法域名代理配置 server { listen 8080; server_name desh.onecloudhelper.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; proxy_set_header X-Forwarded-Proto $scheme; } } # 拦截所有其他访问8080端口的请求(比如IP直连、陌生域名) server { listen 8080 default_server; return 403; # 可以返回403禁止访问,也换成404或者自定义的提示页面 }
配置改完之后,记得重启Nginx让配置生效:
sudo nginx -s reload
这样一来,当用户用desh.onecloudhelper.com:8080访问时,Nginx会正常代理到应用;但如果直接用IP:8080或者其他域名访问8080端口,就会返回403禁止访问。
备注:内容来源于stack exchange,提问作者Desh Deepak Dhobi




