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://user-service/api/update/testuser, я вижу в инструментах разработки следующий URL-адрес запроса: POST https://example.com/user-service/api/update/testuser и получите HTTP-код 405 в ответе.
Такой проблемы не наблюдается, когда Nginx настроен только для режима HTTP и URL-адрес запроса в инструментах разработки такой же, как определено в приложении Angular, например, POST http://user-service/api/update/testuser.
Возможно, это поведение как-то связано с политикой безопасности, но я не нашел никаких настроек и объяснений в документации по Nginx.

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

0 ответов

Другие вопросы по тегам