GD Star Rating
loading...

Пару недель назад сдуру связался с хостингом от nic.ru, выбрал тариф 301 (самый топовый из предложенных), оплатил на год вперед,. Через неделю начались проблемы: нехватка оперативной памяти на площадке выливалось в полную недоступность размещенного на площадке сайта, что решалось только ручной остановкой/запуском апача. Причем превышения лимита происходят как во время высокой посещаемости, так и глубокой ночью, когда на сайте по логам 1-2 блять человека. Сайт максимально оптимизирован под большие нагрузки, все страницы кешируются на 5 часов, ненужные модули PHP и апача в панели управления хостингом отключены.
Переписка с техподдержкой помогла чуть менее, чем никак: “наш хостинг работает хорошо, оптимизируйте сайт, если достигнут лимит использования памяти, перегрузить апач можно только из ЛК. Деньги не возвращаем”.

В общем, эта была предыстория, а теперь вопрос: подскажите, где можно взять толковый мануал по настройке связки php 5.3 или 5.4 + nginx или lighttpd. ОС FreeBSD 8.1, система портов недоступна, только компиляция из сырцов.

Tagged with →  

35 Responses to Пару недель назад сдуру связался с хостингом от nic.

  1. Vokenko:

    Я здесь буду писать свои шаги, а вы меня поправляйте, если что буду делать не так.
    * $user – мое имя в ник.ру

    1. Подключился к площадке по SSH, создал папку /home/$user/nginx и скачал в него дистрибутив, распаковал его и сконфигурировал:
    cd /home/$user/
    mkdir nginx
    cd nginx
    wget http://nginx.org/download/nginx-1.0.14.t
    tar zxf nginx-1.0.14.tar.gz

    #создаем папку pcre и кладем в нее сырцы pcre, нужны для mod_rewrite nginx-a
    cd /home/$user/
    mkdir pcre
    cd pcre
    wget ftp://ftp.csx.cam.ac.uk/pub/software/pro
    tar zxf pcre-8.20.tar.gz
    mv /home/$user/pcre/pcre-8.20/* /home/$user/pcre/

    #конфигурируем и компилируем nginx./configure –prefix=/home/$user/nginx –sbin-path=/home/$user/nginx/sbin/nginx –conf-path=/home/$user/nginx/conf/nginx.conf –pid-path=/home/$user/logs/nginxmy.pid –error-log-path=/home/$user/logs/error.log –http-log-path=/home/$user/logs/access.log –user=$user –group=$user –without-http_gzip_module –without-http_proxy_module –with-pcre=/home/$user/pcre –with-cc-opt=”-I /usr/local/include” –with-ld-opt=”-L /usr/local/lib”
    make
    make install

  2. Vokenko:

    nginx установлен, правим конфигурационный файл, размещенный по адресу /home/$user/nginx/conf/nginx.conf
    Здесь бы мне не помешала консультация спецов по его тюнингу, пока же я просто указываю ему, что будем слушать порт 3128, чтобы не конфликтовать с работающим апачем, и указываю папку с сайтом.
    Запускаем проверку конфига, радуемся, делаем тестовый запуск из-под рута

    /home/$user/nginx/sbin/nginx -t
    nginx: the configuration file /home/$user/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /home/$user/nginx/conf/nginx.conf test is successful

    /home/$user/nginx/sbin/nginx

    Вуаля, nginx запустился, и даже можно открывать статичные.html страницы с картинками, обращаясь к сайту по 3128 порту

  3. Vokenko:

    Устанавливаем PHP. Для нормальной работы сайта нужны PHP модули: mbstring, gd, ctype, session, simplexml, mysqli, zlib, json.
    Работающая на поддомене wiki отказывается работать при отсутствии mysql, хз почему. Лишаться вики было бы не с руки, поэтому, видимо, к перечисленным выше модулям добавить модуль myqsl.

    cd /home/$user
    mkdir php
    cd php
    wget http://ru2.php.net/get/php-5.4.0.tar.gz/
    tar zxf php-5.4.0.tar.gz
    cd /home/$user/php/php-5.4.0./configure –prefix=/home/$user/php –with-config-file-path=/home/$user/php/php.ini –enable-mbstring –with-zlib –with-gd –enable-ctype –with-mysqli –with-jpeg-dir –enable-session –enable-simplexml –disable-fileinfo –enable-zip –with-freetype-dir –with-mysql –enable-fpm –with-fpm-user=$user –with-fpm-group=$user –disable-all

  4. Vokenko:

    Первая проблема: не хочет стартовать php-fpm, ни с дефолтным конфигом, ни с моим. При старте сообщает:

    /home/$user/php/sbin/php-fpm
    [04-Apr-2012 10:53:09] WARNING: [pool www] ‘user’ directive is ignored when FPM is not running as root
    [04-Apr-2012 10:53:09] WARNING: [pool www] ‘group’ directive is ignored when FPM is not running as root
    [04-Apr-2012 10:53:09] ERROR: unable to bind listening socket for address ‘127.0.0.1:9000’: Permission denied (13)
    [04-Apr-2012 10:53:09] ERROR: FPM initialization failed

    🙁

  5. DerZero:

    Хм, а порты-то почему недоступны? portsnap fetch их вполне успешно вытащит, portsnap extract развернет, да и делов-то. Зато дальше все это поддерживать, обновлять и менять опции будет значительно легче.

  6. Vokenko:

    насколько я понимаю, я могу пользоваться на сервере только папками /home/$user и /tmp
    Все доки по установке дополнительного ПО, которые предоставляет провайдер, начинаются строками “скачиваем исходники дистрибутива в папку /home/$user”

  7. NarSm:

    : Достаточно было –prefix и путя к pcre.

  8. NarSm:

    : Посмотри, что висит на 9000-м порте. Скорее всего, там уже кто-то живет – перевесь fpm на другой порт и проверь.
    В худшем случае – через unix-socket.

  9. XxxGood:

    : дык это, у него вроде прав не хватает просто.

  10. NarSm:

    : Забиндить nginx на 3128 – хватает, а fpm на 9000 – нет?

    Я тоже думал сначала, что – турма, что – биндить запрещено.

  11. Vokenko:

    php-fpm еще ночью пробовал на 3128 повесить, та же ошибка
    счас думаю, может ему прав не хватает в /tmp писать или еще куда…
    не могу найти способ запустить его в дебаг-режиме

  12. Vokenko:

    cat /home/$user/logs/php-fpm.log
    [04-Apr-2012 11:37:10] WARNING: [pool www] ‘user’ directive is ignored when FPM is not running as root
    [04-Apr-2012 11:37:10] WARNING: [pool www] ‘group’ directive is ignored when FPM is not running as root
    [04-Apr-2012 11:37:10.927453] ERROR: pid 89804, fpm_sockets_new_listening_socket(), line 187: unable to bind listening socket for address ‘127.0.0.1:9000’: Permission denied (13)
    [04-Apr-2012 11:37:10.927487] ERROR: pid 89804, fpm_init(), line 69: FPM initialization failed

  13. NarSm:

    : А вот это интереснее.
    Правов ему именно на бинд не хватает.
    Попробуй-таки с юникс-сокетом.

  14. Vokenko:

    заменил в конфиге “listen = 127.0.0.1:9000” на “listen = 9000”
    запустился!

  15. V-nMilk:

    : плохое решение

  16. Lehwhite:

    Ага, ага, они меня пару лет назад тоже так футболили, типа я-не-я-и-сайтек-не-моя, оптимизируйте сами. Оптимизировать у меня нехуй, был бы еще какой-нибудь друпал, я бы подумал. В итоге пришлось с ними немного поругаться и о чудо, уже почти два года никаких проблем.

  17. Vokenko:

    Stephan-V: видимо, поэтому не получается подключиться из nginx к php-fpm

  18. DerZero:

    : скорее, потому, что он повис не на 127.0.0.1. попробуй другие адреса.

  19. V-nMilk:

    : например, 127.0.0.2

  20. XxxGood:

    : netstat -na | grep LISTEN

  21. Vokenko:

    php-fpm использует внешний IP адрес сервера, его прописал в конфиге nginx-а, что вроде бы даже немного помогло: теперь при обращении к сайту по 3128 порту nginx не тужится как раньше, а резво выдает ошибку “access denied” или “file not found”, в зависимости от того, что я пишу в переменную “fastcgi_param SCRIPT_FILENAME” файла конфигурации

    Пока писал, нашел на сайте Сысоева описание переменной, в результате чего, указал в переменной путь к папке, где на сервере лежит сайт.
    Сайт заработал, но выяснилось, что не хватает параметра –enable-xml при сборке РНР, (Call to undefined function utf8_encode). Поставил пересобираться РНР.

    Пока пересобирается РНР, попробую найти ответ на волнующий меня вопрос: на сайте Сысоева http://www.nginx.org/ru/docs/http/ngx_ht… я прочел описание переменной файла конфигурации:

    fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_nam e;
    параметр SCRIPT_FILENAME будет равен “/home/www/scripts/php/info/index.php”.

    С одной стороны все понятно, с другой стороны, у меня кроме основного сайта будет использоваться 4 поддомена, которые будут настроены как виртуальные хосты (простите если неправильно выражаюсь). Так вот, у каждого поддомена своя домашняя папка, а в файле конфигурации мы однозначно указываем только один путь
    fastcgi_param SCRIPT_FILENAME /home/$user/domain.ru/docs$fastcgi_scrip t_name;

    то будет ли работать такая конфигурация?

  22. Vokenko:

    да, и еще вопрос: с точки зрения безопасности, не опасно ли держать на порту 9000 РНР, смогут ли школьники телнетом дергать мой РНР?

  23. XxxGood:

    : определи этот параметр для каждого виртхоста или локейшена.

  24. XxxGood:

    : если он висит на интерфейсе локалхоста, то не смогут.
    если торчит наружу и нет фаерволла, то смогут.

  25. NarSm:

    : Что, впрочем, не очень криминально, хотя и нехорошо.

  26. Vokenko:

    В общем, по какой-то причине нет доступа к портам локалхоста. Саппорт ник.ру радостно отвечает, что поддержкой скриптов и программ пользователей не занимается, поэтому сделаем через юникс.сокет.

    Переделал оба конфига: в ~/php/etc/php-fpm.conf добавил строку
    listen = /tmp/php-fpm.socket

    а в ~/nginx/conf/nginx.conf соответственно:
    fastcgi_pass unix:/tmp/php-fpm.socket;

    После рестарта обоих сервисов, все заработало. Осталось настроить поддержку SEF (думаю, будет достаточно 404 ошибки отправлять на обработку index.php) и сконфигурировать виртуальные хосты.

  27. XxxGood:

    : ну разве что можно убить бэкенд медленными соединениями. он подыхает быстрей нжинкса, да.

  28. XxxGood:

    а, понятно.
    это у тебя виртуализация без локалхоста просто. нет такого адреса, или нет такого интерфейса.
    я с таким сталкивался.

  29. NarSm:

    : Ну да, либо засрать еррорлог и сожрать место на диске.

  30. Vokenko:

    Прописав виртуальные хосты и проверив их работу по 3128 порту, исправил в конфиге порт 3128 на 80, остановил ник.ру-шный апач+нгинкс и запустил свой.

    Hardblog.net - linux nix windows image

    Все работает очень шустро, потребление памяти снизилось с 160-170Мб до 60Мб.

    Осталось разобраться с подводными камнями: в админку сайта пока что не попадаю, но, думаю, это решаемо.

  31. Vokenko:

    Последняя оставшаяся проблема: не пишутся сессии.

    cat php.ini |grep session |grep -v “;”
    session.save_handler = files
    session.save_path = /tmp
    session.use_cookies = 1
    session.use_only_cookies = 1
    session.name = PHPSESSID
    session.auto_start = 1
    session.cookie_lifetime = 0
    session.cookie_domain =
    session.cookie_httponly =
    session.serialize_handler = php
    session.gc_probability = 1
    session.gc_divisor = 1000
    session.gc_maxlifetime = 1440
    session.bug_compat_42 = Off
    session.bug_compat_warn = Off
    session.referer_check =
    session.cache_limiter = nocache
    session.cache_expire = 180
    session.use_trans_sid = 0
    session.hash_function = 0
    session.hash_bits_per_character = 5

  32. 0tser:

    : Ага, jail называется

  33. Vokenko:

    Решил все проблемы, последние 4 дня прошли без ручных рестартов вебсервера, я доволен 🙂
    Если кому интересно, могу скинуть конфиги php-fpm и nginx

Добавить комментарий