nginx + nodejsconfiguration

我的当前nginxconfiguration有问题。 我想要做的是:

  • 对于没有任何path的请求,获取index.html(作品)
  • 直接获取现有文件(工作)
  • 如果请求的文件或path没有物理存在,则代理请求到节点(404)

我已经尝试了几个configuration在这里find的stackoverflow,但没有一个符合我的需要。

这是我目前的configuration:

# IP which nodejs is running on upstream app_x { server 127.0.0.1:3000; } # nginx server instance server { listen 80; server_name xxxx; #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; } } 

我想我知道你在做什么。 正确的方法是将try_files与命名的位置一起使用。

尝试以下配置:

 # IP which nodejs is running on upstream app_x { server 127.0.0.1:3000; } # nginx server instance server { listen 80; server_name xxxx; #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标头。

我想知道这个问题是在应用程序路径。 请从toontuts博客中找到以下代码片段,以便用nodejs完整配置nginx,您可能会发现此链接

 upstream subdomain.your_domain.com {  server 127.0.0.1:3000; } server {  listen 0.0.0.0:80;  server_name subdomain.your_domain.com;  access_log /var/log/nginx/subdomain.your_domain.access.log;  error_log /var/log/nginx/subdomain.your_domain.error.log debug;  location / {    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;    proxy_set_header Host $http_host;    proxy_set_header X-NginX-Proxy true;    proxy_pass http://subdomain.your_domain.com;    proxy_redirect off;  } }