Назад | Перейти на главную страницу

Ошибка 403; не будет прокси: NginX и Node.js

В настоящее время у меня есть установка, в которой все статические файлы обслуживаются NginX, и если статический файл не найден, он перемещается на сервер node.js. К сожалению, я получаю ошибку 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 работает. Но что я действительно хочу сделать, так это сделать так, чтобы он смотрел на сервер узлов в поисках местоположения индекса, продолжая обслуживать мои статические файлы, не глядя на узел.

NB. Если я помещаю настройки прокси в / location, сервер узла отлично обслуживает корень (хорошо, без статических файлов, но он отлично выполняет свою часть).

В вашей директиве try_files есть косая черта, поэтому nginx будет пытаться обслуживать каталог при переходе к голому корню example.org/.

Вместо того:

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

использование:

location / {
    try_files $uri @proxy;
}

Во-первых, извините за мой плохой английский, я думаю, что понимаю вашу проблему, и вам нужно подумать примерно так:

Определите свой статический контекст:

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

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

А затем сделайте прокси-сервер на свой js-сервер node

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 {

Или что-то вроде того.