Назад | Перейти на главную страницу

Nginx с поддержкой SSL добавляет доменное имя перед URL-адресом запроса

В докеризованном Nginx есть приложение Angular. Nginx настроен для режима https с помощью доверенного сертификата SSL.
Конфигурация Nginx выглядит так:

worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  trace  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    gzip on;
    gzip_disable "msie6";

    gzip_comp_level 6;
    gzip_min_length 1100;
    gzip_buffers 16 8k;
    gzip_proxied any;
    gzip_types
      text/plain
      text/css
      text/js
      text/xml
      text/javascript
      application/javascript
      application/x-javascript
      application/json
      application/xml
      application/rss+xml
      image/svg+xml;

    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    server {
        server_name          www.example.com;
        ssl_certificate     /etc/ssl/example.crt;
        ssl_certificate_key /etc/ssl/example.key;
        listen               *:80;
        listen               *:443 ssl spdy;
        listen               [::]:80 ipv6only=on;
        listen               [::]:443 ssl spdy ipv6only=on;

        return 301 https://example.com$request_uri;
    }

    server {
        server_name          example.com;
        listen               *:80;
        listen               [::]:80;

        return 301 https://example.com$request_uri;
    }

    server {
        server_name         example.com;
        listen              *:443 ssl spdy;
        listen               [::]:443 ssl spdy;
        ssl_certificate     /etc/ssl/example.crt;
        ssl_certificate_key /etc/ssl/example.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        keepalive_timeout   70;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
    }
}

Когда приложение Angular отправляет запрос на отдых на бэкэнд, например POST https: // пользовательская служба / api / update / testuser, Я вижу в инструментах разработчика следующий URL-адрес запроса: POST https://example.com/user-service/api/update/testuser и получите в ответ HTTP-код 405.
Такая проблема не наблюдается, если Nginx настроен только для режима HTTP, а URL-адрес запроса в инструментах разработчика такой же, как определено в приложении Angular, например. ПОЧТА http: // пользовательская служба / api / update / testuser.
Возможно, такое поведение как-то связано с политикой безопасности, но я не нашел никаких настроек и пояснений в документации Nginx.

Дополнительная информация:
В одной внутренней сети докеров есть несколько dockerized сервисов, среди которых уже упомянутый Nginx с приложением Angular. И только для Nginx есть открытый порт (отображение портов). Все остальные сервисы должны быть закрыты от внешнего мира, поэтому варианты проксирования запросов не рассматриваются.