Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从作为nodejs服务器反向代理的nginx服务器提供静态文件?_Node.js_Nginx - Fatal编程技术网

Node.js 如何从作为nodejs服务器反向代理的nginx服务器提供静态文件?

Node.js 如何从作为nodejs服务器反向代理的nginx服务器提供静态文件?,node.js,nginx,Node.js,Nginx,我当前的nginx配置如下: upstream nodejs { server 127.0.0.1:3000; } server { listen 8080; server_name localhost; root ~/workspace/test/app; index index.html; location / { proxy_pass http://nodejs; proxy_set_header Host

我当前的nginx配置如下:

upstream nodejs {
    server 127.0.0.1:3000;
}

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

    location / {
        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;
    }
}

我对nginx非常陌生,但至少我知道nginx在提供静态文件方面比node/express好。如何配置服务器,使nginx为静态文件提供服务?

您可能需要在
服务器中为静态文件配置另一个
位置

location /static {
  alias /path/to/static/files;
}
这使用了。 然后您可以点击
localhost:8080/static/some_file.css上的文件

另外,您不需要当前设置的
根目录
索引。

root
alias
有点类似)

我使用这个新配置解决了这个问题:

upstream nodejs {
    server localhost:3000;
}

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

    location / {
        try_files $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;
    }
}
由于以下堆栈溢出帖子:



如果你要如此屈尊,你至少可以把它链接起来,然后我将删除我的问题。我已经找过了,但找不到它。
try_files$uri/$uri@nodejs
应该是
try_files$uri$uri/@nodejs
此配置意味着nginx首先尝试提供静态文件,如果找不到,则会重定向到nodejs服务器?@HS是的,这正是它的意思。@garkin同意,但我想知道如何在没有明确的
/public/
文件夹的情况下执行此操作。我了解到,一个文件几乎可以从任何指向文件的路径获得服务,这可能是可利用的。这是在根url上执行的错误403。修复:更改为
try_files$uri@nodejs
这样nginx只会尝试提供文件,而不是目录。我想要的是,即使
static
不在URI中,也能提供/static以外的内容…@dscan然后您可以将位置块设置为
location/{
并将别名设置为指向您的静态文件,但是
位置/
会严重干扰
try{}
块和到应用程序服务器本身的路由?是否按从上到下的顺序测试请求路径?因为应用程序服务器将接受任何内容,如果应用程序内部没有路由,则404。