4 сентября 2013 г.

Настройка Nginx с поддержкой PHP-FPM в Ubuntu 12.04 (включает: Nginx, php-fpm, MySQL, Memcached)

оригинал был взят отсюда howitmake.ru

    Лично я, стараюсь использовать именно LTS дистрибутивы, основная причина моей любви к ним – придонная лень, все дело в том что если возится с этим дома, настраиваешь, потом перенастраиваешь, затем слегка допиливаешь, а потом все это сносишь и делаешь как нужно, то это интересно, но когда ты работаешь в крупной сети, то на такие эксперименты, обычно, нет времени т.к. других задач припасено на пару недель вперед. В общем, все интересно делать самому, пока это не дошло до промышленных масштабов, а вот когда ты к ним пришел, то уже стараюсь максимально упростить и автоматизировать работу. Но все это лирика, переходим к практике.
    Как всегда: Предполагается что операционная система у вас уже установлена, сеть настроена, интернет шустрый, провайдер не жадный (качать будем много)…
    Учтя все предыдущие недостатки, мы будем ставить, все из репозиториев, собирать в ручную мы ничего не будем.
    Поднимем права до root:
    sudo su

    Установка Nginx
    Для начала добавим репозиторий проекта Nginx:
    nano /etc/apt/sources.list

    Добавим туда, официальное зеркало Nginx, то в каком виде представлен данный пакет, отражает видение его разработчиков:
    deb http://nginx.org/packages/ubuntu/ precise nginx
    deb-src http://nginx.org/packages/ubuntu/ precise nginx


    Теперь нам нужно скачать GPG ключ:
    wget http://nginx.org/keys/nginx_signing.key


    Установим GPG ключ:
    apt-key add nginx_signing.key


    Обновим список пакетов:
    aptitude update


    Установим Nginx:
    aptitude install nginx


    Установка PHP-FPM:
    aptitude install php5-cli php5-common php5-mysql php5-suhosin php5-gd php5-fpm php5-cgi php5-fpm php-pear php5-mcrypt -y


    Нам необходимо устранить уязвимость PHP:
    nano /etc/php5/fpm/php.ini


    Находим строку:
    ;cgi.fix_pathinfo = 1

    Приводим ее к виду:
    cgi.fix_pathinfo = 0


    Сохраняем изменения и перезапустим PHP-FPM:
    /etc/init.d/php5-fpm restart


    Создадим пользователя для работы с виртуальным хостом
    Чтобы не заморачиваться, назовем его example:
    При создании пользователя, отключим ему доступ к шеллу, так безопаснее.
    useradd example -b /home/ -m -U -s /bin/false

    Также, при создании пользователя, мы завели одноименную группу example, она нам также пригодится.

    Придумаем для пользователя example пароль:
    passwd example


    Создадим необходимые, для работы WEB сайта, директории:
    mkdir -p -m 755 /home/example/www
    mkdir -p -m 754 /home/example/logs


    Предоставляем пользователю example права на них:
    chown -R example: /home/example/www/
    chown -R example: /home/example/logs/


    Предоставим Nginx доступ в домашнюю директорию пользователя example, добавив пользователя www-data в группу example
    usermod -a -G example www-data


    Создадим виртуальный хост Nginx
    Настаиваем первый виртуальный хост Nginx, назовем его example.org
    nano /etc/nginx/conf.d/example.org.conf


    С содержимым:
    (Здесь я привожу только базовые настройки, чтобы работало, если нужно добавить что-то дополнительно, то вы сделаете это сами, исходя из ваших задач )
    server {
            listen   80;
            root /home/example/www;
          
            access_log /home/example/logs/nginx.access.log; #расположение логов данного хоста
    
            server_name example.org www.example.org;
    
            location / {
                    index index.php index.html index.htm;
            }
    
            location ~ \.php$ {
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                    include        fastcgi_params;
            }
    }


    Обращаю внимание!
    Все виртуальные хосты должны иметь в названии расширение .conf, иначе виртуальный хост не будет загружен. Чтобы это исправить, можно зайти в:
    nano /etc/nginx/nginx.conf

    найти строку:
    include /etc/nginx/conf.d/*.conf;

    и привести к такому виду, с каким вы привыкли работать или тем что вам удобнее, лично я рекомендую оставлять все как есть!

    Создадим тестовый файл, чтобы проверить работоспособность PHP5:
    nano /home/example/www/test.php


    С содержимым:
    <?php
    phpinfo();
    ?>


    Перезапустим Nginx, чтобы изменения вступили в силу:
    /etc/init.d/nginx restart


    Переходим по тестовому адресу httр://example.org/test.php
    Получаем то, что написано на экране, нас интересует строка Server API ( на скриншоте подчеркнуто красным) там указывается, кто у нас обрабатывает скрипты PHP.

    Наш сервер уже работоспособен, осталось добавить сопутствующие приложения MySQL и memcached

    Устанавливаем MySQL
    aptitude install mysql-server mysql-client mysql-common

    Придумываем пароль для пользователя root (Администратор сервера баз данных)

    Установка Memcached
    aptitude install memcached php5-memcached

    Для применения изменений перезапустим PHP-FPM
    /etc/init.d/php5-fpm restart

    Чтобы удостовериться, что модуль установился и работоспособен, снова переходим по адресу httр://example.org/test.php
    Находим пункт memcached

    Также, для закачки файлов вам потребуется установить FTP сервер, о способах его настройки можно прочить в опубликованной ранее статье – Настройка FTP сервера vsFTPd, статья актуальна до сих пор, по этому, я не вижу смысла ее обновлять.

    Теперь наш сервер полностью упакован, у нас получилась отличная заготовка, которая будет обновиться из основных репозиториев. Также нам не пришлось ничего собирать руками, от вас теперь только требуется расширять функционал, исходя из тех задач, которые перед вами ставятся…
    Ну и как всегда, обо всех найденных ошибках, а также предложениях по улучшению функционала, да и просто вопросов, прошу в комментарии.

    Комментариев нет:

    Отправить комментарий