apache nginx полноценная связка с ispconfig 3
В прошлом, я уже писал две статьи, посвященные этому вопросу. Но все же, решение было однобоким, поскольку для отдельного сайта nginx конфигурационные файлы не создавались. А проксирование работало по дефолту. Что в свою очередь влекло неизбежные проблемы с переадресацией www и без него. (что в свою очередь все же я решил). А вот проблемы с явно выставленным ip адресом и дописывание частного конфига ручками можно было решить только генерацией icpconfig нового конфиг файла каждый раз для данного сайта. Собственно представляю уже 3 версию связки в данном случае уже в виде полноценного скрипта от А до Я. И детальным описание последнего. В данной статье я не буду в третий раз описывать способ установки самого icpconfig3 и заменю его уже готовым инсталляционным скриптом моего коллеги по оружию поскольку автор скрипта попросил убрать ссылку ибо — «Это не для свободного скачивания!!!!», так что дам ссылку на страничку проекта, думаю уж
Установка происходит на чистом debian 7 mini
Ниже будет приведено детальное описание каждого этапа скрипта, для удобства он выложен в виде sh скрипта, и сделает все ниже приведенное. Фактически отвечайте на вопросы и получаете готовую систему.
Скачать сам скрипт можно
Закачиваем скрипт автоматической установки ispconfig3 и устанавливаем его.
Далее переводим apache2 на 82 порт.
sed -i 's/80/82/g' /etc/apache2/ports.conf sed -i 's/:80/:82/g' /etc/apache2/sites-available/default sed -i 's/:80/:82/g' /etc/apache2/sites-available/ispconfig.conf /etc/init.d/apache2 restart
Соответственно, если у вас уже есть сайты изменить порты нужно будет и в этих конфигах, или в ispconfig > tools> resinc>. И поставить галочки на resinc websites.
Ставим nginx и модуль для валидного логирования в apache.
apt-get install nginx apt-get install libapache2-mod-rpaf IP=$(ifconfig | grep inet | grep -v inet6 | grep -v127.0.0.1 | cut -d: -f2 | awk '{printf $1"\n"}') && echo "RPAFproxy_ips127.0.0.1 $IP" >> /etc/apache2/apache2.conf
Пусть вас не пугает последняя строка, она хоть и странная, но делает свое дело, подставляет ваш внешний ip .
Удаляем default конфиги nginx и заменяем их на свои. Обратите внимание, что новые конфиги будут работать и без последующей генерации vhost файлов для каждого сайта, но будут небольшие проблемы с www. Как и их решить у меня описано в предыдущей статье. Но в нашем случае все сайты будут иметь свой конфиг посему к нам это не относится.
rm /etc/nginx/sites-available/default
Вставляем новый конфиг, обратите внимание вставляем именно так, или качаем файл, поскольку, при использование <<EOF, все $ приходится экранировать \$ и при копирование просто куска конфига, вы получите экранированные спецсимволы вместо правильного файла.
cat >> /etc/nginx/sites-available/default <<EOF server { listen 80 default; server_name _; server_name_in_redirect off; resolver127.0.0.1 ; 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/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://\$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; } } # Закрывает весь server !!! EOF
Далее удаляем основной конфигурационный файл nginx.conf и заменяем на свой.
rm /etc/nginx/nginx.conf cat >> /etc/nginx/nginx.conf <<EOF user www-data; #выставите worker_processes равное: cat /proc/cpuinfo | grep "processor" | sort -u | wc -l worker_processes 8; 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 off; 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; # кеширование, требует конфигурации в servers и location не рекомендовано для магазинов. #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/*; } EOF
Перезапускаем
/etc/init.d/nginx restart
Ставим плагин из репозитория. Тут я отступил от официального мануала на пару строк, поскольку нам его придется сильно переделывать.
cd /tmp wget https://github.com/Rackster/ispconfig3-nginx-reverse-proxy/archive/master.zip unzip master.zip rm master.zip cd ispconfig3-nginx-reverse-proxy-master cp usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php /usr/local/ispconfig/server/plugins-available/ cp usr/local/ispconfig/server/conf-custom/vhost.conf.master /usr/local/ispconfig/server/conf-custom/ rm -rf /tmp/ispconfig3-nginx-reverse-proxy-master chmod 750 /usr/local/ispconfig/server/conf-custom/vhost.conf.master chmod 750 /usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php chown ispconfig:ispconfig /usr/local/ispconfig/server/conf-custom/vhost.conf.master chown ispconfig:ispconfig /usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php cd /usr/local/ispconfig/server/plugins-enabled/ ln -s /usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php
Удаляем дефолтный, но отключенный плагин, поскольку он еще кривее. И заменяем на самописаный.
rm /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master
Заменяем на свой.
cat >> /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master <<EOF <tmpl_loop name='vhosts'> server { #------- Server configuration--------------------------------------------------- <tmpl_if name='ssl_enabled'> listen <tmpl_if name='ip_address' op='!=' value='*'><tmpl_var name='ip_address'>:</tmpl_if>443 ssl spdy; <tmpl_if name='ipv6_enabled'> listen [<tmpl_var name='ipv6_address'>]:443 ipv6only=on ssl spdy; </tmpl_if> </tmpl_else> listen <tmpl_if name='ip_address' op='!=' value='*'><tmpl_var name='ip_address'>:</tmpl_if>80; <tmpl_if name='ipv6_enabled'> listen [<tmpl_var name='ipv6_address'>]:80 ipv6only=on; </tmpl_if> </tmpl_if> server_name <tmpl_var name='domain'> <tmpl_if name='alias'><tmpl_var name='alias'></tmpl_if> <tmpl_if name='ip_address' op='!=' value='*'><tmpl_var name='ip_address'></tmpl_if>; root <tmpl_var name='web_document_root_www'>; #-------- Error page ---------------------------------------------------------- error_page 404 = @fallback; location @fallback { proxy_pass http://<tmpl_if name='seo_redirect_enabled'><tmpl_var name='seo_redirect_target_domain'><tmpl_else><tmpl_if name='ip_address' op='!=' value="*" ><tmpl_var name='ip_address'><tmpl_else><tmpl_var name='domain'></tmpl_if></tmpl_if>:<tmpl_var name='apache2_port'>; proxy_set_header Host <tmpl_if name='seo_redirect_enabled'><tmpl_var name='seo_redirect_target_domain'><tmpl_else><tmpl_if name='ip_address' op='!=' value="*" ><tmpl_var name='ip_address'><tmpl_else><tmpl_var name='domain'></tmpl_if></tmpl_if>; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Real-IP \$remote_addr; } # ------ Log configuration ---------------------------------------------------- access_log off; error_log off; #error_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/nginx_error.log error; #access_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/nginx_access.log combined; <tmpl_if name='ssl_enabled'> #------- SSL configuration ---------------------------------------------------- more_set_headers 'Strict-Transport-Security: max-age=15768000'; ssl_certificate <tmpl_var name='web_document_root_ssl'>/<tmpl_var name='ssl_domain'>.nginx.crt; ssl_certificate_key <tmpl_var name='web_document_root_ssl'>/<tmpl_var name='ssl_domain'>.nginx.key; </tmpl_if> <tmpl_if name='ssl_enabled'> #------- Pagespeed configuration----------------------------------------------- <tmpl_if name='seo_redirect_enabled'> pagespeed LoadFromFile "https://<tmpl_var name='seo_redirect_target_domain'>" "<tmpl_var name='web_document_root_www'>/"; </tmpl_else> pagespeed LoadFromFile "https://<tmpl_var name='domain'>" "<tmpl_var name='web_document_root_www'>/"; </tmpl_if> </tmpl_if> #------- Redirects configuration----------------------------------------------- <tmpl_if name='http_to_https'> # Redirect http -> https return 301 https://\$server_name\$request_uri; </tmpl_if> <tmpl_if name='seo_redirect_enabled'> # SEO Redirect if (\$http_host = "<tmpl_var name='seo_redirect_origin_domain'>" { return 301 \$scheme://<tmpl_var name='seo_redirect_target_domain'>\$request_uri; } </tmpl_if> #------ static content -------------------------------------------------------- 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 <tmpl_var name='web_document_root_www'>; access_log off; expires 30d; } #-------Html ------------------------------------------------------------------ location ~* ^.+\.(htm|html)\$ { # root <tmpl_var name='web_document_root_www'>; try_files \$uri /index.php ; access_log off; expires 30d; } #------ Locations configuration ----------------------------------------------- # global locations # alias to local error docs<tmpl_var name='domain'> <tmpl_if name='alias'><tmpl_var name='alias'></tmpl_if> <tmpl_if name='ip_address' op='!=' value='*'><tmpl_var name='ip_address'></tmpl_if> <tmpl_if name='errordocs'> location ^~ /error { root /var/www; } </tmpl_if> # default location location / { index index.php index.html index.htm; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header Host <tmpl_if name='seo_redirect_enabled'><tmpl_var name='seo_redirect_target_domain'><tmpl_else><tmpl_if name='ip_address' op='!=' value="*" ><tmpl_var name='ip_address'><tmpl_else><tmpl_var name='domain'></tmpl_if></tmpl_if>; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_pass http://<tmpl_if name='seo_redirect_enabled'><tmpl_var name='seo_redirect_target_domain'><tmpl_else><tmpl_if name='ip_address' op='!=' value="*" ><tmpl_var name='ip_address'><tmpl_else><tmpl_var name='domain'></tmpl_if></tmpl_if>:<tmpl_var name='apache2_port'>; } #------- Directives configuration --------------------------------------------- include /etc/nginx/locations.d/*.conf; <tmpl_var name='nginx_directives'> } </tmpl_loop> EOF
Выставляем права.
chmod 750 /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master chown ispconfig:ispconfig /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master
Так, после генерации, будет выглядеть конечный файл.
Ну и последний штрих: активируем возможность дописывать уникальные значения для каждого сайта через ispconfig. Тем более в нем все уже есть, но так и не внедрено.
sed -ie "s/jQuery[(].\.nginx.[]\.hide[(][]/jQuery\(\'\.nginx\'\)\.show\(\)/g" /usr/local/ispconfig/interface/web/sites/templates/web_domain_advanced.htm
Проверяем.
Оставить комментарий
Комментарии (2)