Web-сервер на Linux (Nginx + PHP-FPM)
Установка и настройка Web-сервера на Linux (Nginx + PHP-FPM)
Большинство людей, использующих Linux, занимаются разработкой. Ну и тут конечно же не обойтись без web-сервера. В этой статье я расскажу, как быстро установить веб-сервер, чтобы он заработал. А если у вас есть желание и время, то дальше мы попробуем его немного "донастроить".
Установка
Для начала давайте установим пакеты, которые нам потребуются, а именно:
- nginx - сам веб-сервер
- php-fpm - патч для PHP, для использования PHP как FastCGI процесса в высоконагруженных системах
- php5-mysql - работа с mysql из php
- mysql-server - БД Mysql
- phpmyadmin - web-интерфейс для работы с mysql
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 у вас должна открыться эта страница.
Остались вопросы? Задвайте!