Ajax 使用nginx反向代理从node.js获取文件时遇到问题

Ajax 使用nginx反向代理从node.js获取文件时遇到问题,ajax,node.js,nginx,proxy,Ajax,Node.js,Nginx,Proxy,我已经使用下面的设置为节点设置了nginx反向代理: upstream nodejs { server localhost:3000; } server { listen 8080; server_name localhost; root ~/workspace/test/app; location / { try_files $uri $uri/ @nodejs; } location @nodejs {

我已经使用下面的设置为节点设置了nginx反向代理:

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

如何设置代理以导航到此文件?

好的,我已经让它工作了。上面发布的
nginx.conf
文件中的设置很好。这个问题从来不是nginx的问题。问题出在节点服务器上的我的
index.js
文件中

当我让nginx为所有静态文件提供服务时,我注释掉了index.js中的以下行

app.use(express.static('Users')); // please don't comment this out thank you
我花了一段时间来解决问题,因为我已经完全理解了nginx。我当时的想法是,如果nginx提供静态文件,为什么我需要express来提供它们?但是,如果没有这一行,express显然不会提供任何文件

现在,通过express正确地提供静态文件,nginx处理来自web应用程序的所有静态文件,node处理来自后端的所有文件,一切正常


感谢您的指导和配置

看起来Node.js正在将其路由到8080。您能显示相关配置吗?我正在使用node和express。我能想到的唯一配置文件是我发布的nginx。一种情况是,我有
app.post('/data')
来处理节点服务器代码中的数据,但没有
app.get()
。该文件由单独的引擎编写。我是否需要在节点中明确设置
app.get()
,才能识别代理?或者罪魁祸首是nginx.conf?对不起,我读错了。它路由到8080,因为您的NGINX配置正在监听它。在任何情况下,如果NGINX在
try\u files
指令中失败,它将代理此端口到端口3000,因此它仍然可以找到该文件。您是否在日志文件中收到404?是,在日志文件中收到404。我正在为HEAD投票,我得到
。。。。“HEAD/Users/myfile.txt HTTP/1.1”404 0”http://localhost:8080/“…