麻烦使用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
如何设置了代理浏览到这个文件?
答
好吧,我明白了。上面张贴的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的配置!
它看起来像Node.js路由到8080.你可以显示相关的配置? –
我正在使用节点并表达。我能想到的唯一配置文件就是我发布的nginx。一种情况是我有'app.post('/ data')'来处理节点服务器代码中的数据,但没有'app.get()'。该文件是由一个单独的引擎写入。我是否需要在节点中明确设置'app.get()'才能识别代理?或者是nginx.conf中的罪魁祸首? – o1sound
对不起,我看错了。这是路由到8080,因为这是你的NGINX配置监听。无论如何,如果NGINX在'try_files'指令失败,它将代理这个端口到3000端口,所以它仍然应该找到这个文件。你在日志文件中收到404吗? –