我已经运行了 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;
或者,如果您想向他们的浏览器发送重定向响应,以便他们的地址栏指向新位置,请交换last
(permanent
或者redirect
如果您更喜欢 302 而不是 301)。