Переадресация разными путями не работает - PullRequest
0 голосов
/ 30 июня 2019

У меня работает три экземпляра контейнера 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>

У кого-нибудь есть хорошая идея?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...