Мне нужно, чтобы nginx перенаправлял все URL-адреса http на https, за исключением ".secret /" каталог, который по-прежнему должен обслуживаться как http.
Так, например:
http://example.com/a.html
-> https://example.com/a.html
http: // example .org / z / b.html
-> https://example.org/z/b.html
http://example.com/.secret/x.html
-> http://example.com/.secret/x.html
У меня в конфигурации есть следующее, но для http он возвращает адреса, содержащие "_".
server {
listen 80;
server_name _;
location /.secret {
return http://$server_name$request_uri;
}
location / {
return 301 https://$server_name$request_uri;
}
}
Что я делаю не так?
ОБНОВЛЕНИЕ:
Объединив комментарии от @mforsetti и @Pothi_Kalimuthu, сработало следующее:
server {
listen 80;
server_name _;
location /.secret { }
location / {
return 301 https://$host$request_uri;
}
}
возвращает адреса, содержащие "_".
server_name _; location /.secret return http: // $ server_name $ request_uri; }
$ server_name
возвращает назначенное server_name
блок сервера
, в вашем случае это _
; отсюда _
в возвращенном адресе.
Если вы хотите, чтобы он возвращал имя хоста или заголовок запроса Host
, попробуйте использовать $ host
, что-то вроде:
location /.secret {
return http://$host$request_uri;
}
.secret /
каталог, который должен продолжаться для обслуживания как http
, если вы хотите обслуживать каталог, укажите корневой
каталог.
location /.secret {
root /path/to/your/parent/of/secret/directory;
}