Собственный хостинг: Ispconfig3 nginx+apache2 настройка бэк-фронт энда на debian6 (11часть) продолжение

Не так давно я уже писал по этому поводу. Однако прошло время, в конфигах выявились неточности и их количество не позволило полноценно рекурсивно пользоваться одним конфигом для всех сайтов. Да и некоторые location не давали той гибкости что требовалось.

Посему пришлось переписать весь конфиг с нуля, соответственно и весь мануал по установке веб сервера. Конфиг стал легче, намного более стабилен, учтены все SEO недочеты в предыдущих версиях. В данный момент все оттестировано на более чем 300 сайтах. Так что можно говорить с уверенность, что данный мануал будет работать с любыми сайтами.

Настройка бэк-фронт энда на debian6

Также, в дальнейшем постараюсь дописать скрипит для создания полноценных виртуальных хостов для nginx в данный же момент работает 99.9% функционала веб панели, фактически только при жестком завязывание домена к определенному ip nginx будет отдавать полностью динамический контент от apache, но это мягко говоря позволительно, поскольку жесткая привязка сайта к ip требуется только в случае его конфигурации или быстрого развертывания. В остальных случаях «*" вполне будет достаточно.

Если у вас уже установлен ispconfig работающий в режиме apache то для перехода на nginx+apache2 вам придется обновить все конфигурационные файлы всех виртуальных хостов, поскольку 80 порт будет занят nginx. Или через web панель обновить все конфигурации. Фактически все сайты должны уйти на другой порт, в нашем случае я выбрал 82 порт.

Заменяем во всех *.vhost порт на 82

