Node.js+Express多页面部署Nginx后子页面404问题解决
问题解决:Nginx转发Express路由时404的修复
问题出在你的Nginx配置里的try_files指令上。
这条指令会让Nginx优先在本地/var/www/html目录下查找请求对应的文件或目录,找不到就直接返回404,根本不会把请求转发给后台的Express服务。所以访问/page2时,Nginx找不到本地的page2文件,直接返回404,没把请求传给Express处理。
修改方案
修改Nginx的location /块,移除try_files指令,确保所有请求都转发到Express服务。同时建议添加一些proxy通用配置,避免潜在的请求头传递问题:
server { listen 80; listen [::]:80; server_name _; # 若无需Nginx直接处理静态文件,可删除root和index配置 # root /var/www/html; # index index.html; location / { proxy_pass http://localhost:5000; # 传递必要的请求头,让Express正确识别请求信息 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; } }
额外建议(静态资源处理)
如果后续需要让Nginx直接处理静态资源(如CSS、JS、图片),可以单独添加一个location块,让静态资源由Nginx直接返回,提升性能:
# 假设你的静态文件存放在 /home/pi/express-app/static 目录下 location /static/ { root /home/pi/express-app; expires 30d; # 设置缓存有效期,减少重复请求 }
此时Express中静态资源的路径就需要对应改成/static/xxx,Nginx会直接处理这类请求,其他请求仍转发给Express处理。
内容的提问来源于stack exchange,提问作者narwhal_tamer
相关产品推荐
相关产品推荐

