Переход с 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, рекомендуется использовать доменные имена.