makssof
@makssof
Web-разработчик

Как отключить перенаправление на HTTPS в nginx для одного адреса?

Есть такая конф-я:

server{
  listen 80;
  
  location / {
    return 301 https://swight.live$request_uri;
  }
  
  location ~ /bot/ {
    ...
  }
}

server {
  listen 443 ssl;

  location / {
     ...
  }


Другими словами, нужно что бы перенаправляло на HTTPS отовсюду, кроме как если адрес начинается на /bot/
Но с текущей конф-ей перенаправляет на https в любом случае.
  • Вопрос задан
  • 1156 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
location ~ /vkbot/ {
    root /home/www/vkbot/;

    try_files $uri $uri/ /index.php?$args;
    index index.php index.html;

    ...
}


Тут написано следующее: если в запросе есть (а не начинается, как вы хотите) строка /vkbot/, то выставим root /home/www/vkbot/;. В документации сказано, что uri из запроса добавляется к указанному пути. Итого, в вашем запросе за curl http://swight.live/vkbot/ nginx будет искать файлы в папке /home/www/vkbot/vkbot/. Не то что вы хотели, верно?
Из-за этого try_files ничего не найдёт и сделает внутренний редирект на (барабанная дробь) /index.php. После чего nginx опять начнёт искать подходящий location и не найдёт ничего лучше чем location / в котором написан редирект.

Я полагаю, что исправлять надо как-то так:
location /vkbot/ {
    root /home/www/;

    try_files $uri $uri/ /vkbot/index.php?$args;
    index index.php index.html;

    ...
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Godless
@Godless
Попробуйте еще изменить
root /home/www/vkbot/;

на
alias /home/www/vkbot/;

был не прав
Порядок директив location в конфиге важен!
Попробуйте изменить порядок.
Ответ написан
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
попробуйте location = /bot/ переместить в конфиге выше location / (заметьте - там есть знак =
А вообще читайте про nginx location order priority https://nginx.org/en/docs/http/ngx_http_core_modul...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы