У меня работает три экземпляра контейнера Nginx Docker. Первый - просто прокси, а два других служат приложениями Angular.
Он отлично работает только с одним местоположением / у меня уже несколько месяцев без проблем работает. По определенным причинам я должен добавить местоположение / foo, чтобы различать два Angular-приложения (встроенных в Nginx). Первый работает под: 8000, а второй работает под: 8100.
Конфигурация прокси с двумя местоположениями / и / foo выглядит следующим образом:
server {
listen 80;
server_name example.org;
return 301 https://$host$request_uri;
client_max_body_size 9000M;
}
server {
listen 443 ssl;
server_name example.ort;
location ^~ /foo {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://example.org:8100/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://example.org:8000;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
}
ssl_certificate /etc/ssl/certs/example.org.crt;
ssl_certificate_key /etc/ssl/private/example.org.key;
client_max_body_size 9000M;
}
Поскольку он по-прежнему работает без проблем для /, / foo не работает. / ссылки на: 8000 и / foo на: 8100. Оба имеют тот же конфиг Nginx. Конфигурация Nginx обоих приложений Angular выглядит следующим образом:
server {
listen 80 default_server;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.html;
}
location /assets/ {
root /usr/share/nginx/html;
autoindex off;
}
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://backend:8080/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_redirect off;
}
client_max_body_size 500M;
}
Я уже пытался переписать URL-адрес на
rewrite /foo/(.*) /$1 break;
так как я догадался, неправильный URL-адрес пропущен. Но это не решает проблему.
Просто чтобы ограничить причину ошибки, при вызове example.org:8000 или example.org:8100 она работает без проблем. Только / foo вызывает проблемы.
Важное замечание: Когда я вызываю example.org/foo, html-код говорит мне, что заголовок правильный, но веб-браузер показывает только пустую страницу (экземпляр, запущенный по адресу: 8100, кажется, быть достижимым). Но в консоли JavaScript появляется сообщение об ошибке:
ncaught SyntaxError: Неожиданный токен <</p>
У кого-нибудь есть хорошая идея?
Заранее спасибо!