pm2托管的项目用nginx代理后刷新页面404?


我的项目时在服务器7000端口,nginx在888端口,这个问题我在网上查的全是说加上箭头这句话,但是加上这句话后端的请求就请求不到了一直404,奇怪的是把这句话去掉后端请求又正常了,但是刷新页面404,有大佬可以解答一下吗

阅读 2.5k
4 个回答

静态资源和api代理分开写:

#静态资源代理
    location / {
        root   /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
        index  index.html index.htm;
    }
#接口代理
    location /api {
       proxy_pass http://xxx;
       # ....
    }

自己没弄清楚,前端输入的路由地址在后端没有配,我原本以为这个nginx可以解决,这个是需要一个插件connect-history-api-fallback,他在服务端使用可以解决单页面文件路由问题

要知其然还要知其所以然,否则就是你现在这个状态。

这行命令的意思是,对于用户请求的 pathname,先尝试 $uri 也就是准确文件;如果没有就尝试 $uri/ 也就是文件夹;都没有就请求 /index.html,交给它处理。

对于单页应用来说,这样做是必要的,因为很多 pathname 并没有对应的物理文件。

但是对于反向代理来说,这个配置就会破坏整个应用了。你要做的,是在 7000 的服务器做好类似的配置。

 server {
      listen 8057;
      root  /home/web/;
      location / {
        index index.html;
        try_files $uri $uri/ /index.html;
        if ($uri ~* \.(html)$) {
          add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
        }
      }
      location /api/ {                                                 
        proxy_set_header Host $http_host;                 
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8080/;          
     }
    }

给你一个我的配置例子。看着你的配置好像没问题,你别再宝塔这个地方看,你直接去看nginx的配置文件,/etc/nginx/ 里面看看。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