Управление виртуальным хостами nginx

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Yora
Сообщения: 8

Управление виртуальным хостами nginx

Сообщение Yora »

Здравствуйте хотелось бы управлять виртуальными хостами через консоль(например, bash скрипт), а не редактировать конфиг. Может у кого есть готовое решение?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Управление виртуальным хостами nginx

Сообщение SLEDopit »

У меня связка апач + nginx. Обратите внимание, чтобы php исполнялись с правами user (т.е. работала секция mpm_itk_module), должен быть установлен apache2-mpm-itk.
Скрипт для создания хостов:

Код: Выделить всё

#!/bin/bash
IP=111.222.111.222
die(){
echo $1
exit 1
}
[[ "$1" == "" ]] && die "Specify site name"
mkdir -p /home/user/www/$1
chown user:user /home/user/www/$1
echo "<VirtualHost *:8080>
ServerName $1
DocumentRoot /home/user/www/$1
CustomLog /home/user/logs/$1.access.log combined
ErrorLog /home/user/logs/$1.error.log
ServerAlias www.$1
ServerAdmin info@$1
DirectoryIndex index.php
<IfModule mpm_itk_module>
AssignUserId user user
</IfModule>
php_admin_value open_basedir \"/home/user/tmp:.:/home/user/www/$1\"
php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f webmaster@$1\"
php_admin_value upload_tmp_dir \"/home/user/tmp\"
php_admin_value session.save_path \"/home/user/tmp\"
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
</VirtualHost>" > /etc/apache2/sites-available/$1
a2ensite $1
[[ "$2" == "-e" ]] && vi /etc/apache2/sites-enabled/$1
/etc/init.d/apache2 reload
echo "server {
                listen $IP:80;
                server_name $1 www.$1;
                location ~* ^/(webstat/|webmail/|phpmyadmin/) {
                        proxy_pass http://$IP:8080;
                        proxy_redirect http://$1:8080/ /;
                        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 / {
                        proxy_pass http://$IP:8080;
                        proxy_redirect http://000.ru:8080/ /;
                        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|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
                        root /home/user/www/$1;
                        access_log /home/user/logs/$1.access.nginx.log;
                        error_page 404 = @fallback;
                }
                location @fallback {
                        proxy_pass http://$IP:8080;
                        proxy_set_header Host \$host;
                        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
                        proxy_set_header X-Real-IP \$remote_addr;
                }
        }" > /etc/nginx/sites-available/$1
ln -s /etc/nginx/sites-available/$1 /etc/nginx/sites-enabled/$1
/etc/init.d/nginx reload
echo $1 successfully added.
Для удаления:

Код: Выделить всё

#!/bin/bash
die(){
echo $1
exit 1
}
[[ `echo $1` == "" ]] && die "Specify site name"
a2dissite $1
rm /etc/apache2/sites-available/$1
rm /etc/nginx/sites*/$1
rm -r /home/user/www/$1
rm /home/user/logs/$1*
/etc/init.d/apache2 reload
/etc/init.d/nginx reload
echo $1 successfully deleted.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: