К установленному веб серверу Apache2 в хостинг панели ISPConfig 3 установленной по инструкции мы сегодня установим веб сервер Nginx для значительного ускорения работы сайтов. Веб сервер Nginx берет на себя всю работу со статическими файлами, отдавая обработку PHP скриптов веб серверу Apache2, за счет чего мы и получаем значительное ускорение сайтов на сервере.
Данная конфигурация удобна еще тем, что позволяет для слабо нагруженных сайтов использовать стандартную конфигурацию описанную в данной инструкции, а для высоко нагруженных проэктов подключить вместо веб сервера Apache2 PHP-FPM.
Приступаем к установке
Переводим работу веб сервера Apache2 на 82 порт, так как на 80 порту будет работать Nginx, для этого нам необходимо заменить 80 порт на 82 командой:
sed -i 's/80/82/g' /etc/apache2/ports.conf
либо вручную с помощью текстового редактора:
vi /etc/apache2/ports.conf
было:
... NameVirtualHost *:80 Listen 80 ...
стало:
... NameVirtualHost *:82 Listen 82 ...
Заменяем порт 80 на порт 82 самой панели ISPConfig 3, для этого можем выполнив команду:
sed -i 's/:80/:82/g' /etc/apache2/sites-available/ispconfig.conf
либо изменить руками в текстовом редакторе:
vi /etc/apache2/sites-available/ispconfig.conf
было:
... NameVirtualHost *:80 ...
стало:
... NameVirtualHost *:82 ...
Заменяем все домены на сервере Apache2 порт 80 на порт 82, для этого проверяем какие у нас заведены домены выполнив команду:
ls -l /etc/apache2/sites-enabled/* lrwxrwxrwx 1 root root 39 Янв 11 2014 /etc/apache2/sites-enabled/000-apps.vhost -> /etc/apache2/sites-available/apps.vhost lrwxrwxrwx 1 root root 26 Янв 11 2014 /etc/apache2/sites-enabled/000-default -> ../sites-available/default lrwxrwxrwx 1 root root 43 Янв 11 2014 /etc/apache2/sites-enabled/000-ispconfig.conf -> /etc/apache2/sites-available/ispconfig.conf lrwxrwxrwx 1 root root 44 Янв 11 2014 /etc/apache2/sites-enabled/000-ispconfig.vhost -> /etc/apache2/sites-available/ispconfig.vhost lrwxrwxrwx 1 root root 52 Янв 12 2014 /etc/apache2/sites-enabled/100-email.server.loc.vhost -> /etc/apache2/sites-available/email.server.loc.vhost lrwxrwxrwx 1 root root 51 Янв 12 2014 /etc/apache2/sites-enabled/100-sams.server.loc.vhost -> /etc/apache2/sites-available/sams.server.loc.vhost lrwxrwxrwx 1 root root 51 Июн 27 2014 /etc/apache2/sites-enabled/100-test.server.loc.vhost -> /etc/apache2/sites-available/test.server.loc.vhost lrwxrwxrwx 1 root root 46 Июл 2 2014 /etc/apache2/sites-enabled/900-server.loc.vhost -> /etc/apache2/sites-available/server.loc.vhost
В ответе сервера видим 000* это системные конфигурационные файлы кроме 000-default, а 100*.vhost и 900*.vhost это конфигурационные файлы доменов на сервере добавленные через панель управления хостингом ISPConfig 3, в них то и необходимо внести изменения.
Заменяем во всех 100*.vhost и 900*.vhost 80 порт на 82, не трогая системные файлы панели, а только добавленные домены выполнив команды:
sed -i 's/:80/:82/g' /etc/apache2/sites-enabled/100*.vhost sed -i 's/:80/:82/g' /etc/apache2/sites-enabled/900*.vhost
было в каждом файле
... <VirtualHost *:80> ...
стало:
... <VirtualHost *:82> ...
Также заменяем 80 порт на 82 в конфигурационном файле default выполнив команду:
sed -i 's/:80/:82/g' /etc/apache2/sites-enabled/000-defau*
было:
... <VirtualHost *:80> ...
стало:
... <VirtualHost *:82> ...
Вносим изменения в хостинг панель ISPConfig 3
Копируем главный конфигурационный файл и файл генератора vhost файлов выполнив команды:
cp /usr/local/ispconfig/server/conf/apache_ispconfig.conf.master /usr/local/ispconfig/server/conf-custom/ cp /usr/local/ispconfig/server/conf/vhost.conf.master /usr/local/ispconfig/server/conf-custom/
Заменяем порт 80 в основном конфиге на 82 порт вручную в текстовом редакторе:
vi /usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master
было:
... NameVirtualHost *:80 NameVirtualHost *:443 <tmpl_loop name="ip_adresses"> NameVirtualHost {tmpl_var name="ip_address"}:{tmpl_var name="port"} ...
стало:
... NameVirtualHost *:82 NameVirtualHost *:443 <tmpl_loop name="ip_adresses"> NameVirtualHost {tmpl_var name="ip_address"}:82 ...
Заменяем порты в конфигурационном файле генератора vhost файлов:
vi /usr/local/ispconfig/server/conf-custom/vhost.conf.master
было:
... <tmpl_loop name="vhosts"> <VirtualHost {tmpl_var name='ip_address'}:{tmpl_var name='port'}> ...
стало:
... <tmpl_loop name="vhosts"> <VirtualHost {tmpl_var name='ip_address'}:82> ...
Внимание!!! Если Вам придется обновлять панель ISPConfig 3, Вам после обновления необходимо будет также внести изменения с 80 на 82 порт в обновленные файлы, что мы и проделали выше.
Установка модуля libapache2-mod-rpaf иначе в логах apache2 вместо IP посетителей будет только локальный IP 127.0.0.1
Устанавливаем модуль libapache2-mod-rpaf выполнив команду:
aptitude install libapache2-mod-rpaf
было:
vi /etc/apache2/mods-enabled/rpaf.conf <IfModule rpaf_module> RPAFenable On # When enabled, take the incoming X-Host header and # update the virtualhost settings accordingly: RPAFsethostname On # Define which IP's are your frontend proxies that sends # the correct X-Forwarded-For headers: RPAFproxy_ips 127.0.0.1 ::1 # Change the header name to parse from the default # X-Forwarded-For to something of your choice: # RPAFheader X-Real-IP </IfModule>
стало:
<IfModule rpaf_module> RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 ВАШ_АЙПИ_ВНУТРЕННИЙ ВАШ_АЙПИ_ВНЕШНИЙ_если сервер_наружи </IfModule>
Установка и настройка веб сервера NGINX
Устанавливаем проксирующий веб сервер NGINX выполнив команду:
aptitude install nginx
Для быстрой проверки валидности конфигов используем команду:
nginx -t
Создаем сертификат dhparam выполнив команду:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 chown 600 /etc/ssl/certs/dhparam.pem
Удаляем содержимое конфигурационного файла /etc/nginx/nginx.conf выполнив команду:
cat /dev/null > /etc/nginx/nginx.conf
открываем файл /etc/nginx/nginx.conf и вставляем скопированный между комментариями:
vi /etc/nginx/nginx.conf ################################################ user www-data; # Число рабочих процессов nginx, рекомендуется ставить по количеству процессоров/ядер на вашем сервере worker_processes 1; # Уменьшает число системных вызовов gettimeofday(), что приводит к увеличению производительности timer_resolution 100ms; # Изменяет ограничение на число используемых файлов RLIMIT_NOFILE для рабочего процесса. worker_rlimit_nofile 8192; # Директива задаёт приоритет рабочих процессов от -20 до 20 (отрицательное число означает более высокий приоритет). worker_priority -5; # Путь к логу ошибок error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 2048; use epoll; # multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; # log options log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio" "$request_time"'; access_log /var/log/nginx/access.log main; client_max_body_size 16M; # Включить sendfile(). Использование sendfile() экономит системные вызовы, уменьшает число копирований данных, позволяет использовать меньше физической памяти. sendfile on; # Разрешаем использовать TCP_CORK в Linux, что позволяет передавать заголовок ответа и начало файла в одном пакете в Linux tcp_nopush on; # Задаём таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера. Второй параметр задаёт значение в строке "Keep-Alive: timeout=время" в заголовке ответа. keepalive_timeout 35 45; types_hash_max_size 2048; # Разрешаем использовать опцию TCP_NODELAY tcp_nodelay on; # Запрещаем выдавать версию nginx'а в сообщениях об ошибках и в строке заголовка ответа "Server". server_tokens off; # Разрешаем сжатие ответа методом gzip. gzip on; #Разрешаем проверку готового сжатого файла. gzip_static on; # Устанавливаем уровень сжатия ответа методом gzip. gzip_comp_level 5; # Устанавливаем минимальную длину ответа, для которых будет выполняться сжатие ответа методом gzip gzip_min_length 1024; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_buffers 64 8k; gzip_http_version 1.1; gzip_proxied any; gzip_vary on; gzip_types text/plain text/css text/x-js text/xml text/javascript application/javascript application/x-javascript application/json aplication/xml application/xml+rss application/vnd.ms-fontobject application/x-font-ttf font/ttf font/opentype; # SSL ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; # ssl_stapling on; # ssl_stapling_verify on; add_header Strict-Transport-Security max-age=0; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } ################################################
Проверяем на ошибки конфигурационный файлы сервера Nginx выполнив команду:
nginx -t
Ответ системы когда ошибок нет:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Удаляем содержимое конфигурационного файла /etc/nginx/sites-enabled/default выполнив команду:
cat /dev/null > /etc/nginx/sites-enabled/default
Изменяем конфигурационный файл сервера Nginx по умолчанию, открываем файл /etc/nginx/sites-enabled/default и вставляем скопированный между комментариями ниже:
vi /etc/nginx/sites-enabled/default ################################################ server { listen 80 default; server_name _; server_name_in_redirect off; resolver 127.0.0.1; error_page 404 = @fallback; # Все 404 ошибки отдаем на обработку Apache2 location @fallback { proxy_pass http://127.0.0.1:82; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } # Статический контент отдаем на прямую location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|mp3)$ { root /var/www/$host/web; access_log off; expires 30d; } # HTML отдельно поскольку файлы могут быть динамические location ~* ^.+\.(htm|html)$ { root /var/www/$host/web; #try_files $uri /index.php ; access_log off; expires 30d; } # Основной локейшен location / { root /var/www/$host/web; index index.php index.html index.htm; access_log off; proxy_pass http://127.0.0.1:82; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # Настройки для phpmyadmin location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; proxy_pass http://127.0.0.1:82; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } # WEBMAIL если используется раскоментировать: location /webmail { root /var/www/apps; index index.php index.html index.htm; proxy_pass http://127.0.0.1:82; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location ~* ^/webmail/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /var/www/apps; } } # AWSTATS location ^~ /awstats-icon { alias /usr/share/awstats/icon/; access_log off; } location ^~ /awstatscss { alias /usr/share/doc/awstats/examples/css/; access_log off; } location ^~ /awstatsclasses { alias /usr/share/doc/awstats/examples/classes/; access_log off; } } ################################################
Проверяем на ошибки конфигурационный файлы сервера Nginx выполнив команду:
nginx -t
Ответ системы когда ошибок нет:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Все нужные изменения мы внесли, теперь необходимо перезагрузить оба веб сервера и проверить работу.
Перезагружаем веб сервер Apache2 выполнив команду:
/etc/init.d/apache2 restart
Проверяем на каких портах висит веб сервер Apache2 выполнив команду:
netstat -tunap | grep apache2
Ответ системы где мы не видим 80 порт, значит все изменения 80 порта на 82 мы внесли правильно:
tcp6 0 0 :::8081 :::* LISTEN 2389/apache2 tcp6 0 0 :::82 :::* LISTEN 2389/apache2 tcp6 0 0 :::8085 :::* LISTEN 2389/apache2 tcp6 0 0 :::443 :::* LISTEN 2389/apache2
Перезагружаем веб сервер Nginxвыполнив команду:
/etc/init.d/nginx restart
Проверяем на каких портах висит веб сервер Nginx выполнив команду:
netstat -tunap | grep nginx
Ответ системы где мы видим 80 порт, значит веб сервер настроен и работает правильно:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2465/nginx tcp 0 0 192.168.0.1:80 192.168.0.1:33963 ESTABLISHED 2467/nginx: worker
После всего выше перечисленного, у нас сервер Nginx стоит первым и принимает всю работу с посетителями на свои плечи благодоря чему наш сервер теперь может обработать больше запросов, и обслужить больше посетителей.
Часть конфига Nginx сервер взята на сайте .
С Вами был Сергей Лазаренко.
Сделаем небольшой перерыв и посмотрим видео о пользе правильного образа жизни:
Add new comment