Попросите nginx перенаправить все на https, кроме одного каталога

Мне нужно, чтобы 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;
    }
}
4
задан 10 July 2021 в 13:46
1 ответ

возвращает адреса, содержащие "_".

 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;
}
5
ответ дан 28 July 2021 в 11:40

Теги

Похожие вопросы