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

NGINX反向代理可通过IP访问但无法通过域名访问

NGINX反向代理可通过IP访问但无法通过域名访问

看起来你已经做了不少基础配置,但域名访问出现ERR_CONNECTION_REFUSED的问题,咱们可以从几个常见方向一步步排查:

1. 确认NGINX配置是否正确加载且生效

首先检查配置文件语法有没有错误,这是最容易忽略的点:

sudo nginx -t

如果输出显示test is successful,再重新加载NGINX配置让修改生效:

sudo systemctl reload nginx

另外要确认你的站点配置已经被启用——需要在sites-enabled目录下创建对应sites-available文件的软链接(替换成你实际的站点文件名):

sudo ln -s /etc/nginx/sites-available/your-site-file /etc/nginx/sites-enabled/

2. 排查DNS解析的实际生效情况

虽然ping域名返回了正确IP,但可能存在本地DNS缓存未更新的情况。可以用更精准的工具验证解析结果:

dig mywebsite.com
# 或者用nslookup
nslookup mywebsite.com

查看输出里的ANSWER SECTION是否明确指向你的服务器公网IP。同时可以尝试用其他网络(比如手机热点)访问域名,排除本地DNS缓存的影响。

3. 验证防火墙规则是否真的生效

你已经通过ufw开放了相关端口,可以临时关闭防火墙测试:

sudo ufw disable

如果此时域名能正常访问,说明ufw的规则可能存在隐性问题,重新启用后可以尝试重置并重新添加规则:

sudo ufw reset
sudo ufw allow 22/tcp
sudo ufw allow 'Nginx Full'
sudo ufw enable

4. 检查端口占用与服务状态

从你提供的netstat输出看,NGINX确实在监听80端口,Node.js应用也在3000端口正常监听,但可以再确认下80端口是否只有NGINX在使用:

sudo lsof -i :80

同时确认Node.js应用的运行状态,确保它没有异常:

pm2 status

5. 排除浏览器或本地缓存问题

试试用浏览器的无痕模式访问域名,或者更换其他浏览器测试。有时候浏览器缓存的旧连接信息会导致连接拒绝错误。

6. 尝试调整IPv6相关配置

如果你的服务器没有配置IPv6,或者域名的AAAA记录未正确设置,可以尝试注释掉NGINX配置中的IPv6监听行:

# listen [::]:80;

之后重载NGINX配置,再测试域名访问。


附你提供的配置与命令输出:

站点配置文件内容

server {
    listen   80 default_server;
    listen [::]:80;
    server_name mywebsite.com www.mywebsite.com <server_ip>;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://0.0.0.0:3000/;
        #proxy_redirect http://127.0.0.1:3000/ https://$server_name/;
    }
}

UFW状态输出

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
443                        ALLOW       Anywhere
22                         ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)

Netstat输出

sudo netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      21671/PM2 v5.3.0: G
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      18646/sshd: /usr/sb
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26697/nginx: master
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      18657/systemd-resol
tcp6       0      0 :::22                   :::*                    LISTEN      18646/sshd: /usr/sb
tcp6       0      0 :::80                   :::*                    LISTEN      26697/nginx: master

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

火山引擎 最新活动