I have a problem with my current nginx configuration. What I am trying to do is:
- For requests without any path, get the index.html (works)
- Get existing files directly (works)
- If the requested file or path does not physically exist, proxy request to nodejs (404)
I have tried several configurations found here on stackoverflow, but none of them fit my needs.
Here is my current configuration:
# 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;
}
}
I was wondering that problem is in application path. Please find the following code excerpt from toontuts blog for full configuration of nginx with nodejs, you may find this link
I think I figured out what you were trying to do. The proper way is to use
try_files
together with a named location.Try with the following configuration:
Note: When you have an upstream defined you should use that in your
proxy_ pass
. Also, when proxying, always add theX-Forwarded-For
header.