Пара мелких нюансов в NginX, из серии "чтоб потом не забыть".
Допустим, хочется отдавать "/index.html" откуда-то из одной директории, а всё остальное — из какой-нибудь другой директории. Казалось бы, нет ничего проще. Пишем такой конфиг:
и с удивлением обнаруживаем, что это не работает.
А западло заключается в том, что если в URLе запроса отсутствует явная ссылка на конкретный файл, то NginX отдаёт индекс папки через внутренний редирект. Поэтому в вышеприведённой конфигурации он будет пытаться искать пресловутый "index.html" не в первом location, а во втором. Где его скорее всего нет. Поэтому никуда не деться, придётся добавить в конфигурацию как минимум ещё один, третий location:
Так работает.
Другой пример. У нас NginX играет роль Reverse Proxy. Где-то за ним стоит Apache, который отдаёт контент. Хочется перенаправлять пользователя на SSL в том случае, если он пришёл через "голый" HTTP. Одна беда: бэкенд и скрипты на нём не знают, какой же протокол использовал фронтенд при обработке той или иной сессии. Надо как-то ему это показать, причём желательно не сильно глубоко переделывая программный код уже имеющихся скриптов. Вот один из вариантов решения. На NginX-е помимо всего прочего указываем:
А на Apache вот это:
И, скажем, PHP-кодеры могут продолжать использовать конструкции типа 'if $_SERVER["HTTPS"]=="on"' и больше ни о чём не думать.