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

nginx и SSL перенаправление

У меня есть сервер nginx, который я использую в качестве прокси. Я хочу, чтобы все запросы перенаправлялись как обычные HTTP-запросы, ожидая запроса на api.mydomain.org, те запросы, которые я хочу запустить с ssl / https.

Это отлично работает со следующим:

server {
       listen 80;
       server_name api.mydomain.org;
       return 301 https://api.mydomain.org$request_uri;
}

server {

        listen   443;
        server_name api.mydomain.org;

          location / {
                proxy_pass  http://backend;

                 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
                 proxy_redirect off;
                 proxy_buffering off;
                 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-Proto https;
         }

        ssl on;
        ssl_certificate /etc/nginx/ssl/api.mydomain.org/server.crt;
        ssl_certificate_key /etc/nginx/ssl/api.mydomain.org/server.key;
}

Однако это перенаправит весь запрос на поддомены, которые не указаны / не квалифицированы. Например. a.mydomain.org или b.mydomain.org отправляются на https://api.mydomain.org.

Как мне это настроить?

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

server {
    listen 80 default_server;
    return 444;
}

Вы можете добавить свой общедоступный IP-адрес (а) в свой server_name директива в вашем первом блоке, чтобы принимать соединения с использованием HTTP / 1.0 или HTTP / 1.1 с IP-адресом.