麻烦使用nginx的Node.js的文件反向代理

问题描述:

我已成立了一个nginx的反向代理基本上节点使用this设立转载如下:麻烦使用nginx的Node.js的文件反向代理

upstream nodejs { 
    server localhost:3000; 
} 

server { 
    listen 8080; 
    server_name localhost; 
    root ~/workspace/test/app; 

    location/{ 
     try_files $uri $uri/ @nodejs; 
    } 

    location @nodejs { 
     proxy_redirect off; 
     proxy_http_version 1.1; 
     proxy_pass http://nodejs; 
     proxy_set_header Host $host ; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

现在我所有的AJAX POST请求旅行只是罚款这个设置的节点,但是我之后在轮询文件,当我向节点服务器发送一个客户端AJAX GET请求(通过这个nginx代理)时,我找不到这些文件。

例如,对于客户方的javascript要求如.get('Users/myfile.txt')浏览器会查找文件上localhost:8080但不会找到它,因为它的实际写入localhost:3000

http://localhost:8080/Users/myfile.txt // what the browser searches for 
http://localhost:3000/Users/myfile.txt // where the file really is 

如何设置了代理浏览到这个文件?

+0

它看起来像Node.js路由到8080.你可以显示相关的配置? –

+0

我正在使用节点并表达。我能想到的唯一配置文件就是我发布的nginx。一种情况是我有'app.post('/ data')'来处理节点服务器代码中的数据,但没有'app.get()'。该文件是由一个单独的引擎写入。我是否需要在节点中明确设置'app.get()'才能识别代理?或者是nginx.conf中的罪魁祸首? – o1sound

+1

对不起,我看错了。这是路由到8080,因为这是你的NGINX配置监听。无论如何,如果NGINX在'try_files'指令失败,它将代理这个端口到3000端口,所以它仍然应该找到这个文件。你在日志文件中收到404吗? –

好吧,我明白了。上面张贴的nginx.conf文件中的设置就好了。这个问题从来不是一个nginx问题。问题出在节点服务器上我的index.js文件中。

当我nginx的服务所有静态文件,我注释掉以下行从index.js

app.use(express.static('Users')); // please don't comment this out thank you 

我花了一段时间来我的方式解决回到这个,因为我是蛮缠起来了解nginx。我当时的想法是,如果nginx正在提供静态文件,为什么我需要快递服务他们?但是,如果没有这一行,express显然不会提供任何文件。

现在,通过正确的快速提供静态文件,nginx处理来自Web应用程序的所有静态文件,节点处理来自后端的所有文件,并且都很好。

感谢Keenan Lawrence的指导和AR7的配置!