Single Blog

Установка nginx + php-fpm ч2. Практика

01.11.2016, Автор: 0 комментаиев

Итак у нас есть чистый ВДС сервер ( в нашем случае виртуализация KVM) под управлением Debian 7. Подключаемся по SSH и при ступаем к установке и настройке

Апдейт нашей системы

Рекомендовано обновить список пакетов и установить все необходимы обновления прежде, чем начнем установку Nginx

apt-get update
apt-get upgrade -y

Далее нам нужен редактор. Можно использовать стадартный vim но мне больше по душе Midnight Commander . Устанавливаем его

apt-get -y install mc

И срузу установим его редактором по-умолчанию

update-alternatives --config editor

Из списка выбираем /usr/bin/mcedit

Установка MySQL

aptitude install mysql-server mysql-client

Установка nginx

Устанавливаем nginx (в Debian он установлен по умолчанию, но все же)

aptitude install nginx

Вводим в браузере ip нашего сервера ( ifconfig eth0 | grep inet | awk '{ print $2 }' )  и видим заветное «Welcome to nginx!«, значит все в порядке. идем дальше

Останавливаем nginx:

/etc/init.d/nginx stop

Прежде всего изменим пользователя, от имени которого работает nginx, в Debian/Ubuntu веб-сервер работает от пользователя www-data и чтобы избежать в будущем возможных коллизий с правами доступа приведем строку к виду:

Настройка nginx

Теперь перейдем к настройке. Для этого перейдем в папку /etc/nginx и откроем файл nginx.conf, мы будем перечислять настройки в порядке их нахождения в файле, если данной опции нет — ее следует добавить.

mcedit /etc/nginx/nginx.conf

Прежде всего изменим пользователя, от имени которого работает nginx, в Debian/Ubuntu веб-сервер работает от пользователя www-data и чтобы избежать в будущем возможных коллизий с правами доступа приведем строку к виду:

user www-data;

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

Просмотреть доступные процессорные ядра можно так:
worker_processes  3;

С с версий 1.3.8 и 1.2.5. поддерживается параметр auto

Далее правим секцию events

events {
 worker_connections 1024;
 use epoll;
}
worker_connections
epoll - Метод обработки сосединений

Далее переходим в секцию http { 

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_names_hash_bucket_size 2048;
server_tokens off;
sendfile
tcp_nopush
tcp_nodelay
types_hash_max_size
server_tokens
include /etc/nginx/mime.types;
default_type application/octet-stream;
default_type application/octet-stream;

Думаю, здесь дальше понятно что за секция Logging Settings  (логирование).

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
access_log

Далее переходим в секцию Gzip Settings

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable
gzip_vary on
gzip_proxied any
gzip_comp_level 6
gzip_buffers 16 8k
gzip_http_version 1.1
gzip_types

Полный конфиг файл nginx

user www-data;
worker_processes 3;
pid /var/run/nginx.pid;

events {
        worker_connections 768;
        use epoll;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_names_hash_bucket_size 2048;
        server_tokens off;

        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;


        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # nginx-naxsi config
        ##
        # Uncomment it if you installed nginx-naxsi
        ##

        #include /etc/nginx/naxsi_core.rules;

        ##
        # nginx-passenger config
        ##
        # Uncomment it if you installed nginx-passenger
        ##

        #passenger_root /usr;
        #passenger_ruby /usr/bin/ruby;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

Переходим к настройке виртуальных хостов

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

Мне привычнее все хранить в директории /home

Создаем нового пользователя:
useradd user -b /home/ -m -U
Установим пароль:
passwd user
Создаем дирректории необходимые для публикации сайта:
mkdir -p -m 755 /home/user/www
mkdir -p -m 754 /home/user/logs

Дадим права пользователю на созданные дирректории:
chown -R example: /home/user/www/
chown -R example: /home/user/logs/

Добавляем в группу:
usermod -a -G user www-data

mkdir /home/user/www/sportlife.cf

Далее создаем конфигурационный файл для нашего сайта

touch /etc/nginx/sites-available/sportlife.cf.conf
server {
  listen 80;

  server_name sportlife.cf;
  charset utf-8;

  root /home/user/www/sportlife.cf;
  index index.html index.htm index.php;

  access_log /home/user/logs/sportlife.cf_access.log;
  error_log /home/user/logs/sportlife.cf_error.log;
}

server {

  listen 80;

  server_name www.sportlife.cf;
  rewrite ^(.*) http://sportlife.cf$1 permanent;
}
Скрытый текст

Сохраняем данную конфигурации и подключаем ее к nginx через симлинк:

ln -s /etc/nginx/sites-available/sportlife.cf.conf /etc/nginx/sites-enabled/

Проверяем конфигурацию и отдаем команду ее перечитать:

nginx -t
service nginx reload

В корневой директории сайта создадим тестовую страницу index.html с содержанием:

I'm a champion,baby!

Открываем наш сайт в браузере и видим нашу страницу. Виртал хост работает. Едем дальше

Установка PHP

Для работы с веб-приложениями нужна поддержка скриптового языка PHP. Nginx поддерживает работы с FastCGI, но собственного процесс менеджера у него нет. Для этой цели используется PHP-FPM

aptitude install php5-cli php5-common php5-mysql php5-suhosin php5-gd php5-fpm php5-cgi php5-fpm php-pear php5-mcrypt php5-imagick -y

Далее переходим к настройке конфигурации PHP-FPM. Сперва открываем файл /etc/php5/fpm/php.ini вносим некоторые нужные нам правки

cgi.fix_pathinfo=0
cgi.fix_pathinfo=0
post_max_size = 200M
post_max_size
upload_max_filesize = 50
upload_max_filesize

Взаимодействие

Далее необходимо научить nginx  взаимодействовать с PHP-FPM. Для этого нужно добавить настройки в файл виртуального хоста, чтобы перенаправлять (проксировать) запросы на динамического содержимого на FastCGI-шлюз.

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

Создадим директорию с шаблонами и создадим в ней наш файл-шаблон:

mkdir /etc/nginx/templates
touch /etc/nginx/templates/php-fpm.conf

Далее добавляем в шаблон

location ~ \.(php)$ {
   try_files $uri =404;
   fastcgi_pass unix:/var/run/php5-fpm.sock;
   fastcgi_index index.php;
   include fastcgi_params;
   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}
location
try_files
fastcgi_pass unix
fastcgi_index

Теоретически этого уже достаточно для работы с php содержимым. Но мы добавим еще пару блоков

Запрет на выполнение параметров из файлов .htaccess (к примеру если сайт работал ранее на apache, он может содержать данный файл в своей корневой директории)

location ~ /\.ht {
   deny all;
}

Также следует настроить кэширование статического содержимого:

location ~* \.(gif|jpeg|jpg|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|bin|exe|dll|deb|cur)$ {
  expires 168h;
}
Кэширование

Также зададим кэширование для скриптов и стилей. Установи время жизни для них в 3 часа

location ~* \.(css|js)$ {
  expires 180m;
}

Далее возвращаемся в файл виртуального хоста и в конец секции server добавляем строку для подключения шаблона

include /etc/nginx/templates/php-fpm.conf;

Проверяем конфигурацию nginx и релодим

nginx -t
service nginx reload
service php-fpm restart

Создаем страницу info.php для теста php в  корневой директории нашего сайта с содержанием:

Переходим в браузере на имя_домена/info.php  и видим страницу с информацией PHP

Artem Porubay