Я пытаюсь перенаправить корневой домен для http и https в nginx в тот же подкаталог (https):
Так, например,
http://example.com -> https://example.com/subdirectory
https://example.com -> https://example.com/subdirectory
Как бы просто это ни казалось мне, я изо всех сил пытаюсь достичь этого. Я пробовал использовать варианты перезаписи и возвращать 301, но всегда получал цикл перенаправления.
Моя текущая конфигурация (вызывающая цикл):
server {
listen 80;
server_name example.com;
return 301 https://$server_name/subdirectory;
}
server {
listen 443 ssl spdy;
server_name example.com;
return 301 https://$server_name/subdirectory;
}
Итак, в основном я пытаюсь перенаправить в тот же подкаталог на https из корневого домена, независимо от того, запрашивается ли корневой домен через http или https.
Эта конфигурация сделает то, что вы хотите:
server {
listen 80:
server_name example.com;
return 301 https://$server_name/subdirectory;
}
server {
listen 443;
server_name example.com;
location = / {
return 301 https://$server_name/subdirectory;
}
}
В = /
Спецификаторы означают полное совпадение, поэтому он соответствует только точному корневому URI виртуального сервера.
server {
listen 80:
server_name example.com;
return 301 https://$server_name/subdirectory/;
}
server {
listen 443;
server_name example.com;
location = / {
return 301 https://$server_name/subdirectory/;
}
}
Посмотрите, как я добавил косую черту в конце, это очень важно, иначе вы получите петли перенаправления.
Очевидно, это не сработает, если вы не исключите подкаталог location из этого поведения для ssl vhost.
server {
listen 80;
server_name example.com;
return 301 https://$server_name/subdirectory;
}
server {
listen 443 ssl spdy;
server_name example.com;
location /subdirectory {
# Your stuff
}
location = / {
return 301 https://$server_name/subdirectory;
}
}
Другой подход с некоторыми "хитростями" ...
server {
access_log /var/log/nginx/<DOMAIN_NAME>-access.log;
error_log /var/log/nginx/<DOMAIN_NAME>-error.log;
listen <PORT_PROXY>;
server_name <DOMAIN_NAME>;
location /<SUBDIRECTORY> {
proxy_pass http://<RESOURCE_IP>:<RESOURCE_PORT>/<SUBDIRECTORY>;
proxy_redirect off;
proxy_set_header Host $host:<PORT_PROXY>;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location = / {
return 301 https://$server_name/<SUBDIRECTORY>;
}
}
Спасибо! = D