Nginx + node.js单页应用程序,发送/index.html并一起代理

Nginx + node.js单页应用程序,发送/index.html并一起代理

我已经运行了 Nginx,并且在端口 3000 上有 Node.js。

    location / {
        root   /path/to/my/site;
        index  index.html index.htm;
        try_files $uri $uri/ @node;
    }

    location @node {

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:3000;
        proxy_redirect off;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

    }

这可以完美运行,当 url 不是文件时,可以获取节点内容。(因此可以正常加载 socket.io/socket.io.js)。

现在我希望所有页面都重定向到根目录中的 index.html。因此,当用户刷新 //domain/with/extra/path; 时,我希望发送根目录 //domain/index.html。

我需要对此进行重写,但这会破坏我对节点文件的检查。所以我需要一些东西来仅将 GET /(url)/ 重定向到我的根目录 /index.html,而不是 GET 文件。

答案1

将其添加到您的location /应该会导致任何带有尾部斜杠的请求加载索引页:

rewrite ^/.*/$ / last;

或者,如果您想向他们的浏览器发送重定向响应,以便他们的地址栏指向新位置,请交换lastpermanent或者redirect如果您更喜欢 302 而不是 301)。

相关内容