klink0v (klink0v) wrote,
klink0v
klink0v

Category:

Обжегся об nginx

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-а, достаточного количества оперативной памяти и быстрой онлайн-идентификации.

Tags: it, nginx, грабли, софт, трудовыебудни
Subscribe

  • И снова PostgreSQL

    ... Есть у нас один "проблемный" сервис, который очень сильно нагружает БД PostgreSQL. Вытащили его из общего кластера на отдельную…

  • Вдогонку про IPSec

    Вдогонку к предыдущему посту. Я разобрался в чём косяк. В IKEv2 появилась новая фича: так называемый "childless IKE_SA" (RFC6023). Это…

  • Очередные грабли с IPSec (StrongSWAN + Juniper + IKEv2)

    Во время строительства очередного IPSec-а опять традиционно походил по граблям. Потерял кучу времени и замудохал саппорт одного хостинг-провайдера.…

  • 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 

  • 19 comments

  • И снова PostgreSQL

    ... Есть у нас один "проблемный" сервис, который очень сильно нагружает БД PostgreSQL. Вытащили его из общего кластера на отдельную…

  • Вдогонку про IPSec

    Вдогонку к предыдущему посту. Я разобрался в чём косяк. В IKEv2 появилась новая фича: так называемый "childless IKE_SA" (RFC6023). Это…

  • Очередные грабли с IPSec (StrongSWAN + Juniper + IKEv2)

    Во время строительства очередного IPSec-а опять традиционно походил по граблям. Потерял кучу времени и замудохал саппорт одного хостинг-провайдера.…