sed -ie 's/:80>/:82>/g' /etc/apache2/sites-available/*.vhost

Заменяем его в default конфиге.

sed -ie 's/:80>/:82>/g' /etc/apache2/sites-available/default

Также, пройдитесь поисковиком и посмотрите — нет ли других файлов с упоминанием 80 порта, таких как /etc/apache2/ports.cong

sed -ie 's/:80>/:82>/g' /etc/apache2/ports.cong

Рестартуем apache2 на 82 порту.

/etc/init.d/apache2 restart

Добавим порт на внешку, поскольку 82 порт не индексируется поисковыми системами, таким образом мы всегда сможем работать и с apache2 с nginx одновременно, смотреть что отдает нам один и другой, так же это очень полезно для выполнения внутренних больших скриптов и регулярок, выгрузок т.д. Когда скрипт работает долго нам не нужно увеличивать proxy_read_timeout и proxy_connect_timeout. Фактически у нес теперь max_execution_time для работает только для apache2.

Настройка бэк-фронт энда на debian6

Зайдя на сайт testsite.ru вы работаете через nginx и при запросе более 120 секунд вам вежливо дадут 500 и отправят с богом.

Заходя на сайт teststite.ru:82 вы будете работать уже в apache2, и дождетесь конца запроса. Хотя, как правило, на сайте не так много мест где могут быть столь долгие запросы, я бы рекомендовал для каждого отдельно прописывать.htacces с установленным max_execution_time для каждого из них, тем самым apache2 при атаке будет меньше чувствителен.

Мало того в такой схеме можно уменьшить тайм ауты на проксирующем nginx до минимума.

Проверяем.

netstat -tunap | grep apache2

Должны получить вот такой ответ:

Настройка бэк-фронт энда на debian6

tcp6 0 0::8080::* LISTEN 3044/apache2

tcp6 0 0::8081::* LISTEN 3044/apache2

tcp6 0 0::82 ::* LISTEN 3044/apache2

tcp6 0 0::443::* LISTEN 3044/apache2

Если все хорошо, то переходим к конфигурированию ispconfig3, если нет то ищем место где у нас не изменились порты, если же вы ставите ispconfig3 на чистую систему. все должно пройти гладко.

Теперь нам нужно изменить шаблон создания конфигов. Копируем их в каталог conf-custom, ispconfig убедив этот каталог по умолчанию переключится на конфиги находящиеся в нем.

Кастамизируем файл.

Переходим в каталог испа

cd /usr/local/ispconfig/server/

Копируем главный конфиг

cp conf/apache_ispconfig.conf.master conf-custom/ 

Копируем конфиг генератора vhost файла

cp conf/vhost.conf.master conf-custom/
Настройка бэк-фронт энда на debian6

Заменяем порты в основном конфиге на 82

sed -i 's/.tmpl_var name=.port../82/g' /usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master
Заменяем порты в конфиге хостов
sed -i 's/.tmpl_var name=.port../82/g' /usr/local/ispconfig/server/conf-custom/vhost.conf.master

Обратите внимание если вы собираетесь обновить ispconfig3, вам всегда придется после инсталляции, копировать новые конфиги в кастом каталог и заменять им порты, поскольку новый функционал в системе так же изменяет и эти конфиги, фактически у вас будет или отсутствовать часть нового функционала или вам после обновления придется повтоярть эти команды, но их очень легко закинуть в баш скрипт и все.

Оно же ручками:

vim /usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master

Находим строку

NameVirtualHost {tmpl_var name=«ip_address»}:{tmpl_var name=«port»}

Заменяем на

NameVirtualHost {tmpl_var name=«ip_address»}:82

vim /usr/local/ispconfig/server/conf-custom/vhost.conf.master

Находим строку

<VirtualHost {tmpl_var name='ip_address'}:{tmpl_var name='port'}>

Меняем

<VirtualHost {tmpl_var name='ip_address'}:82>

В последнем, особое внимание, ровно как написано, не забываем «> " оставить в конце.

Или же если у кого есть желание найти {tmpl_var name='port'}> буду рад услышать где его поменять, а то приходится кастомизировать каждый раз файл при обновление.

Создаем отдельный каталог nginx для доступа к статике! в нем мы положим алиасы и с www и без на каждый сайт, тем самым убьем гигантское количество косяков. Я долго думал над этим шагом, но как показала практика, это самое легкое и отличное решение.

mkdir /var/nginx

Все что нам остается добавить в админке в генератор линков дополнительные условия.

Настройка бэк-фронт энда на debian6

/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/:/var/nginx/[website_domain]/:/var/nginx/www.[website_domain]/

Вписываем приведенную строчку вместо существующей, или добавляем симлинк на /var/nginx/www. и /var/nginx/

Соответственно для того чтобы старые сайты создали для себя симлинки, в админке обновляем все конфиги.

Настройка бэк-фронт энда на debian6

Далее добавляем еще libapache2-mod-rpaf иначе в логах apache2 будут только 127.0.0.1

apt-get install libapache2-mod-rpaf

Добавляем директивы в apache2

echo RPAFsethostname On >> /etc/apache2/apache2.conf

Не забудьте поменять ВАШ_АЙПИ на ваш ip 

echo RPAFproxy_ips 127.0.0.1 ВАШ_АЙПИ >> /etc/apache2/apache2.conf

В данный момент все ваши сайты уже должны работать на 82 порту.

Устанавливаем проксирующий NGINX

Одной строкой

wget http://nginx.org/keys/nginx_signing.key && sudo apt-key add nginx_signing.key && echo "deb http://nginx.org/packages/debian/ squeeze nginx" >> /etc/apt/sources.list && echo "deb-src http://nginx.org/packages/debian/ squeeze nginx" >> /etc/apt/sources.list && apt-get update

Оно же, по отдельности.

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
echo "deb http://nginx.org/packages/debian/ squeeze nginx" >> /etc/apt/sources.list
echo "deb-src http://nginx.org/packages/debian/ squeeze nginx" >> /etc/apt/sources.list
apt-get update

Симулируем установку, проверяем все ли гладко ставится, та ли версия библиотек.

apt-get install -s nginx

Если nginx старше 1.2 включительно, то все хорошо, ставим.

Устанавливаем

apt-get install nginx
Настройка бэк-фронт энда на debian6

Для других ос отличных от debian6 можно воспользоваться скриптом http://unixzen.ru/скрипт-автоматической-установки-latest-stable-в/

Удаляем дефолтные конфиги nginx

rm /etc/nginx/sites-available/default

Вписываем свой default

vim /etc/nginx/sites-available/default
server { 
listen 80 default; 
server_name _; 
server_name_in_redirect off; 
resolver 127.0.0.1; 
# --------------Пока пишутся в дефолт поскольку $host тут не работает----------- 
#	access_log /var/www/$host/log/nginx_access.log; 
#	error_log /var/www/$host/log/nginx_error.log error; 

error_page 404 = @fallback; 
#--------------Все 404 отдаем на обработку апача------------------------------- 
location @fallback { 
proxy_pass	http://$host: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/nginx/$host/web; 
#error_log /var/www/$host/log/nginx_error.log error;	
access_log off; 
expires 30d; 
} 
#--------------HTML Вывел отдельно поскольку файлы могут быть динамические------- 
location ~* ^.+\.(htm|html)$ { 
root /var/nginx/$host/web; 
try_files $uri /index.php ; 
access_log off; 
expires 30d; 
} 
# -------------Основной локейшен ----------------------------------------------- 
location / { 
root /var/nginx/$host/web; 
index index.php index.html index.htm; 
access_log off; 
proxy_pass http://$host: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://$host: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://$host: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; 
} 
#---------------AVSTATS-END----------------------------------------------------- 
} # Закрывает весь server !!! 
#---------------К О Н Е Ц------------------------------------------------------- 






#------------- ПРИМЕРЫ ------------------------------------------------- 
#-------Пример создания отдельных условий для 1 сайта------------------- 
#server { 
#server_name www.topengineer.ru topengineer.ru;	
#	access_log /var/log/ispconfig/httpd/topengineer.ru/access.log; 
#	location / { 
#	index index.php index.html index.htm; 
#	root /var/www/topengineer.ru/web/; 
#	proxy_pass http://www.topengineer.ru: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 ~* ^.+\.(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/topengineer.ru/web/;	
#	access_log off; 
#	expires 30d; 
#	}	
#location ~* ^.+\.(htm|html)$ { 
#	root /var/www/topengineer.ru/web; 
#	try_files $uri /index.php; 
#	access_log off; 
#	expires 30d; 
#	} 
#	} 
#----------------------------------------------------------------------- 


#-------------_Пример склейки зеркал в Nginx---------------------------- 
#server { 
#	listen 80; 
#	server_name top100zvezd.com www.top100zvezd.com xn--100-hddkfmc0dk5a.xn--p1ai www.xn--100-hddkfmc0dk5a.xn--p1ai; 
#	rewrite ^ http://top100zvezd.ru/; 
#	} 
#----------------------------------------------------------------------- 


#-------------Пример условия в root пир www отрезает-------------------
rm /etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf

Вставляем наш конфиг nginx.conf

user www-data; 
worker_processes 8; 

# выставите worker_processes равное: cat /proc/cpuinfo | grep "processor" | sort -u | wc -l 
error_log /var/log/nginx/error.log; 
pid /var/run/nginx.pid; 

events { 
worker_connections 2048; 
# multi_accept on; 
} 

http { 
include /etc/nginx/mime.types; 

access_log /var/log/nginx/access.log; 

sendfile on; 
#tcp_nopush on; 

#keepalive_timeout 0; 
keepalive_timeout 75; 
tcp_nodelay on; 

gzip on; 
gzip_disable "MSIE [1-6]\.(?!.*SV1)"; 

################################### 
client_max_body_size 124m; 
client_body_buffer_size 40m; 
proxy_connect_timeout 300; 
proxy_send_timeout 300; 
proxy_read_timeout 300; 
# proxy_buffer_size 640k; 
# proxy_buffers 8 2560k; 
# proxy_busy_buffers_size 2560k; 
# proxy_temp_file_write_size 10m; 
################################### 


####################################### 
#proxy_cache_path /mnt/tmp/cash levels=1:2 keys_zone=cache:1m max_size=200M; 
#proxy_temp_path /mnt/tmp 1 2; 
#proxy_ignore_headers Expires Cache-Control; 
#proxy_cache_use_stale error timeout invalid_header http_502; 
### #proxy_cache_bypass $cookie_session; 
## #proxy_no_cache $cookie_session; 
####################################### 


include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 
} 

# mail { 
# # See sample authentication script at: 
# # http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript 
# 
# # auth_http localhost/auth.php; 
# # pop3_capabilities "TOP" "USER"; 
# # imap_capabilities "IMAP4rev1" "UIDPLUS"; 
# 
# server { 
# listen localhost:110; 
# protocol pop3; 
# proxy on; 
# } 
# 
# server { 
# listen localhost:143; 
# protocol imap; 
# proxy on; 
# } 
# }

Обратите внимание на worker_processes. В моем случае их 8, вам следует выставить свое значение.

cat /proc/cpuinfo | grep "processor" | sort -u | wc -l

worker_processes меняем на полученное значение.

Делаем симлинк для roundcube

ln -s /var/www/apps/roundcube /var/www/apps/webmail

Также у кого в логах nginx по прежнему будет писаться 127.0.0.1 возможно потребуется добавить директиву в apache2.conf RPAFenable On. В моем случае этого не потребовалось.

Перезапускаем nginx

/etc/init.d/nginx restart

Для быстрой проверки валидности конфигов используем команду

/etc/init.d/ nginx configtest

Конец. По всем возникшим вопросам, отписывайтесь в под статьей, или мне на скайп: shambler81 постараюсь ответить на все вопросы, поправить все неточности и так далее.

ТЕСТЫ валидности ответа сервера nginx. (для SEO)

Настройка бэк-фронт энда на debian6

Оставить комментарий

Комментарии (1)

  1. Алекс 02.04.2017 Ответить
    Добрый день. Добавил себе на сайте https://mobiappsystems.ru/ HTTP/2. Сервис "HTTP/2 Тест - онлайн сервис" показывает, что
    сайт поддерживает http/2. Но вот firebug в firefox в заголовках пишет Версия: HTTP/1.1
    В чем может быть проблема? Версия Nginx 1.11.6, в конфиге все указал: listen 443 ssl http2;