« Back to blog

Nginx пример отличного конфига, нужен ли очередной?

зачем трогать то, что и без того работает? вопрос логичный, но сподручный стареющему организму/мозгу.

всегда есть то, что то новое почитать, написать, придумать, ну и, наконец, оптимизировать. так уже получилось, что мне сложно представить себе свою работу без постоянного прогресса. это касается обновления, изменения конфигурационных файлов переданных мне на сопровождение 8 серверов помимо основной разработки серверной и клиентской части проекта. одно, что не трогаю - это action script/flex

все работает и не надо ничего менять, но нет... надо, получилось убедить заказчика и все в итоге от этого выиграли. речь пойдет о кратком, но лаконичном конфигурационном файле nginx + passenger. перед тем, как продолжить читать, откройте в отдельном окне сам конфиг - http://twitter.com/amikhailov/status/7091350897950720

  • passenger_pool_idle_time 0; - если у вас один запущенный проект на сервере, либо памяти хватает на все активный проекты, то смело отключайте засыпание passenger при неактивности. имеет смысл, если запуск приложения длиться более нескольких секунд
  • passenger_max_pool_size 15; - опять же, если с памятью все хорошо и нет недостатка, то не жалейте ее, пусть расходуется по назначению
  • gzip on; - сжатие текстового контента уже считается признаком хорошего тона
  • passenger_pre_start https : // 127.0.0.1/; - если ваше приложение запускается более нескольких секунд (речь идет об инициализации всех библиотек + кода) - скажите nginx-у, сделать это автоматически после очередного деплоймента
  • rewrite ^(.*) https://$host$1 permanent; - один из проектов, который я разработываю, не имеет public-контента, соответственно было принято решение приобрести ssl-сертификат и весь функционал спрятать за ним. здесь нет смысла вешать инстансы приложения на 80 порты, делаем редирект на https силами самого сервера. можно забыть про ssl_requirement
  • location ~ \.php$ { deny all; } - обнаружил, что многие боты проверяют наличие phpmyadmin и прочее, нам оно здесь ни к чему, блокируем, пусть рельсам будет проще
  • passenger_min_instances 10; - возвращаясь к первым пунктам, есть достаточно памяти - смело позволяйте запускать столько инстанцов, сколько вам надо
  • location @503 {} - правило хорошего тона, во время деплоймента использовать заглушку - чтобы пользователи были в курсе, почему сервер временно не отвечает. для того, чтобы это использовать - скажите capistrano создавать файл maintenance.html на время деплоймента
  • location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ {} - убираем логирование доступа к статике, добавляем заголовки max-expire, 
    SSL контент по умолчанию кэшируется только в памяти, закрывая браузер это кэш обнуляется. поэтому добавим заголовок, чтобы кэшировать статику на жесткий диск - add_header Cache-Control public;

рад, если кому то пригодится

| Viewed
times