403 错误;无法代理:NginX 和 Node.js

403 错误;无法代理:NginX 和 Node.js

我目前有一个设置,其中所有静态文件都由 NginX 提供,如果找不到静态文件,则将其移动到 node.js 服务器上。不幸的是,我收到 root 请求的 403 错误。其他一切都正常。

server {
    listen *:80;
    error_page 404 = /404.html;
    root /web/sites/this.site.tld/static;
    index home;

    location / {
        try_files $uri $uri/ @proxy;
    }

    location @proxy {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_X_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://thisSiteApp;
        proxy_redirect off;
    }
}

upstream thisSiteApp{
    server 127.0.0.1:3000;
}

我确信问题出在 index 指令上。将“index.html”文件放在静态中并将指令更改为“index index.html”即可。但我真正想要做的是让它在节点服务器上查找索引位置,同时仍然在不查看节点的情况下提供我的静态文件。

注意:如果我将代理设置放在 / 位置下,节点服务器就可以很好地为根提供服务(虽然没有静态文件,但它可以很好地完成其部分工作)。

答案1

您的 try_files 指令有一个正斜杠,因此 nginx 在直接转到 的裸根目录时将尝试为该目录提供服务example.org/

代替:

location / {
    try_files $uri $uri/ @proxy;
}

使用:

location / {
    try_files $uri @proxy;
}

答案2

首先对我的英语不好表示抱歉,我想我理解你的问题,你需要做一些这样的思考:

首先定义你的静态内容:

location ~ \.(jpg|png|etc)$ {

root  /web/sites/this.site.tld/static;
}

然后将代理传递到你的 node js 服务器

location / {
    proxy_pass http://127.0.0.1:3000;
  }

或者你的方法: location / { try_files $uri $uri/ @proxy; }

location @proxy {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_X_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://thisSiteApp;
    proxy_redirect off;
}

}

上游 thisSiteApp{

或类似的东西。

相关内容