Настройка на 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 = username
group = username
Теперь перезапустим 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/username/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 username www-data
Применяем
Теперь, осталось перезапустить PHP-FPM:
sudo service php5-fpm restart
И перезапустить Nginx:
sudo service nginx restart
Если все было сделано правильно, то мы получим готовый, рабочий виртуальный хост для работы SiteForeverCMS (для и других CMS тоже) на нашем собственном VDS на связке Nginx+PHPFPM
Автор: keltanas
comments powered by Disqus