我已经为节点设置了一个nginx反向代理,主要使用下面的this设置:
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代理),我找不到这些文件。
例如,对于像.get('Users/myfile.txt')
这样的客户端javascript请求,浏览器会在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 :(得分:1)
好的,我明白了。上面发布的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配置!