Настройка связки nginx-mysql-php для установки CMS
Описывается типичная настройка сервера для использования движков на php, таких как wordpress, modx, koken и многих других. В качестве веб-сервера используется nginx, операционная система - любая debian-based. Протестировано на Ubuntu 14.04 x64.
Установка Nginx
$ sudo apt-get update
$ sudo apt-get install nginx
Проверяем в браузере http://<OUR IP>
Должна появиться заставка Welcome to Nginx! Как установить свежий nginx из PPA - в моей заметке
Установка и первоначальная настройка MySql для продакшн-сервера
Теперь у нас есть веб-сервер, нам нужно установить MySQL, систему управления базами данных.
Устанавливаем простой командой
$ sudo apt-get install mysql-server
У вас будет запрошен root (административный) пароль для системы MySQL.
MySQL теперь установлен, но его конфигурация не завершена.
Первое, мы должны дать команду для генерации структуры директорий, это нужно для хранения баз и информации. Скрипт mysql_install_db предназначен только для создания новых таблиц привилегий MySQL.
$ sudo mysql_install_db
Далее, нам нужно запустить простой скрипт для обезпечения безопастности MySQL, который запросит у нас разрешение модифицировать некоторые настройки по-умолчанию. Запускаем скрипт командой:
$ sudo mysql_secure_installation
У вас будет запрошен пароль root, который мы ввели во время инсталляции. Далее, программа спросит, хотите ли вы изменить пароль. Если пароль для root выбран правильный, надежный пароль, тогда его менать не нужно, нажимаем "N" и "ENTER" Далее, нам будет предложено удалить тестовых пользователей и тестовые базы данных. Нужно просто нажимать "ENTER", чтобы удалить опасные настройки по умолчанию. Как только скрипт будет завершен, установку MySQL можно считать оконченной.
Создадим базу данных на примере Modx. Созадние баз для других CMS абсолютно аналогично.
Заходим в консоль MySQL (mysql -u root -p
) и пишем:
CREATE DATABASE modx;
Теперь нужно создать пользователя, для нашей базы. Там же в консоли
CREATE USER 'modxuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON modx.* To 'modxuser'@'localhost' IDENTIFIED BY 'password';
Внимание! Это не тот же пароль, что выше для root, а новый.
Выходим из консоли mysql командой exit
.
Установка PHP
Теперь у нас установлен nginx, чтобы обслуживать веб-страницы, и MySQL для хранения и управления данными. Но нам нужно еще что-то, чтобы соеденить эти две части и создать динамический контент. Тут нам поможен PHP.
Посколько nginx не умеет нативно обрабатывать php запросы (как и многие другие веб-серверы), нам нужно установить php5-fpm, что расшифровывается как "fastCGI process manager". Он интерпретирует php-запросы и затем передает результат веб-серверу.
Кроме этого, нужно установить модуль, который позволит взаимодействовать с mysql.
$ sudo apt-get install php5-fpm php5-mysql php5-curl
Configure the PHP Processor
Теперь у нас есть установленный компонент php, но нужно произвести небольшую настройку для обеспечения безопастности.
Откроем следующий файл, используя root-привелегии
$ sudo nano /etc/php5/fpm/php.ini
Здесь нам нужно найти параметр cgi.fix_pathinfo. Обычно он закоментирован с точкой-запятой (;) и по умолчанию установлен в 1.
Это чрезвычайно небезопасно установка. Уязвимость состоит в том, что пользователь может иметь возможность выполнить запрос PHP таким способом, который обычно был бы ему запрещен.
Раскоментируем этот параметр и установим его в '0':
cgi.fix_pathinfo=0
Заодно установим правильную тайм-зону:
date.timezone = Europe/Kiev
После этого сохраняем и закрываем файл.
Теперь, нужно перезапустить php-процессор командой
$ sudo service php5-fpm restart
Это применит внесенные изменения.
Конфигурация Nginx для работы с PHP
Удаляем дефолтный сайт
$ rm /etc/nginx/sites-enabled/default
Создаем в директории /etc/nginx/sites-available/
новый сайт, например /etc/nginx/sites-available/glpi
Конфигурация может отличаться для разных CMS, но шаблон примерно такой:
server {
listen 80;
server_name glpi;
charset utf-8;
access_log /var/log/nginx/nginx.access.glpi.log;
error_log /var/log/nginx/nginx.error.glpi.log;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
root /path/to/our/cms;
index index.php index.html index.htm;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
}
Рабочий конфиг для wordpress (ubuntu 14.10):
server {
listen 80;
server_name wordpress.domen.com;
root /home/swasher/wordpress;
index index.php index.html index.htm;
charset utf-8;
access_log /var/log/nginx/nginx.access.wordpress.log;
error_log /var/log/nginx/nginx.error.wordpress.log;
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Правим пути. Если у сервера нет FQDN, то ставим server_name <local ip>;
Так же нужно привести к общему виду порт или сокет, который слушает php5-fpm. Иначе будет ошибка в error.log:
2013/10/31 15:52:01 [error] 26394#0: *1 connect() failed (111: Connection refused)
while connecting to upstream, client: **.**.**.**,
server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000",
host: "somehost.com"
Вариантов два:
Первый
/etc/php5/fpm/pool.d/www.conf
; listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
/etc/nginx/sites-available/my_site.conf
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
Второй
/etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
; listen = 127.0.0.1:9000
/etc/nginx/sites-available/my_site.conf
fastcgi_pass unix:/var/run/php5-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
У меня заработал только второй.
Включаем конфигурацию
Теперь нужно подключить файл конфигурации
$ cd /etc/nginx/sites-enabled/
$ ln -s ../sites-available/lgpi lgpi
Рестарт демонов php5-fpm и nginx
$ service php5-fpm restart
$ servece nginx restart
Проверяем
Проверяем, что PHP работает - в корне сервера созадем файл info.php
<?php
phpinfo();
?>
и браузером смотрим http://server_domain_name_or_IP/info.php
Porfit!
Теперь осталось скачать нужный пакет с CMS, распаковать его в корень нашего сайт, и далее следовать инструкции
из настройки CMS, чаще всего - перейти браузером по адресу http://server_domain_name_or_IP
Comments !