Nginx: перенаправление нескольких http-серверов на SSL: конфигурация не работает - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь поставить nginx вместе со следующей настройкой:

У меня на локальном хосте работают два http-сервера. Один прослушивает порт 8080, другой - порт 8081.

Оба должны быть обслужены через https и

  1. должен быть доступен рабочий сервер, прослушивающий 8080 на www.awesomesite.io.

  2. тестовый сервер, прослушивающий порт 8081, должен быть доступен через test.awesomesite.io.

Каким-то образом при переходе к test.awesomesite.io сервер nginx направляет меня на мой рабочий сервер.

Я использую следующую конфигурацию для направления www-запросов на localhost: 8080 и тест-запрос на 8081.

server {
    listen       80;
    server_name  www.awesomesite.io;
    rewrite ^ https://$host$request_uri? permanent;    # force redirect http to https
    server_tokens off;
}

# SSL port production server
server {
        listen [::]:443 ssl ipv6only=on; 
        listen 443 ssl; 
        ssl_certificate /etc/letsencrypt/live/www.awesomesite.io/fullchain.pem; 
        ssl_certificate_key /etc/letsencrypt/live/www.awesomesite.io/privkey.pem; 
        include /etc/letsencrypt/options-ssl-nginx.conf; 
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
    ssl on;

    server_name www.awesomesite.io;
    server_tokens off;
    # ......
    location / {
      proxy_pass         http://127.0.0.1:8080;
      proxy_set_header   Host $host;
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Host $server_name;
      proxy_set_header   X-Forwarded-Proto https;

      proxy_read_timeout  1200s;
    }

}

# SSL test server

server {
    listen       80;
    server_name  test.awesomesite.io;
    rewrite ^ https://$host:8443$request_uri? permanent;    # force redirect http to https
    server_tokens off;
}


server {
        listen [::]:8443 ssl ipv6only=on;
        listen 8443 ssl; 
        ssl_certificate /etc/letsencrypt/live/test.awesomesite.io/fullchain.pem; 
        ssl_certificate_key /etc/letsencrypt/live/test.awesomesite.io/privkey.pem; 
        include /etc/letsencrypt/options-ssl-nginx.conf; 
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
    ssl on;


    server_name test.awesomesite.io;
    server_tokens off;
    # ......
    location / {
      proxy_pass         http://127.0.0.1:8081;
      proxy_set_header   Host $host:8443;
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Host $server_name;
      proxy_set_header   X-Forwarded-Proto https;

      proxy_read_timeout  1200s;
    }

}

1 Ответ

0 голосов
/ 17 сентября 2018

Чтобы ответить на мой вопрос, если у кого-то возникла такая же проблема:

Я использовал ответ https://serverfault.com/questions/538803/nginx-reverse-ssl-proxy-with-multiple-subdomains, чтобы изменить свою конфигурацию.

Я определил несколько блоков серверов с именем www.awesomesite.io и test.awesomesite.io для порта 443 вместо того, чтобы переписывать тестовый поддомен для использования порта 8443.

После этих изменений хост из заголовка запроса test действительно соответствовал конкретному блоку сервера и был направлен на локальный хост 8081.

Я так и не понял, почему оригинальная конфигурация не сработала. Все запросы соответствуют блоку производственного сервера (или, по крайней мере, обрабатывались первым блоком сервера).

...