У меня есть сервер Nginx, на котором размещено веб-приложение, которое отлично работает при прямом доступе. Его конфигурация ниже
server {
listen 8000 default_server;
listen [::]:8000 default_server ipv6only=on;
root /data/www/ ;
server_name server1.com;
location / {
try_files $uri $uri/ =404;
}
location /app/ {
}
}
Теперь мне нужно обслуживать это приложение с другого сервера Nginx, поэтому я настраиваю обратный прокси, как показано ниже.
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /data/www/ ;
server_name server2.com;
location / {
try_files $uri $uri/ =404;
}
location /app/ {
proxy_pass http://server1.com:8000/app/;
}
Когда я открываю приложение с server2, я получаю такие ошибки, как показано ниже, например, когда я обращаюсь к http://server2.com/app/css/app.css (извините, нет репутации для размещения ссылок)
[ошибка] 6601 # 0: * 1 open () "/data/www/app/css/app.css" не выполнен (2: нет такого файла или каталога)
и никаких ошибок в журналах server1. Почему nginx ищет статические файлы на server2, когда я настроил его на обратный прокси-сервер на server1, такая же настройка отлично работает в apache с
ProxyPass / приложение / http: server1: 8000 / приложение /
ProxyPassReverse / приложение / http: server1: 8000 / приложение /
Что мне не хватает?
Проблема в том, что ваш второй экземпляр nginx пытается обслуживать файлы локально:
location / {
try_files $uri $uri/ =404;
}
Просто удалите все это, если хотите служить, используя http://server2.com/app/. Если вы хотите использовать http://server2.com/ вместо этого обновите конфигурацию, чтобы отразить это:
listen [::]:80 default_server ipv6only=on;
server_name server2.com;
location / {
proxy_pass http://server1.com:8000/app/;
}
Как правило, указывать путь к nginx не требуется!
Путь от локации добавляется автоматически
так это
location /app/ {
proxy_pass http://server1.com:8000/app/;
}
действительно должно быть:
location /app/ {
proxy_pass http://server1.com:8000;
}
Попробуйте указать более конкретное /app/
расположение в вашем прокси-сервере перед / над более общим /
location, поскольку nginx может обрабатывать правила местоположения не так, как вы предполагали.