Node.js 如何从作为nodejs服务器反向代理的nginx服务器提供静态文件?
我当前的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
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。