Web-сервер на Linux (Nginx + PHP-FPM)
TimeWeb

Web-сервер на Linux (Nginx + PHP-FPM)

Установка и настройка Web-сервера на Linux (Nginx + PHP-FPM)

Большинство людей, использующих Linux, занимаются разработкой. Ну и тут конечно же не обойтись без web-сервера. В этой статье я расскажу, как быстро установить веб-сервер, чтобы он заработал. А если у вас есть желание и время, то дальше мы попробуем его немного "донастроить".

Установка

Для начала давайте установим пакеты, которые нам потребуются, а именно:


sudo apt-get install nginx nginx-extras
sudo apt-get install php5-cli php5-common php5-gd
sudo apt-get install php5-fpm php5-cgi php-pear php5-mcrypt
sudo apt-get install php5-mysql mysql-server phpmyadmin

Далее нам необходимо настроить Nginx и PHP-FPM. Начнем с последнего.

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

Прежде всего нам необходимо устранить проблему с безопасностью. Откройте файл "/etc/php5/fpm/php.ini":

sudo nano /etc/php5/fpm/php.ini
Далее найдите строку ";cgi.fix_pathinfo = 1" и приведите её к виду:
cgi.fix_pathinfo = 0

Сохраняем файл: нажимаем F2 или Ctrl+X и отвечаем на вопрос "Сохранить изменения или нет?" буквой "Y".

Далее открываем для редактирования файл "/etc/php5/fpm/pool.d/www.conf", и в нем указываем, какие файлы будут выполняться интерпретатором PHP. Ищем параметр "security.limit_extensions" и приводим его к виду:

security.limit_extensions = .php .php3 .php4 .php5
В этом же файле правим параметр "listen": указываем, через какой файл будут связаны "Nginx" и "PHP-FPM" (сокет). Также запрещаем кому-попало писать в сокет:
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Сохраняем изменения (дальше я не буду напоминать, что файлы, которые вы правите, надо сохранять) и перезапускаем "PHP-FPM":

sudo service php5-fpm restart

Обязательно давайте убедимся, что права доступа к сокету выставлены корректно, а именно они такие:

srw-rw---- 1 www-data www-data 0 May  2 16:36 /var/run/php5-fpm.sock

Проверить права можно командой:

ls -la /var/run/php5-fpm.sock

Настройка Nginx

Давайте попробуем настроить конфигурацию сайта example.com. Создадим конфигурационный файл для него:

sudo touch /etc/nginx/conf.d/example.com.conf

Открываем конфигурационный файл сайта example.com.conf для редактирования:

sudo nano /etc/nginx/conf.d/example.com.conf

Содержимое файла будет следующим:


server {
    listen   80;            # какой порт слушает
    root /var/www/example.com/www; # корневая директория

    access_log  /var/log/nginx/example.com.access.log;  #расположение логов данного хоста
    error_log  /var/log/nginx/example.com.error.log;

    server_name example.com example.com;

    location / {
        index index.php index.html index.htm;
    }

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

Перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»

Теперь нам надо создать файл с настройками пернаправления. Создадим и откроем его:


sudo touch /etc/nginx/common/php-fpm
sudo nano /etc/nginx/common/php-fpm

Содержимое будет таким:


include fastcgi_params;
fastcgi_split_path_info      ^(.+?\.php)(/.*)?$;
# Вместо переменной "$document_root" можно указать адрес к корневому каталогу
# сервера и это желательно (см. https://wiki.nginx.org/Pitfalls)
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_script_name;
# См. https://trac.nginx.org/nginx/ticket/321
set    $path_info    $fastcgi_path_info;
fastcgi_param  PATH_INFO    $path_info;
# Указание дополнительных переменных окружения PHP
fastcgi_param  SERVER_ADMIN    admin@example.com;
fastcgi_param  SERVER_SIGNATURE  nginx/$nginx_version;
fastcgi_index  index.php;

Далее нам надо прописать наш сайт в файле hosts. откроем этот файл:

sudo nano /etc/hosts

И добавим в него строчку:

127.0.0.1       exapmle.com

Теперь осталось перезапустить сервисы:


sudo service nginx restart
sudo service php5-fpm restart

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

Создание директорий сайта

Как вы помните, выше мы определяли, что сайт наш должен находиться по адресу "/var/www/example.com/www". Давайте там его и расположим. Создадим файл index.php:


sudo mkdir -p /var/www/example.com/www
nano /var/www/example.com/www/index.php

Содержание файла будет примерно следующим:


<html>
   <head>
     <meta http-equiv="content-type" content="text/html; charset=utf-8">
         <title>Это сайт example.com!</title>
   </head>
   <body>
       <h1>Hello‚ друг! Ты попал на example.com!</h1>
       <?php echo "А это уже php!"; ?>
   </body>
</html>

Ну вот! Теперь, если вы все сделали по инструкции, то по адресу https://exapmle.com у вас должна открыться эта страница.

Остались вопросы? Задвайте!