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

服务器通过IP加端口可正常访问,但域名加端口提示连接超时(已接入Cloudflare)

服务器通过IP加端口可正常访问,但域名加端口提示连接超时(已接入Cloudflare)

嘿,我来帮你捋捋这个问题的根儿在哪——Cloudflare默认只代理80(HTTP)和443(HTTPS)这俩标准端口,你用的3000属于非标准端口,Cloudflare不会自动帮你转发这个端口的请求。所以当你敲domain.com:3000访问时,请求到Cloudflare那一步就被卡住了,自然就报连接超时;而直接用IP加端口的话,请求是直接打你服务器上的,绕开了Cloudflare,所以就能正常访问啦。

给你几个实用的解决思路,你可以根据自己的情况选:

  • 换用Cloudflare支持的非标准端口
    Cloudflare其实也支持一些特定的非标准端口,比如8080、8443这些。如果你能调整Nginx的监听端口,把配置里的listen 3000 ssl;改成listen 8443 ssl;(或者其他Cloudflare支持的HTTPS非标准端口),重启Nginx之后,再用domain.com:8443应该就能正常访问了。

  • 用Cloudflare Tunnel映射服务
    这个方法更灵活,还不用在服务器上把3000端口暴露给公网。操作步骤大概是这样的:

    1. 登录Cloudflare后台,找到“Zero Trust”板块创建一个隧道
    2. 在你的服务器上安装Cloudflare Tunnel的客户端(cloudflared)
    3. 配置隧道规则,把你的域名(比如主域名或者子域名app.yourdomain.com)直接转发到localhost:3000
      这样你以后直接用域名访问就行,连端口都不用加,安全性也更高。
  • 把3000端口服务反向代理到443端口
    既然Cloudflare默认代理443端口,那咱们可以在Nginx里加一个监听443的server块,把请求反向代理到3000的上游服务。比如你可以在现有配置基础上再加一段:

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    include /data/snippets/ssl-setup.conf;

    access_log /data/logs/web-domain.access.log;
    error_log /data/logs/web-domain.error.log warn;

    location / {
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Host $http_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_read_timeout 900;
        proxy_pass http://web:3000;
    }
}

配置完重启Nginx,之后直接用https://yourdomain.com就能访问到原来3000端口的服务了,体验还更好。

对了,如果你非要坚持用3000端口的话,就算你在服务器防火墙和Cloudflare防火墙里都开放了3000端口,Cloudflare也不会帮你代理这个端口的请求,还是得用上面的方法解决哦。

备注:内容来源于stack exchange,提问作者J K

火山引擎 最新活动