Настройка на VDS Nginx+PHP-FPM+SiteForeverCMS

В продолжении статьи о базовой настройке VDS на Hetzner, разберем вопрос настройки Nginx и PHP-FPM и рассмотрим некоторые вопросы по работе сайта на этой связке на примере SiteForeverCMS.

Для начала удалим установленный на VDS апач (мне он все равно больше не понадобится).

sudo apt-get purge apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5

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

dpkg-query -W --showformat='${Package}\n' | grep apache

Дальше нам надо установить nginx и php-fpm:

sudo apt-get install nginx
sudo apt-get install php5-fpm

Настройка PHP-FPM

Далее устраним уязвимость в php-fpm:

nano /etc/php5/fpm/php.ini

Находим строку:

;cgi.fix_pathinfo = 1

Приводим ее к виду:

cgi.fix_pathinfo = 0

И настроим запуск php-fmp от имени созданного в прошлой статье пользователя:

sudo nano /etc/php5/fpm/pool.d/www.conf

и строки:

user = www-data
group = www-data

заменим на:

user = keltanas
group = keltanas

Теперь перезапустим fpm:

sudo service php5-fpm restart

Настройка NGINX

Нам надо создать новый виртуальный хост. При этом домен нашего хоста должен быть направлен на наш VDS. Допустим, что наш домен - это example.com

Для этого создадим файл нашего хоста:

sudo touch /etc/nginx/sites-avaiable/example.com

И вызовем его на редактирование:

sudo nano /etc/nginx/sites-avaiable/example.com

В этот файл нам надо вставить конфиг. Приведу конфиг, необходимый и достаточной для работы SiteForeverCMS:

server {
    listen   80; # слушаем ipv4;

    root /home/keltanas/www/example.com/www; # Здесь должны лежать файлы сайта
    index index.php;

    # Указать, для каких доменов работает конфиг
    server_name example.com www.example.com;

    location / {
        # Чтобы избавиться от www, есть два способа:
        # Если вызван какой-то другой домен (поддомен, например)
        if ($host != 'example.com' ) {
             rewrite  ^/(.*)$  http://example.com/$1  permanent;
        }
        # Или, если вызван конкретно поддомен с www
        #if ($host = 'www.example.com' ) {
        #    rewrite  ^/(.*)$  http://example.com/$1  permanent;
        #}
        # Замена правилам mod_rewrite от apache для SiteForeverCMS
        # @link: http://habrahabr.ru/qa/5938/#answer_25397
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?route=$1 last;
            break;
        }
        index index.php;
    }

    # Обработка файлов .php (например, после rewrite в предыдущей секции)
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: Вы должны иметь "cgi.fix_pathinfo = 0;" в php.ini, чтобы использовать это (мы это уже сделали)

        # Работать с php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    # Прикроем доступ к стандартному .htaccess
    # Таким путем можно закрыть доступ и к другим не угодным файлам
    location ~ /\.ht {
        deny all;
    }
}

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

Чтобы настроить Nginx для моего любимого фреймворка Symfony, можно воспользоваться официальной документацией по настройке веб-сервера.

Создадим симлинк на хост, чтобы активировать его:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

Чтобы Nginx корректно отдавал статику из директории пользователя, отличного от www-data (т.е. нашего), добавим пользователя www-data в нашу группу:

usermod -aG keltanas www-data

Применяем

Теперь, осталось перезапустить PHP-FPM:

sudo service php5-fpm restart

И перезапустить Nginx:

sudo service nginx restart

Если все было сделано правильно, то мы получим готовый, рабочий виртуальный хост для работы SiteForeverCMS (для и других CMS тоже) на нашем собственном VDS на связке Nginx+PHPFPM


Создано:
Автор:
« Назад на главную

comments powered by Disqus
Fork me on GitHub