Nginx. Довольно неплохо, качественно написанный программный продукт. Казалось бы, обо что там можно споткнуться. Но ведь поди ж ты.
Ситуация 1.
Допустим, у вас есть multihome-машина, т.е. ей присвоено несколько разных IP-адресов помимо "127.0.0.1". На ней крутится NginX и стопицот виртуальных хостов (сайтов) вида
Теперь вы берете и добавляете стопицот-первый сайт вида
Угадаете что случится? Ответ под спойлером.
[ Spoiler (click to open)]Все предыдущие 100500 сайтов дружно разом набекренятся.
Угадаете почему? Напишите в комментах, если сомневаетесь.
Я относительно недавно положил таким макаром прод примерно на час, пока не заметили. И на старуху бывает проруха. Но даже и не это самое смешное. Примерно в тот же самый день на совершенно другой площадке ровно таким же способом положил другой пре-прод сервис мой коллега. Аккуратно надо с этим listen, ох аккуратно!
Ситуация 2.
Допустим, есть вот такая конструкция
Угадайте, будет ли такая конструкция работать на практике? Ответ под спойлером.
[ Spoiler (click to open)]Сильно зависит от директивы "блаблабла". Если это "proxy_pass" — то будет. Если "root" — не будет.
Почему? А хрен его знает, товарищ прапорщик. Собака след не берёт, нюхайте читайте исходные коды сами. Я встречал упоминания о том, что там как-то завершается или не завершается обработка того или иного запроса перед тем как он будет перенаправлен в тот или иной location. Но вообще, на мой взгляд, логики в таком поведении маловато.
Ситуация 3.
Допустим, вам хочется в ответ на 403 Forbidden отдавать какую-то кастомную красивую страничку. Ну и вы такие, не подозревая засады
Будет такое работать? Ответ под спойлером.
[ Spoiler (click to open)]Будет, но есть нюанс. Красивая кастомная 403-страница действительно будет отображаться, только вот реальный код ответа от сервера будет 200, а не 403.
Какая разница, спросите вы? Для мясного человека — никакой. А вот если ваш сервис помимо прочего подразумевает M2M-взаимодействие (Machine-to-Machine), всё становится намного грустнее. Причём, лично мне пока что неизвестно ни одного способа заставить nginx возвращать именно 403-й код ответа с использованием кастомной 403-страницы в такой постановке задачи. Причём, это касается не только 403-го кода, а в принципе, любых кодов ошибок.
Так что не так прост этот ваш nginx, как его малюют.
... Еще из интересного. Тут один заказчик выдал виртуалки под outsource-проект и зачем-то выставил в системных переменных "vm.panic_on_oom = 1". Мне до сих пор интересно, чем думали эти пидорасы. Ночь моей работы ушла в сортир, когда в процессе миграции одного сервиса он вывалился по OOM. А доступа к гипервизору у меня, разумеется, нет. Наверное, это всё делали как раз вот такие мамкины сисадмины по готовым инструкциям откуда-то из интернета, не особо вникая в суть. А я проглядел. Или они реально собирались сидеть изучать дампы памяти ядра после падения Java-приложения по нехватке памяти? Вы серьёзно?
... Я думал, что FIDO — это некогда популярная компьютерная сеть. А оказывается, это "Fast IDentity Online"...
Всем послушного nginx-а, достаточного количества оперативной памяти и быстрой онлайн-идентификации.