В настоящее время у меня есть установка, в которой все статические файлы обслуживаются 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 {
Или что-то вроде того.