Установка и настройка NGINX + PHP (php-fpm) на Linux сервере

Добрый день! Я собираюсь отказаться от Apache и первый раз установить на сервере Nginx в связке с php-fpm. Пожалуйста опубликуйте подробную инструкцию. И Ваше мнение - правда ли nginx + php-fpm работает намного быстрее чем Apache?
спросил 21 мая 2016 Дмитрий Седов в категории Сис. администрирование
1 ответ
Лучший ответ

Добрый день!

Да, на мой взгляд, Nginx в несколько раз быстрее сервера Apache. Некоторые возразят - ведь Apache можно оптимизировать и он тоже станет быстрым. Это правда, но, не надо забывать, что и Nginx можно очень сильно разогнать. Подробно про оптимизацию я обязательно напишу отдельную статью.

Немного теории о Nginx + php-fpm

В веб-сервере Apache php является подключаемым модулем, такая связка работает медленно и потребляет много ресурсов. Из-за этой неудачной архитектуры, Apache обычно не может обработать более 200-300 запросов в секунду даже на очень мощном сервере. В Nginx же применена другая архитектура - сам веб-сервер Nginx обрабатывает только запросы на статику (картинки, css и прочее), а выполнение php отдает другому программному серверу - php-fpm. Php-fpm (FastCGI Process Manager) - это полностью самостоятельное программное обеспечение, его можно установить на одном сервере с Nginx (для небольших проектов), либо вынести на отдельный сервер. Большие проекты обычно обслуживают по несколько серверов с Nginx, php-fpm и базами данных. 

Заменяя сервер Apache на Nginx + php-fpm, вы сможете ускорить обработку запросов пользователей и сильно сэкономить на "железе". Веб проект с посещаемостью до 10000 уникальных посетителей в день вполне сможет жить на самом дешевом виртуальном сервере от DigitalOcean за 5$ в месяц. Кстати, если вы перейдете по этой ссылке - DigitalOcean, вы получите 10$ при регистрации, а это 2 месяца использования виртуального сервера. Никаких дополнительных условий при этом там нет.

Но перейдем к делу. Я буду описывать процесс установки и настройки на примере CentOS 6.x, но он не сильно будет отличаться и для других дистрибутивов Linux.

Установка Nginx: 

Автор считает, что эти материалы могут вам помочь:
  • /var/run/php5-fpm.sock уже должен присутствовать на сервере? в ubuntu 16.04 не нашел такого файла в /var/run
  • Эмулятор Андроид, установка и настройка в Windows
  • Установка MySQL на Linux: подробная инструкция
  • Настройка айфона, нужна инструкция
  • 1. Установка репозитария Nginx: в стандартных дистрибутивах Linux по умолчанию нет дистрибутива Nginx, поэтому добавим его в систему.

    vi /etc/yum.repos.d/nginx.repo

    Далее нажмите i для перехода в режим редактирования редактора vi и вставьте:

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1

    Далее нажмите ":wq" и Enter для сохранения и выхода. Все, теперь Nginx доступен для автоматической установки через менеджер пакетов yum. Если вы используете другой дистрибутив Linux - перейдите на эту страницу для получения инструкций именно для вашей системы.

    2. Установка Nginx из репозитария: теперь просто выполните команду установки.

    yum install nginx

    Установка php-fpm:

    Php-fpm доступен по всех современных дистрибутивах по умолчанию, поэтому просто выполните установку:

    yum install php-fpm

    При этом будут установлен сам сервер и все вспомогательные пакеты. Если что-то не получается, можно собрать php-fpm из исходников самостоятельно, для подробных инструкций перейдите сюда.

    Настройка и запуск Nginx + php-fpm:

    1. Начнем с php-fpm: откройте файл конфигурации

    vi /etc/php-fpm.d/www.conf

    и пропишите там работу через сокет (так будет работать быстрее):

    listen = /var/run/php5-fpm.sock

    измените существующую строчку "listen =" или добавьте новую и удалите старую.

    2. Теперь перейдем к Nginx: создайте файл конфигурации для своего первого сайта (site1 замените на название сайта, хотя будет работать и так)

    vi /etc/nginx/conf.d/site1.conf

    Ниже приведена минимальная конфигурация, можете просто ее скопировать. Все что надо заменить, выделено красным. В данной конфигурации настроена отдача статических файлов и доступ к одному php-файлу - index.php. Все современные CMS запускаются одним файлом, поэтому такая конфигурация подойдет для большинства задач. Если вам надо запускать другие php-файлы, пропишите их отдельно. В данной конфигурации файлы сайта надо положить в папку /home/mysite/public_html/

    server {
            listen [ip адрес сервера]:80;
            server_name voprosoff.net;
            resolver 8.8.8.8;
            error_log /var/log/nginx/voprosoff_net_error.log warn;
            root /home/voprosoff_net/public_html;
            access_log /var/log/nginx/voprosoff_net-access.log;
            charset utf-8;
            index index.php;
            location ~ .*(gif|jpg|jpeg|png|ico|swf|txt|pdf|doc|docx|exe|xls|xlsx|strings|zip|rar|7z)$ {
                expires 1y;
            }
            
            location ~ .*(html|htm|js|css)$ {
                expires 1y;
            }

            location ~ ^/index.php {
                    fastcgi_pass unix:/var/run/php5-fpm.sock;
                    fastcgi_param SCRIPT_FILENAME /home/voprosoff_net/public_html/index.php;
                    include /etc/nginx/fastcgi_params;
                    fastcgi_param SCRIPT_NAME /index.php;
            }    

    }    

    Теперь положите файлы вашего первого сайта в папку /home/site1/public_html/ и мы готовы к запуску.

    3. Запуск nginx + php-fpm:

    service nginx start

    service php-fpm start

    Если вы все сделали правильно и нигде не ошиблись, результат будет такой:

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

    Я всегда рад помочь!

    Удачи вам!

    Это будет полезно для вас:
  • Установка и настройка MariaDB на CentOS - подробная инструкция
  • Простая установка Webmin и Virtualmin на любом Linux
  • Nginx или Apache: что выбрать для веб-сервера?
  • Установка и настройка GSM сигнализации (часть 3)
  • Установка и настройка GSM сигнализации (часть 2)
  • Установка и настройка GSM сигнализации (часть 1)
  • Установка CentOS: подробная инструкция с картинками
  • Выбор и установка сирены для GSM сигнализации

  • Каждый раз, когда вы делитесь этой статьей в социальной сети, ее автор становится немного счастливее! Пожалуйста нажмите на одну из кнопок выше! ответил 21 мая 2016 Эксперт Дмитрий (4,134 баллов)
    Спасибо за статью. Но у меня вопрос: а mysql для этой связки не нужен? Сайты, кроме html страничек используют для хранения данных БД, а тут ни слова о ней.
    оставил комментарий 08 сентября 2016 Александр
    Добрый день! Да, большинство веб-приложений используют базу данных MySQL, у нас есть статья как ее установить: https://voprosoff.net/1349/ Я не стал писать о MySQL в этой статье, так как это уже несколько другая задача.
    оставил комментарий 09 сентября 2016 Эксперт Дмитрий