У меня есть сервер 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-адресом.