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;
resolver 127.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)