Как я ставил Nginx+php-fpm на Debian GNU\Linux вместо Apache2

test

Привет, читатель!

Pre

Сейчас я опишу процесс как я устанавливал и настраивал связку Nginx+PHP-fpm для использования вместо Apache2 который стоял у меня до того. Естественно ставил я все это на локалхосте, на котором и занимаюсь веб-девом. Процесс не тривиальный и достаточно прост. Более полный мануал на который я ориентировался в описан статье Nginx+php-fpm+perl под Debian Squeeze. У меня же несколько короче и с некоторыми изменениями, в виду того что большую часть настроек майтейнеры пакетов и так уже взяли на себя.

Если Вы еще не выбрали VPS/VDS

Список неплохих конфигураций можно найти и заказать тут.

Постоянный контроль доступности вашего сервера

Для контроля на работоспособность вашего сервера используйте следующий сервис ping-admin

Устанавливаем

Установим все что нам нужно для нашей связки:

apt-get install nginx php5-cli php5-common php5-cgi php5-fpm fcgiwrap mysql-server php5-mysql php5-gd php5-apc

Так же можно поставить если вам нужно следующие пакеты

apt-get install memcached php5-memcached sqlite php5-sqlite

В конфиг /etc/nginx/nginx.conf добавим в секцию http строку для использования кеша нашим FastCGI:

fastcgi_cache_path /tmp/fcgi-cache/ levels=1:2   keys_zone=one:10m;

Все остальное уже майнтейнерами подготовлено за нас.

Настройка шаблонов

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

mkdir /etc/nginx/template

И слаживаем в нее файлики с шаблонами. Шаблоны взяты отсюда
default

# Типовые настройки общие для всех доменов (если не захочется экзотики)
##
index index.html index.php;
# Реализуем "красивые" ссылки для Drupal (и для ряда других CMS)
location / {
   try_files $uri $uri/ /index.php?q=$uri&$args;
}

# Закрываем доступ к файлами .htaccess и .htpassword
location ~ /\.ht {
   deny all;
}
location = /favicon.ico {
   log_not_found off;
   access_log off;
}
location = /robots.txt {
   allow all;
   log_not_found off;
   access_log off;
}

Шаблон /etc/nginx/templates/php

# Передаём обработку PHP-скриптов PHP-FPM
location ~ \.php$ {
   try_files $uri =404;
#PHP-FPM слушает на Unix сокете
#он должен совпадать с путем который слушает пулл php-fpm в файле /etc/php5/fpm/pool.d/www .conf в параметре listen
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
#Использовать cache зона one
    fastcgi_cache  one;
#Помещать страницу в кеш, после 3-х использований. Меньшее число вызвало у меня труднообъяснимые глюки
# на формах регистрации
    fastcgi_cache_min_uses 3;
#Кешировать перечисленные ответы
    fastcgi_cache_valid 200 301 302 304 5m;
#Формат ключа кеша - по этому ключу nginx находит правильную страничку
    fastcgi_cache_key "$request_method|$host|$request_uri";
#Если не использовать эту опцию - то в форумах все будут сидеть под именем первого вошедшего на форум
# fastcgi_hide_header "Set-Cookie";
#Этот запрос заставит nginx кешировать все что проходит через него
# fastcgi_ignore_headers "Cache-Control" "Expires";
    fastcgi_index  index.php;
#  fastcgi_intercept_errors on; # только на период тестирования
# Включаем параметры из /etc/nginx/fastcgi_param
    include fastcgi_params;
# Путь к скрипту, который будет передан в php-fpm
    fastcgi_param       SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_ignore_client_abort     off;
}

perlcgi

#Все скрипты заканчивающиеся на pl и cgi
location ~ \.(pl|cgi)$
{
   #Не сжимаем скрипты
   gzip off;
   try_files $uri =404;
   #Передаем скрипты на обработку fcgiwrap
   fastcgi_pass unix:/var/run/fcgiwrap.socket;
   # Используем стандартные параметры
   include /etc/nginx/fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_ignore_client_abort off;
}
#Замена апачевской ScriptAlias
location /cgi-bin/ {
   gzip off;
   try_files $uri =404;
   root /var/www/;
   fastcgi_pass unix:/var/run/fcgiwrap.socket;
   include /etc/nginx/fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_ignore_client_abort off;
}

phpmyadmin

location /phpmyadmin {
   root /var/www/pma;
   index index.php index.html index.htm;
   location ~ ^/phpmyadmin/(.+\.php)$ {
   try_files $uri =404;
   root /var/www/pma/;
   fastcgi_pass   unix:/var/run/php5-fpm.sock;
   #fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   include /etc/nginx/fastcgi_params;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
   root /var/www/pma/;
}

Подключаем сайт

Создаем конфигурацию сайта. У меня это сайт который раньше работал под apache2, на котором я тестирую разрабатываемые для Drupal 7 модули.
/etc/nginx/sites-available/dp7

server {
#Название сервера по которому мы обрабатываем именно этот сайт при запросе из браузера
server_name dp7.lo;
   # Папка с контентом сайта (удобно, когда совпадает с именем домена)
   root /var/www/dp7.lo/;
   # Настройка логов, каждому виртуальному домену - свой лог
   access_log /var/log/nginx/dp7-access.log;
   error_log /var/log/nginx/dp7-error.log;

   # Подключаем все шаблоны для проверки, на реальных хостах будем использовать только нужные.
   include /etc/nginx/templates/default;
   include /etc/nginx/templates/php;
   include /etc/nginx/templates/phpmyadmin;
   include /etc/nginx/templates/perlcgi;
}

Создаем на него симлинк.

ln -s /etc/nginx/sites-available/dp7.lo /etc/nginx/sites-enabled/ 

Перезапускаем/запускаем php-fpm и nginx.

systemctl reload php5-fpm.service
systemctl reload ngixn.service

Или если у вас не systemD, классическим методом.

service php5-fpm restart
service nginx restart

Ну и не забываем добавить запись о сайте в /etc/hosts:

127.0.0.1 dp7.lo

Проверяем в браузере введя адрес http://имя сайта

Категория: 
Share/Save

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!