如何解决Node.js+Nginx部署HTTPS时的404错误
嘿,作为经常帮人踩Node+Nginx部署坑的老鸟,我来给你梳理下可能的问题点!首先得先确认一个细节:你提到首页是https://ap.locals,登录页是https://ao.locals/login——这两个是不同的域名对吧?如果是这样,那第一个要排查的就是Nginx的配置:
1. Nginx是否为ao.locals配置了HTTPS Server块?
如果你的Nginx只配置了ap.locals的HTTPS规则,那访问ao.locals时,Nginx找不到对应的配置,会 fallback到默认的server块(如果有的话),而默认块里没有指向你的Node项目,自然就返回404了。
你可以打开Nginx的配置文件(通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下),看看有没有针对ao.locals的server配置。正确的HTTPS server块大概长这样:
server { listen 443 ssl; server_name ao.locals; # 替换成你的SSL证书路径 ssl_certificate /path/to/your/ao.locals.cert.pem; ssl_certificate_key /path/to/your/ao.locals.key.pem; location / { # 替换成你的Node项目运行的端口 proxy_pass http://localhost:3000; 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; } }
如果没有这个配置,就复制一份ap.locals的配置,把server_name改成ao.locals,确认证书路径正确,然后重启Nginx:sudo systemctl restart nginx。
2. 如果是域名笔误(比如应该是https://ap.locals/login),检查Nginx路由转发规则
如果登录页其实是同一个域名下的子路径,那问题大概率出在Nginx的location配置上。比如你可能误加了try_files规则,导致Nginx尝试去本地找静态文件,而不是转发给Node.js服务器:
❌ 错误配置示例:
location / { try_files $uri $uri/ =404; # 这个会让Nginx优先找本地文件,找不到直接返回404 }
✅ 正确配置应该把所有请求都转发给Node:
location / { proxy_pass http://localhost:3000; 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; }
另外,再确认下你的Node项目里确实有/login路由,而且HTTP环境下http://ap.locals/login能正常访问(你说HTTP下正常,这个应该没问题,但再测一遍更稳妥)。
3. 检查本地DNS解析是否正确
有时候ap.locals和ao.locals的本地解析可能不一致,比如一个指向你的DigitalOcean服务器IP,另一个指向了别的地方?你可以在本地终端运行ping ao.locals,看看返回的IP是不是你的服务器IP。如果不是,就得修改本地hosts文件:
- Windows:
C:\Windows\System32\drivers\etc\hosts - Mac/Linux:
/etc/hosts
添加一行:你的服务器IP ao.locals
4. 查看Nginx错误日志找线索
如果上面的方法都没解决,就去看Nginx的错误日志,里面会有更详细的404原因。日志路径通常是/var/log/nginx/error.log,运行:
sudo tail -f /var/log/nginx/error.log
然后访问https://ao.locals/login,看看日志里输出的错误信息,这能帮你精准定位问题。
内容的提问来源于stack exchange,提问作者suresh

