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




