klink0v (klink0v) wrote,
klink0v
klink0v

Пара нюансов в NginX

Пара мелких нюансов в NginX, из серии "чтоб потом не забыть".

Допустим, хочется отдавать "/index.html" откуда-то из одной директории, а всё остальное — из какой-нибудь другой директории. Казалось бы, нет ничего проще. Пишем такой конфиг:

и с удивлением обнаруживаем, что это не работает.

А западло заключается в том, что если в URLе запроса отсутствует явная ссылка на конкретный файл, то NginX отдаёт индекс папки через внутренний редирект. Поэтому в вышеприведённой конфигурации он будет пытаться искать пресловутый "index.html" не в первом location, а во втором. Где его скорее всего нет. Поэтому никуда не деться, придётся добавить в конфигурацию как минимум ещё один, третий location:

Так работает.

Другой пример. У нас NginX играет роль Reverse Proxy. Где-то за ним стоит Apache, который отдаёт контент. Хочется перенаправлять пользователя на SSL в том случае, если он пришёл через "голый" HTTP. Одна беда: бэкенд и скрипты на нём не знают, какой же протокол использовал фронтенд при обработке той или иной сессии. Надо как-то ему это показать, причём желательно не сильно глубоко переделывая программный код уже имеющихся скриптов. Вот один из вариантов решения. На NginX-е помимо всего прочего указываем:

А на Apache вот это:

И, скажем, PHP-кодеры могут продолжать использовать конструкции типа 'if $_SERVER["HTTPS"]=="on"' и больше ни о чём не думать.

Tags: hints, it, nginx, администрирование
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments