У меня есть три разных прокси-пароля в моей конфигурации nginx. Два из них перенаправляются на хост https и последний через стандартный порт 80.Nginx proxy_pass перенаправление на неправильный домен
Два первых (example.com
и proxmox.example.com
) работают исправно.
Но проблема в том, что касается третьего. http://blog.example.com
перенаправляет на https://example.com
, и я не могу понять, почему.
Если у кого-то есть идея ... Я новичок в nginx, и у меня все еще возникают трудности с пониманием proxy_pass с SSL или без него.
Вот моя конфигурация.
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80;
server_name example.com proxmox.example.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443;
server_name example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_redirect off;
location/{
proxy_pass https://localhost:8000;
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 $scheme;
}
}
server {
listen 443;
server_name proxmox.example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_redirect off;
location/{
proxy_pass https://localhost:8006;
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 $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name blog.example.com;
proxy_redirect off;
location/{
proxy_pass http://10.0.0.3:80;
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 $scheme;
}
}
Благодаря
EDIT
Я прочитал это на Nginx док. Возможно, это причина проблемы.
С этой конфигурацией браузер получает сертификат сервера по умолчанию, то есть www.example.com, независимо от имени запрашиваемого сервера. Это вызвано поведением протокола SSL. SSL-соединение устанавливается до того, как браузер отправит HTTP-запрос, а nginx не знает имя запрашиваемого сервера. Поэтому он может предлагать только сертификат сервера по умолчанию.
Link: see in Name-based HTTPS servers
только предположение: правильно ли введенна запись DNS-A для «blog.example.com»? Возможно, это указывает на неправильную цель IP .. – semm0
Возможно, это то, что '10.0.0.3: 80' делает. –
Фактически, я нахожусь на узле, где установлен proxmox. Поэтому 'localhost' является основным хостом, а' 10.0.0. * 'Являются контейнерами proxmox ... Итак, 10.0.0.3 является одним из моих контейнеров proxmox. Для DNS это должно быть хорошо, потому что в моих контейнерах используется информация об DNS-хосте. –