Установка и настройка серверов Linux,создание сайтов, установка и настройка Asterisk PBX, Linux для начинающих и не только.
Получать статьи этого сайта на почту:

 

09
May 2015
sergldom
автор
8
комментариев
Рейтинг статьи:
5
Average: 5 (2 votes)

Установка Nginx для ISPConfig 3 на сервер Debian

Установка Nginx на сервер с ISPConfig 3К установленному веб серверу 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 сервер взята на <![CDATA[]]>сайте<![CDATA[]]>.

С Вами был Сергей Лазаренко.

 

Сделаем небольшой перерыв и посмотрим видео о пользе правильного образа жизни:

Рейтинг статьи: 

5
Average: 5 (2 votes)

Вам понравилась статья? Хотите получать уведомления о выходе новых статей с этого сайта на свой почтовый адрес? Подписывайтесь пожалуйста. Введите свой почтовый адрес и нажмите кнопку Хочу получать статьи!

<![CDATA[]]><![CDATA[]]>

 

*Адреса электронной почты не разглашаются и не предоставляются третьим лицам для коммерческого или некоммерческого использования.

 

 
 

 

8 комментария:
Alex11225
30/05/2016 - 18:19
Отличная статья. Не умаляю заслуги Виктора, с сайта которого была взята часть конфига nginx, однако Сергей Лазаренко представил материал в более собранном виде. После описанных на этой странице действий все встало без проблем. Спасибо, Сергей!
07/08/2016 - 12:04
Какая-то фигня твориться. Создаю сайт, захожу на него, nginx выдает ошибку 502. Если к домену добавить :82, открывается нормально. Т.е., как я понимаю, Apache почему-то не обрабатывает запросы от nginx
oxart
30/11/2016 - 22:20
Спасибо! Статья и на данный момент не потеряла актуальности, все получилось без проблем!
03/12/2016 - 00:33
Здравствуйте, рад, что Вам пригодилась статья.
Сафроненко Юрий
01/03/2017 - 21:36
Огромное спасибо за структурированный и разжёванный материал. Всё встало с первого раза. Огромное спасибо!!!
01/03/2017 - 23:49
Пжалуйста, пользуйтесь на здоровье, рад, что пригодилась
Viktorstuu
17/08/2017 - 17:48
Интересный момент получился, ubuntu 16.04 + ispconfig 3.1.6 сделал все как расписано, по адресу сайта стала открываться страница приветствия "Apache2 Ubuntu Default Page", если же открывать сайт по порту 82 (site.com:82) то сайт нормально работает. С чем это связано и как исправить?
Михаил
06/11/2017 - 14:39
Та же проблема на Debian 8 (jesse) Если найдете причину - отпишитесь :3

Add new comment

Filtered HTML

  • Search Engines will index and follow ONLY links to allowed domains.

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
  • Search Engines will index and follow ONLY links to allowed domains.

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.