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

时间:2016-11-18 22:40:34

标签: ajax node.js nginx proxy

我已经为节点设置了一个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

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

1 个答案:

答案 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配置!