我的当前Nginx配置有问题.我想要做的是:
>对于没有任何路径的请求,获取index.html(有效)
>直接获取现有文件(有效)
>如果请求的文件或路径实际上不存在,则向nodejs发送代理请求(404)
我在stackoverflow上尝试了几种配置,但它们都不符合我的需求.
这是我目前的配置:
# IP which nodejs is running on
upstream app_x {
server 127.0.0.1:3000;
}
# Nginx server instance
server {
listen 80;
server_name x.x.x.x;
#access_log /var/log/Nginx/x.log;
root /var/www/x/public;
location / {
root /var/www/x/public;
index index.html index.htm index.PHP;
}
location ^/(.*)${
if (-f $request_filename) {
break;
}
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3000;
}
}
最佳答案
我想我弄明白你要做什么.正确的方法是将
原文链接:https://www.f2er.com/nginx/434368.htmltry_files
与命名位置一起使用.
尝试使用以下配置:
# IP which nodejs is running on
upstream app_x {
server 127.0.0.1:3000;
}
# Nginx server instance
server {
listen 80;
server_name x.x.x.x;
#access_log /var/log/Nginx/x.log;
location / {
root /var/www/x/public;
index index.html index.htm index.PHP;
try_files $uri $uri/ @node;
}
location @node {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://app_x;
}
}
注意:如果定义了上游,则应在proxy_ pass中使用该上游.此外,在代理时,始终添加X-Forwarded-For
标头.