
У меня есть базовый прокси-сервер nginx, работающий на http://127.0.0.1:8080
.
Это nginx.conf
:
events {}
http {
server {
listen 8080;
server_name 127.0.0.1;
rewrite_log on;
error_log /var/log/nginx/error.log notice;
location / {
proxy_pass http://127.0.0.1:5200;
proxy_set_header Host 127.0.0.1:5200;
}
location /api {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host 127.0.0.1:8000;
}
location = /app2 {
return 302 /app2/;
}
location /app2/ {
proxy_pass http://127.0.0.1:5300/;
proxy_set_header Host 127.0.0.1:5300;
}
}
}
При нажатии отображается http://127.0.0.1:8080/app2
приложение, работающее на порту, 5300
но ресурсы загружаются неправильно. Я подозревал, что nginx проксирует запрос ресурсов другому приложению, работающему на порту 5200
, который является location /
. Я остановил это приложение, чтобы подтвердить, и это журнал от nginx (обратите внимание, что upstream отображается как , http://127.0.0.1:5200...
но он должен быть http://127.0.0.1:5300...
)
2023/09/17 23:47:32 [error] 29#29: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /assets/css/fonts/Pe-Icon-Stroke/Pe-icon-7-stroke..ttf?d7yf1v HTTP/1.1", upstream: "http://127.0.0.1:5200/assets/css/fonts/Pe-Icon-Stroke/Pe-icon-7-stroke..ttf?d7yf1v", host: "127.0.0.1:8080", referrer: "http://127.0.0.1:8080/app2/"
127.0.0.1 - - [17/Sep/2023:23:47:32 +0000] "GET /assets/css/fonts/Pe-Icon-Stroke/Pe-icon-7-stroke..ttf?d7yf1v HTTP/1.1" 502 559 "http://127.0.0.1:8080/app2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
2023/09/17 23:47:32 [error] 29#29: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /assets/css/fonts/Font-Awesome/fontawesome-webfont..ttf?v=4.7.0 HTTP/1.1", upstream: "http://127.0.0.1:5200/assets/css/fonts/Font-Awesome/fontawesome-webfont..ttf?v=4.7.0", host: "127.0.0.1:8080", referrer: "http://127.0.0.1:8080/app2/"
127.0.0.1 - - [17/Sep/2023:23:47:32 +0000] "GET /assets/css/fonts/Font-Awesome/fontawesome-webfont..ttf?v=4.7.0 HTTP/1.1" 502 559 "http://127.0.0.1:8080/app2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
Я вижу похожую проблему для http://127.0.0.1:8080/api
, assets not loaded. Я также пробовал переписывать правила с помощью комбинаций diff regex, но получил похожие ошибки.
Как настроить nginx для маршрутизации к разным приложениям и правильной загрузки их ресурсов.
решение1
После дальнейших исследований и испытаний было найдено rewrite
решение, подробно описанное вhttps://stackoverflow.com/questions/62836801/nginx-reverse-proxy-how-to-serve-multiple-appsв моем случае сработало.
Это фрагмент, который я добавил в свой nginx.conf для правильной загрузки ресурсов app2
if ($http_referer ~ https?://[^/]+/app2/(.*))
{
# rewrite request URI only if it isn't already started with '/app2' prefix
rewrite ^((?!/app2).*) /app2$1;
}