You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动