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

  • billing/howto/nginx.txt
  • Последние изменения: 4 лет назад
  • (внешнее изменение)