У меня на домашнем сервере запущен nginx по адресу keepsecret.ddns. net. Когда я запрашиваю, например, keepsecret.ddns.net/foo/, он возвращает мне keepsecret.ddns.net/foo/index.html. Пока все хорошо.
Теперь я пытаюсь рассматривать мой домашний сервер как вышестоящий сервер. Перед этим вышестоящим сервером находится удаленный прокси-сервер на www.mydomain.com.. Когда я запрашиваю, например, www.mydomain.com/foo/index.html, он возвращается ко мне без проблем. Тем не менее, когда я запрашиваю www.mydomain.com/foo/, nginx сначала выполняет перенаправление 301, чтобы я затем был отправлен на keepsecret.ddns.net/foo/, показывая мой домашний IP-адрес: (
Я понятия не имею, почему nginx ведет себя так. Единственное, что я предполагаю, это то, что он связан с тем фактом, что домен в заголовке узла запроса не совпадает с доменом в URL-адресе запроса.
Вкратце вопросы:
- Почему nginx делает это?
- Как я могу запретить nginx выполнять это перенаправление, чтобы я всегда оставался на www.mydomain.com?
Вот основная часть моего конфига для справки:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name keepsecret.ddns.net www.mydomain.com;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/keepsecret.ddns.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/keepsecret.ddns.net/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = keepsecret.ddns.net) {
return 301 https://$host$request_uri;
}
if ($host = www.mydomain.com) {
return 301 https://$host$request_uri;
}
listen 80 ;
listen [::]:80 ;
server_name keepsecret.ddns.net www.mydomain.com;
return 404; # managed by Certbot
}