Собственный хостинг: Ispconfig3 nginx+apache2 настройка бэк-фронт энда на debian6 (11часть) продолжение
Не так давно я уже писал по этому поводу. Однако прошло время, в конфигах выявились неточности и их количество не позволило полноценно рекурсивно пользоваться одним конфигом для всех сайтов. Да и некоторые location не давали той гибкости что требовалось.
Посему пришлось переписать весь конфиг с нуля, соответственно и весь мануал по установке веб сервера. Конфиг стал легче, намного более стабилен, учтены все SEO недочеты в предыдущих версиях. В данный момент все оттестировано на более чем 300 сайтах. Так что можно говорить с уверенность, что данный мануал будет работать с любыми сайтами.
Также, в дальнейшем постараюсь дописать скрипит для создания полноценных виртуальных хостов для 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.
Зайдя на сайт testsite.ru вы работаете через nginx и при запросе более 120 секунд вам вежливо дадут 500 и отправят с богом.
Заходя на сайт teststite.ru:82 вы будете работать уже в apache2, и дождетесь конца запроса. Хотя, как правило, на сайте не так много мест где могут быть столь долгие запросы, я бы рекомендовал для каждого отдельно прописывать.htacces с установленным max_execution_time для каждого из них, тем самым apache2 при атаке будет меньше чувствителен.
Мало того в такой схеме можно уменьшить тайм ауты на проксирующем nginx до минимума.
Проверяем.
netstat -tunap | grep apache2
Должны получить вот такой ответ:
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 на чистую систему. все должно пройти гладко.
Теперь нам нужно изменить шаблон создания конфигов. Копируем их в каталог
Кастамизируем файл.
Переходим в каталог испа
cd /usr/local/ispconfig/server/
Копируем главный конфиг
cp conf/apache_ispconfig.conf.master conf-custom/
Копируем конфиг генератора vhost файла
cp conf/vhost.conf.master conf-custom/
Заменяем порты в основном конфиге на 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
Все что нам остается добавить в админке в генератор линков дополнительные условия.
/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/
Соответственно для того чтобы старые сайты создали для себя симлинки, в админке обновляем все конфиги.
Далее добавляем еще
apt-get install libapache2-mod-rpaf
Добавляем директивы в apache2
echo RPAFsethostname On >> /etc/apache2/apache2.conf
Не забудьте поменять ВАШ_АЙПИ на ваш ip
echo RPAFproxy_ips127.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 можно воспользоваться скриптом 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; resolver127.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 по прежнему будет писаться
Перезапускаем nginx
/etc/init.d/nginx restart
Для быстрой проверки валидности конфигов используем команду
/etc/init.d/ nginx configtest
Конец. По всем возникшим вопросам, отписывайтесь в под статьей, или мне на скайп: shambler81 постараюсь ответить на все вопросы, поправить все неточности и так далее.
ТЕСТЫ валидности ответа сервера nginx. (для SEO)
Оставить комментарий
Комментарии (1)