====== Переход с Apache на Nginx ======
Что это нам даст? Заметно снизит нагрузку на ЦПУ. Получится так сказать апгрэйд CPU на Вашем сервере.
Установим **nginx** из официального репозитария **NGINX**.
touch /etc/yum.repos.d/nginx.repo
mcedit /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
И сохраняем файл.
Обновим информацию о пакетах.
yum update
Установим веб-сервер
yum install nginx
Добавим его в автозагрузку
chkconfig --level 345 nginx on
Установим backend php-fpm
yum install php-fpm
Добавим php-fpm в автозагрузку
chkconfig --level 345 php-fpm on
Остановим веб-сервер apache
/etc/init.d/httpd stop
Создадим самоподписанный сертификат для nginx
mkdir /etc/nginx/conf.d/ssl
cd /etc/nginx/conf.d/ssl
openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -x509 -days 500 -subj /C=UA/ST=Kiev/L=Kiev/O=Companyname/OU=User/CN=etc/emailAddress=admin@my_site.com -out ca.crt
Дабы не вводить все параметры, мы использовали опцию -subj
Параметры не обязательны, но для порядка лучше заполнить своими данными
**С** Двухсимвольный код страны (Country)
**ST** Название региона/области/края/республики/… (State Name)
**L** Название города/поселка/… (Locality Name)
**O** Название организации (Organization Name)
**OU** Название отдела (Organization Unit)
**CN** Имя сертификата, при создании серверных сертификатов используется доменное имя сайта (Common Name)
**emailAddress** почтовый адрес (E-mail address)
Настроим php-fpm
По умолчанию менеджер процессов слушает
listen = 127.0.0.1:9000
Я настроил его работать через сокет.
mcedit /etc/php-fpm.d/www.conf
Под закомментированной строчкой **;listen = 127.0.0.1:9000** добавим:
listen = /tmp/php-worker-socket
Запустим php-fpm
/etc/init.d/php-fpm start
Должен сформироваться файл сокета
ls -l /tmp/
srw-rw-rw- 1 root root 0 Фев 27 20:54 php-worker-socket
Настроим теперь nginx
mcedit /etc/nginx/nginx.conf
worker_processes CPU*2;
Ставим значение кол-во CPU умноженное на 2.
Можете сменить владельца файлов в веб-дирректории
user nginx;
заменить на
user apache;
В секцию http этого конфига, добавим следующие параметры.
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
Очищаем папку **/etc/nginx/conf.d** от всех файлов, оставляем только дирректорию **ssl**.
Создадим два файла для хостов админки и личного кабинета
touch /etc/nginx/conf.d/admin.conf
touch /etc/nginx/conf.d/stat.conf
**Вирт. хост админки**
server {
listen *:80;
server_name admin.lan;
rewrite ^ https://$server_name/$1 permanent;
}
server {
listen *:443;
server_name admin.lan;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/conf.d/ssl/ca.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/ca.key;
access_log off;
error_log /var/log/nginx/error.log;
root /var/www/mikbill/admin;
index index.php;
location / {
root /var/www/mikbill/admin;
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~* ^/(app/|res/balanse/|res/convert/|res/convert2/|res/convert3/|res/history/|res/pcq/|res/shapers/|res/sms/|res/smspilot/|res/smsukr/|res/ssh/|res/w.qiwi.ru/|sys/scripts/|sys/updates/).*\.(xml|sh|php|log|sql|txt)$ {deny all;}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/php-worker-socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/mikbill/admin/$fastcgi_script_name;
}
}
Где есть **admin.lan** - имя Вашего домена или ip-адрес.
**Вирт. хост личного кабинета:**
server {
listen *:80;
server_name stat.lan;
rewrite ^ https://$server_name/$1 permanent;
}
server {
listen *:443;
server_name stat.lan;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/conf.d/ssl/ca.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/ca.key;
access_log off;
error_log /var/log/nginx/error.log;
root /var/www/mikbill/stat;
index index.php;
location / {
root /var/www/mikbill/stat;
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~* ^(/app/|/sys/).*\.(php|sh|xml|log|txt)$ {deny all;}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/php-worker-socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/mikbill/stat/$fastcgi_script_name;
}
}
Где есть **stat.lan** - имя Вашего домена или ip-адрес.
Сделаем перезапуск nginx
/etc/init.d/nginx restart
Если всё работает незабываем убрать apache из автозагрузки.
chkconfig httpd off
В настройках nginx приведён минимум настроек, конфиги правим сами под свои нужды.
Если используете rewrite, рекомендуется использовать доменные имена.