Рейтинг:0

Сделать перенаправление nginx на HTTPS даже с конкурирующим регулярным выражением местоположения

флаг cn

У меня есть следующая конфигурация внутри nginx сервер {...} блокировать:

расположение /какое-то приложение { 
  если ( $https != "вкл." ) { 
    вернуть 301 https://$server_name$request_uri;
  } 

  расположение ~ \.php$ { 
    включить фрагменты/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php-fpm.sock;
  } 
} 

Проблема в:

  • когда я получаю доступ http://example.com/someapp/somefile.html (или просто /какое-то приложение), меня перенаправляют на HTTPS,
  • но когда я получаю доступ http://example.com/someapp/somefile.php, я не перенаправляюсь на HTTPS.

Кстати, это соответствует документ, в котором говорится:

Чтобы найти местоположение, соответствующее заданному запросу, nginx сначала проверяет местоположения, определенные с помощью строк префикса (префиксные местоположения). Среди них выбирается и запоминается местоположение с самым длинным совпадающим префиксом. Затем проверяются регулярные выражения в порядке их появления в конфигурационном файле. Поиск регулярных выражений завершается при первом совпадении, и используется соответствующая конфигурация. Если совпадение с регулярным выражением не найдено, то используется запомненная ранее конфигурация расположения префикса.

Так когда расположение ~ \.php$ это совпадение, местоположение /какое-то приложение игнорируется, даже если запрос .../какое-то приложение/somefile.php.

Имея расположение ~ \.php$ {...} блокировать вне родителя местоположение /someapp {...} block не меняет это поведение.

Как я могу перенаправить каждый HTTP-запрос на HTTPS на /какое-то приложение без необходимость дублировать если и возвращаться строки в блок местоположения php?

флаг us
Пожалуйста, добавьте к вопросу полную конфигурацию nginx, как показано командой `nginx -T`.
флаг cn
@TeroKilkanen Я не могу добавить так много информации в целях конфиденциальности. Однако я добавил фрагмент документа nginx, который, я надеюсь, прояснит характер моей проблемы.
djdomi avatar
флаг za
totor, а вы не думали о замене реального домена или ips на example.com?
флаг us
Без более широкого контекста невозможно предложить хорошее решение проблемы.
Рейтинг:3
флаг za

Мое предложение было бы

сервер {
       
        имя_сервера example.com *.example.com;
        слушать 80;
        слушать [::]:80;
        вернуть 301 https://$host$request_uri;
}

это создаст базовый сервер для порта 80 и скажет браузеру постоянно использовать 443.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.