Створення локального серверу пидтримки мережного часу и його захист

                                  Міністерство освіти і науки України

Державний вищий навчальний заклад

«Український державний хіміко-технологічний  університет»

Кафедра спеціалізованих комп’ютерних систем

 

 

 

 

РОЗРАХУНКОВО-ПОЯСНЮВАЛЬНА ЗАПИСКА

 

До курсової роботи з системного програмного забезпечення

 

Створення локального серверу підтримки мережного часу і його захист.

 

 

 

 

Студент групи 4--IC-1            Абдурахмонзода Ш.

 

Керівник роботи                                          Бразинский В.I.   

 

 

 

 

 

Дніпропетровськ

2012

   ДВНЗ «Український державний хіміко-технологічний університет»

 

Кафедра:  Спеціалізованих комп’ютерних систем

Дисципліна: “Системне програмне забезпечення”

Спеціальність:   " Спеціалізовані комп’ютерні системи "

Курс: 4  Група: 4-IC-1  Семестр: 7  Тетраместр: 14

 

 

ЗАВДАННЯ

на курсову роботу студента

 

___________________________________________________________

 

Тема роботи: Створення локального серверу підтримки мережного часу і його захист.

 

Термін здачі студентом  закінченої роботи:.____________

Вихідні дані роботи: ___________________________________________

______________________________________________________________

 

Зміст розрахунково-пояснювальної  записки :

 

Вступ

1. Теоретична частина

  1. Проектна частина

2.1 Постановка задачі.

2.2. Розробка алгоритма рішення задачі.

    1. Програмна реалізація алгоритма.
    2. Опис розробленої програми.

Висновки 

Список використаних джерел

Додатки

А. Інструкції по використанню програмних модулів.

Б. Лістінг програмних модулів

В. Протокол виконання програми

 

Дата видачі завдання: ___________

 

Календарний план

 

 

№ п/п

Назва етапів курсової роботи

Термін виконання етапів роботи

Примітки

1

Аналіз літературних джерел

 

 

2

Розробка програмного забезпечення

 

 

3

Оформлення пояснювальної записки  та виконання графічної частини

   

4

Захист курсової роботи

   

 

 

 

 

 

 

Студент ___________________

(підпис)

 

 

 

Керівник: ___________________  Бразинський Вадим Іванович

 

(підпис)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Содержание

 

 

Вступление.

1.Установка локального WEB–сервера  и его компонентов. 
   1.1. Структура каталогов.

   1.2. Установка Apache.

 

   1.3. Конфигурационные файлы  сервера Apache.

 

   1.4Создание  виртуальных хостов.

 

2.Практичекая  часть.

 

   2.1.Для  системы Linux.

  2.2.Для системы Windows.

 

3.Список литературы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вступление.

 

Работающий Webсервер и СУБДтребуются при  создании Интернет проектов с использованием современных технологий. Наилучший  вариант — это установка локального Webсервера на тот же ПК, где создается  Интернет проект. Этот ПК всегда доступен по IP-адресу 127.0.0.1, что эквивалентно доменному имени localhost. Поэтому для доступа к Webсерверу через браузер можно использовать адрес http://localhost. При использовании локального сервера все изменения в файлах доступны через браузер сразу же. Когда все скрипты будут отлажены, можно зайти в Интернет и скопировать их на сервер хостинг-провайдера. 
Язык программирования РНР, специально предназначенный для работы в Интернет, изначально создавался под Unixподобные операционные системы — Linux, FreeBSD, и т.п. Под Windowsсуществует свой аналог РНР, который называется ASP(Active Server Pages). Он полностью ориентирован на Windowsи позволяет учитывать и использовать все особенности этой операционной системы. При этом в качестве HTTPсервера рекомендуют использовать IIS(Internet Information Server) — продукт компании Microsoft. 
Желательно, чтобы на сервере и на компьютере, на котором создаются и тестируются РНР -сценарии, стояли одинаковые операционные системы. Бывает так, что РНР -программа отлично работает на Windowsкомпьютере, но отказывается работать или работает некорректно под Linux. Профессиональное использование РНРориентировано на Linux (Unix). Существуют детали и возможности, которые нельзя учесть в силу разности ОС Windowsи ОС Linux (Unix). 
Можно ли разрабатывать и отлаживать скрипты в Windows, а потом без изменений переносить их в Unix? К счастью, ответ на этот вопрос, чаще всего, — да. Для этого используют локальный Web-сервер Apacheдля Windows, а также устанавливают РНРи MySQL, способные работать в этой ОС. 
Почему именно Apache? Потому что это самый распространенный сервер. Он установлен у большинства хостинг-провайдеров. Существует его Windowsверсия, практически идентичная по функциональности своему Unixсобрату. 
Рекомендуется устанавливать самую последнюю версию Apache. Ссылка на каталог, в котором расположены последние версии Apache: http://www.apache.org/dist/httpd/binaries/win32/. Нужен ЕХЕ-файл, имя которого содержит подстроку no_src, т. е. "без исходных кодов". 
Установка сервера Apacheи сопутствующих программ вручную - утомительное занятие. Приходится разбираться с многочисленными параметрами конфигурации Apache, PHPи MySQL. 
Существуют готовые комплексы, не нуждающиеся в настройке. Наиболее популярным из таких комплексов является Денвер – это "Джентльменский набор Web-разработчика". Денвер— это те же самые дистрибутивы Apache, PHP, MySQL.Они объединены в единый архив и снабжены удобным инсталлятором и утилитами настройки (включая средства автоматического конфигурирования виртуальных хостов). 
Денверсоздавался для того, чтобы упростить настройку и установку свободно распространяемых программ (Apache, PHP, MySQLи т. д.). Он имеет модульную структуру. Его ядро — так называемый "базовый пакет". Все остальные компоненты поставляются в виде автономных пакетов расширений, для работы которых нужен базовый пакет. 
Базовый пакет содержит большинство необходимых Web-программисту программ и утилит: 
? Apacheс поддержкой SSI, mod_rewrite, mod_php. 
? PHPс поддержкой GDи MySQL. 
? MySQLс поддержкой транзакций (mysql-max). 
? phpMyAdmin— система управления MySQLчерез Web-интерфейс; полностью заменяет командную строку MySQL. 
? Ядро Perlбез стандартных библиотек (они поставляются отдельно). 
? Эмулятор sendmail(отладочная "заглушка", помещающая приходящие письма в каталог /tmp); поддерживается работа совместно с РНРи Perl. 
? Система управления виртуальными хостами, основанная на шаблонах. Чтобы создать новый хост, вам нужно лишь добавить каталог в /home, править конфигурационные файлы не требуется. 
? Система настройки и управления запуском/завершением. 
?. Инсталлятор. 
Дистрибутив, содержащий все перечисленные выше компоненты, занимает около 2 Мбайт. 
На сайте http://web.dklab.ruдоступно множество пакетов расширений для Денвера, содержащих: 
? Документацию ко всем программам, входящим в комплекс. 
? Полную версию Perlсо стандартными библиотеками. 
? Полную версию PHP 3и PHP 4, а также модули для РНР 5. 
? Модули Apache, не вошедшие в базовый пакет Денвера. 
? Разнообразные "облегченные" и "специализированные" версии базового пакета — в частности, дистрибутив, помещающийся на одну дискету, и базовый пакет с поддержкой РНР 4, а не РНР 5по умолчанию. 
По адресу http://forum.dklab.ru/denwer/действует форум, где можно получить консультацию по вопросам, касающимся использования Денвера. Он также содержит обширную базу данных вопросов и ответов. На форуме действует гибкая система поиска. 
Если Вы желаете детально разобраться в работе локального web-сервера, то рекомендуется собрать и настроить его собственноручно из отдельных программных продуктов. Полезно предварительно изучить статью «Установка и настройка Apache+PHР», расположенную по адресу http://php5/ru/study/instal. И, конечно же - разделы официальной документации, посвященные установке соответствующих программ.

 

 

    1. Установка локального WEB–сервера и его компонентов. 
       
      1.1. Структура каталогов.

Рекомендуется логически отделить Web-проекты от всех остальных на локальном  ПК. Для этого следует установить все программное обеспечение  локального web-сервера, а также записывать все HTMLфайлы, скрипты и документы в отдельный каталог. Локальный сервер удобнее расположить на отдельном логическом диске (не на С), причем организовать его как реальный сервер. Лучше установить и настроить сервер на отдельном диске D. На этом диске можно устроить «Unix»:создать подкаталог /home/для хранения локальных сайтов, а для Apache, PHP, MySQLи т.д. создать подкаталог /usr. 
Создайте на диске Dдве папки с названиями usrи home. Названия папок и файлов, во избежание проблем, следует писать строчными буквами, т.к. в *nixоперационных системах homeи Homeне одно и тоже. Большинство серверов, на одном из которых в дальнейшем будет размещен созданный Вами Интернет проект, работают под *nixоперационными системами.

 
1.2. Установка Apache 

1. Запустите файл инсталляции  «apache_1.3.24-win32-x86-no...»: 
2. В появившемся диалоге нажмите кнопку Yes, а затем - кнопку Next: 
3. Прочитайте лицензионное соглашение и поставьте галочку напротив «I accept the terms in the license agreement»и нажмите на кнопку Next: 
4. В следующем окне «Server Information»нужно написать: 
? Network Domain имя Вашего домена: localhost 
? Server Name имя Вашего сервера: www.localhost.ru 
? Administrator's Email Address Ваш почтовый адрес: [email protected]
? Установите переключатель «Run when started manually, only for me»(Запускать вручную только для меня), чтобы запускать сервер в ручном режиме: 
В окне «Server Information»можно указать и другую любую информацию о сервере, так как она в дальнейшем может быть исправлена при редактировании файла httpd.conf. 
5. В следующем окне «Setup Type»выберите установку «Complete»и нажмите кнопку Next: 
6. В окне «Destination Folder»нажмите «Change»и измените путь, на тот где будет располагаться web-сервер, а именно D:usr. 
По умолчанию Web – сервер будет установлен в папку C:Program FilesApacher Group

C помощью кнопки «Сhange» (Изменить) можно указать папку, в которую  будет установлен Web – сервер Apache: D:usr: 
В итоге путь будет изменен, нажмите Next, а в следующем окне - кнопку Install: 
7. Будет произведено копирование файлов: 
8. Затем появиться окно, в котором нужно нажать Finish: 
9. Apacheустановлен. Запустите установленный Web – сервер Apache. Для этого выберите команду главного меню Пуск ? Программы ? Apache HTTP Server ? Start Apache in Console (Programs ? Web-сервер Apache ? Запустить Apache в консольном режиме). 
На экране появится окно программы Apacheс сообщением: Apache/1.3.24 (Win32) running...(Apache/1.3.24 (Win32) работает...): 
10. Теперь можно подключиться к Web-серверу Apache.Для этого: 
? Средствами операционной системы Windowsв папке D:usrApachehtdocs: 
переименуйте файл index.html.enв файл index.html: 
? Запустите браузер Microsoft Internet Explorer или любой другой, например Mozilla Firefox. 
? В поле ввода Address (Адрес) браузера введите http://localhostи нажмите клавишу Enter. В окно браузера загрузится начальная страница Web-сервера Apache: 
Начальная страница Web-сервера Apacheна русском языке: 
Если открылась начальная страница, значит Apacheустановлен правильно. 
? Перейдите в окно Web-сервера Apacheс помощью Панели задачоперационной системы Windowsи завершите работу сервера с помощью кнопки [X] в правом верхнем углу окна. 

    1. Конфигурационные файлы сервера Apache

 
Сервер Apacheимеет три конфигурационных файла: httpd.conf, srm.conf, access.conf. Обычно эти  файлы находятся в каталоге /etc/httpd/conf. Вся настройка сервера заключается в редактировании этих трех файлов. 
Рассмотрим, какие функции выполняют эти файлы: 
? Файл httpd.conf— это основной файл конфигурации сервера. В нем содержится техническое описание работы сервера. 
? В файле srm.confзадаются параметры документов, которые размещены на сервере. 
? Файл access.confсодержит параметры доступа к серверу. 
Начиная с версии 1.3, рекомендуется все директивы, которые раньше находились в файлах srm.confи access.conf, помещать в файл httpd.conf. 
Сервер Apacheверсии 2.0, который входит в состав дистрибутива Linux Red Hat 9.0, содержит еще несколько конфигурационных файлов: apache-mime.types, vhosts/vhosts.conf,vhosts/VirtualHomePages.conf, vhosts/DynamicVHosts.conf. В файле apache-mime.typesсодержатся типы MIME, поддерживаемые сервером Apache. Файлы vhosts.conf, VirtualHomePages.conf, DynamicVHosts.confотносятся к конфигурированию виртуальных Web-серверов, о которых речь пойдет немного позже.

 

1.4.Создание виртуальных хостов.

 

Разработчики Apacheпредусмотрели возможность  создания нескольких виртуальных хостов. При настройке Apache, изначально сделано  так, чтобы с появлением нового сервера  на Вашем компьютере его было легко  подключить и настроить. 
Для этого при настройке Apacheбыл создан файл vhosts.conf: 
и в конец файла httpd.confдобавлена строчка «Include conf/vhosts.conf», которая подключила этот файл: 
Для того чтобы добавить новый сервер: 
? необходимо создать папку, в директории home, в которой будут расположены серверные папки и файлы; 
? сделать описание этого сервера в файле vhosts.conf; 
? добавить название сервера и IPадрес в файл C:WINDOWSsystem32driversetchosts
Т.к. в файле httpd.confимя сервера мы установили localhostи папку для документов установили home, то это нас не устроит, потому что во всем должен быть порядок (сейчас поймете, о чем идет речь). 
Если мы оставим все как есть, то htmlдокументы, принадлежащие серверу localhost, и новые виртуальные серверы окажутся в одной папке home. Это выглядит не очень красиво и удобно. 
Поэтому мы перенастроим localhost, оформив его в виде виртуального сервера: 
1. Создайте в папке homeпапку localhost, а в ней папку cgi-bin: 
2. Добавьте следующее описание в файл vhosts.conf: 
#----localhost 
DocumentRoot "/home/localhost/" 
ServerName localhost 
ScriptAlias /cgi-bin/ "/home/localhost/cgi-bin/" 
ErrorLog /home/localhost/error.log 
Здесь папка cgi-bin(вместо cgi), htmlфайлы (которые должны располагаться в папке html) и файл error.logбудут находиться в одной папке localhost: 
Эти описания можно было сделать в файле httpd.conf, но если все виртуальные серверы описать в отдельном файле, то строение вашего httpсервера становится более наглядным. 
3. Создайте второй виртуальный хост. 
Допустим, что Ваш сайт расположен в Internetпо адресу http://mysite.ru. Настроим Apache так, чтобы при наборе этого адреса загружался Ваш сайт, без выхода в Internet. 
Для этого в папке homeсоздайте папку mysiteи в папке mysiteпапки cgiи html: 
Опишите данный сервер в файле виртуальных хостов vhosts.conf: 
- задается IP-адрес сервера 
DocumentRoot "/home/mysite/html/" - папка расположения документов 
ServerName www.mysite.ru - имя сервера 
ScriptAlias /cgi-bin/ "/home/mysite/cgi/" - папка с cgi-скриптами 
ErrorLog /home/mysite/error.log - расположение файла ошибок 
CustomLog /home/mysite/access.log common - расположение файла доступа 
- закрываем описание сервера 
#----localhost 
DocumentRoot "/home/localhost/" 
ServerName localhost 
ScriptAlias /cgi-bin/ "/home/localhost/cgi-bin/" 
ErrorLog /home/localhost/error.log 
#----mysite 
DocumentRoot "/home/mysite/html/" 
ServerName www.mysite.ru 
ScriptAlias /cgi-bin/ "/home/mysite/cgi/" 
ErrorLog /home/mysite/error.log 
CustomLog /home/mysite/access.log common 
 
В конец файла С:WINDOWSsystem32driversetchosts
добавьте IPадрес и имя сервера: 
127.0.0.2 mysite.ru 
Перезапустите Apache. 
5) Если Вам понадобиться обратить к сайту mysite.ruна удаленном сервере, то закомментируйте строку: #127.0.0.2 mysite.ru 
в файле С:WINDOWSsystem32driversetchosts
Не забывайте про это, иначе при попытке обращения к удаленному серверу, Вы будете оказываться на своем локальном. 
Что бы этого не делать, лучше виртуальные хосты называть так же, как и на настоящем web – сервере, но только без «суффикса» .ruили .com. В этом случае, используя правило «отсечения суффиксов» можно легко обращаться к «реальному» и «виртуальному» хостам, даже если имеется подключение к Интернет. 
Вы можете использовать любой IPадрес из диапазона 127.0.0.1 – 127.255.255.255. 
На этом настройка сервера окончена. Перезапустите его. Все должно работать: 
 
 
 
Если Вы получаете сообщение об ошибке и номер строки в файле http.conf, где она произошла, то исправьте ошибку и перезапустите сервер. Если ошибок больше нет, то появится показанное выше окно. 

 
Практическая часть.

2.1.Для системы Linux.

Bash скрипт создания виртуальных хостов Apache и Nginx

#!/bin/bash 

 

####### CONFIG START  ######## 

 

OWNER_NAME='username' # Пользователь, которому будет принадлежать директория вирт. хоста

OWNER_GROUP='username' # Группа, которой будет принадлежать директория вирт. хоста

HOME_WWW=~username/www # Домашняя директория для вирт. хостов

HOST_DIRS=('backup' 'logs' 'public_html')

SERVER_IP='127.0.0.1' # IP адрес сервера 

WHEREIS_APACHE=/etc/apache2

WHEREIS_NGINX=/etc/nginx 

APACHE_HOSTS_DIR=$WHEREIS_APACHE'/sites-available'

NGINX_HOSTS_DIR=$WHEREIS_NGINX'/sites-available'

NGINX_HOSTS_ENABLED=$WHEREIS_NGINX'/sites-enabled' 

######## CONFIG END ########## 

# COLORS

SETCOLOR_SUCCESS="echo -en \\033[1;32m"

SETCOLOR_FAILURE="echo -en \\033[1;31m"

SETCOLOR_NORMAL="echo -en \\033[0;39m"

SETCOLOR_NOTICE="echo -en \\033[1;33;40m"  

# FUNCTIONS 

function restart_servers {

    echo 'Перезапускаем Apache'

    /etc/init.d/apache2 reload 

echo 'Перезапускаем Nginx'

    /etc/init.d/nginx reload 

return 1

 

function error_config {

    $SETCOLOR_FAILURE

    echo "$(tput hpa $(tput cols))$(tput cub 6)[Fail]"

    echo '[CONFIG ERROR]: '$1

    $SETCOLOR_NORMAL 

 

    exit

 

function error_force_exec {

    $SETCOLOR_FAILURE

    echo "$(tput hpa $(tput cols))$(tput cub 6)[Fail]"

    echo -n '[FORCE EXEC ERROR]: ' 

 

    if [ -z "$1" ]; then

        echo 'Скрипт не может корректно выполнить все процедуры в автоматическом режиме'

    else

        echo $1

    fi 

 

    $SETCOLOR_NORMAL 

 

    exit

 

function error_failure {

    $SETCOLOR_FAILURE

    echo "$(tput hpa $(tput cols))$(tput cub 6)[Fail]"

    echo '[ERROR]: '$1

    $SETCOLOR_NORMAL 

 

    exit

 

function error_notice {

    $SETCOLOR_NOTICE

    echo '[NOTICE]: '$1

    $SETCOLOR_NORMAL 

 

    return 1

 

# Если запущен с ключем -f, значит  задаем пользователю минимум  вопросов 

# Игнорируются вопросы: 

# - имя директории виртуального  хоста 

# - вопрос о перезапуске серверров  (будут перезапущены) 

 

if [ "$1" == "-f" ]; then

    force_execution=true

else

    force_execution=false

fi 

 

echo 

 

$SETCOLOR_NORMAL  

 

if [ -d $HOME_WWW ]; then

    cd $HOME_WWW

else

    error_config "Директория $HOME_WWW не существует"

fi 

 

# Запрашивает имя домена, пока  не будет введено

function get_domain_name {

    echo -n "Имя домена: "

    read domain_name 

 

    # Если ничего не было введено

    if [ -z $domain_name ]; then

        $SETCOLOR_FAILURE

        echo "Вы не ввели имя домена"

        $SETCOLOR_NORMAL

        get_domain_name

    else

        return 1

    fi

 

# Запрашивает имя директории для виртуального хоста или предлагает создать автоматически

# проверяет его на существование

function get_host_dir {

    echo -n "Имя директории хоста: "

    read host_dir 

 

    # Если ничего не было введено

    if [ -z $host_dir ]; then

        $SETCOLOR_NOTICE

        echo -n "Вы не ввели имя директории хоста. Создать автоматически? [Н/д]? "

        $SETCOLOR_NORMAL 

 

        read answer 

 

            case "$answer" in

            Y|y|д|Д)

                host_dir=${domain_name//\./_}

                host_dir=${host_dir//\-/} 

 

                if [ -d ${HOME_WWW}'/'${host_dir} ]; then

                    error_notice "Автоматический выбор имени директории невозможен. Задайте его самостоятельно"

                    get_host_dir

                else

                    error_notice "Директория хоста будет создана автоматически: $host_dir"

                fi

                return 1

                ;;

            N|n|о|О) get_host_dir

                ;;

            *) get_host_dir

                ;;

            esac

        get_host_dir

    else

        return 1

    fi

 

get_domain_name 

 

if $force_execution; then

    host_dir=${domain_name//\./_} 

 

    if [ -d ${HOME_WWW}'/'${host_dir} ]; then

        error_force_exec

    fi

else

    get_host_dir

fi 

 

# Проверяем пути апача из  конфига

if [ -d $APACHE_HOSTS_DIR ]; then

    if [ -a $APACHE_HOSTS_DIR'/'$domain_name ]; then

        error_failure "Виртуальный хост $domain_name уже существует для Apache"

    fi

else

    error_config "Директория $APACHE_HOSTS_DIR не существует"

fi 

 

# Проверяем пути nginx из конфига

if [ -d $NGINX_HOSTS_DIR ]; then

    if [ -a $NGINX_HOSTS_DIR'/'$domain_name ]; then

        error_failure "Виртуальный хост $domain_name уже существует Nginx"

    fi

else

    error_config "Директория $NGINX_HOSTS_DIR не существует"

fi 

 

echo "Домен: $domain_name" 

 

# Создаем директории виртуального хоста

host_dir_path=${HOME_WWW}'/'${host_dir}

echo "Создаем директории виртуального хоста:" 

 

mkdir $host_dir_path 

 

for dir_name in ${HOST_DIRS[@]}; do

        mkdir $host_dir_path'/'$dir_name

        echo -e "\t $host_dir_path/$dir_name"

done 

 

touch ${host_dir_path}'/public_html/index.html' 

 

# Рекурсивно проставляем права

chown -R $OWNER_NAME:$OWNER_GROUP $host_dir_path 

 

apache_template="<VirtualHost 127.0.0.1:8080>

      ServerAdmin webmaster@$domain_name

      ServerName $domain_name

      ServerAlias www.$domain_name

      DocumentRoot $HOME_WWW/$host_dir/public_html 

 

      ScriptAlias /cgi-bin/ $HOME_WWW/$host_dir/public_html/cgi-bin/

      ErrorLog $HOME_WWW/$host_dir/logs/apache.error.log

      LogLevel warn

      CustomLog $HOME_WWW/$host_dir/logs/apache.access.log combined

</VirtualHost>"  

 

# Создаем конфиг виртуального  хоста apache

echo 'Создаем конфиг виртуального хоста apache:'

touch ${APACHE_HOSTS_DIR}'/'${domain_name}

echo -e "\t"${APACHE_HOSTS_DIR}'/'${domain_name} 

 

temp_ifs=$IFS

IFS=

echo $apache_template > ${APACHE_HOSTS_DIR}'/'$domain_name

IFS=$temp_ifs 

 

# создаем симлинк

a2ensite $domain_name 

 

nginx_template="server {

      listen $SERVER_IP:80; 

 

      server_name $domain_name www.$domain_name;

      access_log  $HOME_WWW/$host_dir/logs/nginx.access.log; 

 

      location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {

            root /home/omm/www/$host_dir/public_html;

      } 

 

 

 

      location / {

            proxy_pass http://backend;

            proxy_redirect off;

            proxy_set_header Host \$host;

            proxy_set_header X-Real-IP \$remote_addr; 

 

            charset utf-8;

            index index.html;

            root $HOME_WWW/$host_dir/public_html;

      }

}" 

 

 

 

# Создаем конфиг виртуального  хоста nginx

echo 'Создаем конфиг виртуального хоста nginx:'

touch ${NGINX_HOSTS_DIR}'/'${domain_name}

echo -e "\t"${NGINX_HOSTS_DIR}'/'${domain_name} 

 

temp_ifs=$IFS

IFS=

echo $nginx_template > ${NGINX_HOSTS_DIR}'/'$domain_name

IFS=$temp_ifs 

 

# создаем симлинк

ln -s $NGINX_HOSTS_DIR'/'$domain_name $NGINX_HOSTS_ENABLED'/'$domain_name 

 

# Перезапускаем сервера

if $force_execution; then

    restart_servers

else

    echo -n 'Перезапустить Apache и Nginx? [Д/н] '

    read restart_answer 

 

    case "$restart_answer" in

        Y|y|д|Д)

            restart_servers

        ;;

        *)

            echo 'Apache и Nginx не были перезагружены'

        ;;

    esac 

 

fi 

 

$SETCOLOR_SUCCESS

echo "$(tput hpa $(tput cols))$(tput cub 6)[OK]"

$SETCOLOR_NORMAL

Конфигурирование  скрипта

В скрипте есть комментарии, но опишу  переменные настройки еще раз.

OWNER_NAME – имя системного пользователя, которому будут принаджелать директории и файлы, создаваемые скриптом для виртуального хоста.

OWNER_GROUP – системная группа, которой будут принаджелать директории и файлы, создаваемые скриптом для виртуального хоста.

HOME_WWW – внутри этой директории будет создана директория виртуального хоста.

HOST_DIRS – директории виртуального хоста, которые будут созданы. По-умолчанию сюда вписана директория для логов apache и nginx, директория для бэкапов и директория, которая будет доступна по http протоколу, собственно, куда и нужно будет класть все файлы вашего сайта.

SERVER_IP – ip адрес вашего сервера. Прописывается в конфигах nginx.

WHEREIS_APACHE – директория установки Apache. Относительно нее будут искаться конфиги виртуальных хостов и прочее.

WHEREIS_NGINX – директория установки Nginx. Относительно нее будут искаться конфиги виртуальных хостов и прочее.

APACHE_HOSTS_DIR – директория, где Apache хранит конфиги для каждого отдельного виртуального хоста. Обычно это sites-available.

NGINX_HOSTS_DIR – директория, где Nginx хранит конфиги для каждого отдельного виртуального хоста. Обычно это sites-available.

NGINX_HOSTS_ENABLED – директория, где хранятся симлинки на конфиги виртуального хоста Nginx. В nginx нет утилиты подобной a2ensite, поэтому нужно знать, куда создать ссылку самим. Обычно данная директория называется sites-enabled.

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

В скрипте есть еще две переменных, которые объявлены почти в  конце листинга: apache_template и nginx_template. В них хранятся шаблоны для  виртуальных хостов. Хотя бы посмотрите, что в них описано, чтобы быть уверенными в том, что конфиги имеют именно тот вид, который вам требуется.

Работа со скриптом

Скрипт может работать в двух режимах.

Простой запуск – запускаете скрипт и отвечаете на его вопросы. Он потребует ввести:

  • имя домена, для которого создаются конфиги;
  • имя директории виртуального хоста;
  • спросит перезагрузить ли сервера, после того, как конфиги будут созданы

Если не задать скрипту имя директории виртуального хоста, то он создает ее автоматически. От перезагрузки серверов можно отказаться. Это удобно, когда  вы планируете создать несколько виртуальных хостов подряд и нет смысла каждый раз заставлять Nginx и Apache делать reload (при reload создается избыточная нагрузка на процессор и потребляется больше памяти. Лучше сделать это один раз, когда все хосты будут добавлены).

Форсированный запуск – это типа автоматического режима. Скрипт задает только один вопрос – о имени домена. Все остальное он делает сам, в том числе перезагружает Nginx и Apache. При этом, если в ходе проверок скрипт выяснит, что выполнить какие-то операции он не сможет, то работа прекратится. Но учтите, что никаких подробных сообщений о проблеме не будет. Скрипт просто скажет, что он не может отработать в автоматическом режиме (скорее всего, конфликты с путями).

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

 

2.2.Для системы Windows.

 

Self-hosting. Скрипт управления Apache.

Для облегчения процесса управления вэб-сервером Apache необходимо создать  командный скрипт реализующий следуюшие  функции

  • инслалляция и деинсталляция службы Apache
  • остановка и запуск службы Apache
  • создание и удаление виртуальных хостов
  • выбор используемого PHP

Создадим папку C:\www, в которой  будут храниться файлы виртуальных  хостов

mkdir C:\www


Создадим шаблон конфигурации виртуального хоста C:\etc\apache\vhost_conf

<VirtualHost *:80>

  ServerName _HOST_

  ServerAlias www._HOST_

  DocumentRoot C:/www/_HOST_

  <Directory C:/www/_HOST_>

    AllowOverride All

    Require all granted

    Options -Indexes +Includes +FollowSymLinks

  </Directory>

#  php_admin_value open_basedir C:/www/_HOST_/

  ErrorLog C:/var/log/apache/_HOST_-error.log

  CustomLog C:/var/log/apache/_HOST_-access.log combined

</VirtualHost>


Создаем скрипт управления Apache C:\usr\bin\apachectl.bat

@echo off

::::::::::::::::--------------------------------------------::::::::::::::::

::

:: Установите  переменную $have_mklink в

::    0 - если  используется XP или 2003

::    1 - если  используется 7 или 2008

::

set $have_mklink=1

::

::::::::::::::::--------------------------------------------::::::::::::::::

call :GetUID

set $_httpd_UID=C:\tmp\%~n0~%UID%

pushd .. & C: & cd \ & call :@%1 %2 %3 %4 %5 %6 %7 %8 %9 & popd & exit /b

:@

:@--help

echo.

echo Использование: %~n0 [опция]

echo.

echo Опции:

echo  --activate        установить и запустить службу Apache

echo  --deactivate      остановить и удалить службу Apache

echo  --install         установить службу Apache

echo  --uninstall       удалить службу Apache

echo  --start           запустить службу Apache

echo  --restart         перезапустить службу Apache

echo  --stop            остановить службу Apache

echo  --test            проверить конфигурацию Apache

echo  --create-host     создать виртуальный хост

echo  --delete-host     создать виртуальный хост

echo  --use-php         задать используемую версию PHP

echo  --version         показать версию Apache

echo  --php-version     показать версию PHP

echo  --help            этот экран

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--delete-host

if "%~1"=="" echo Не задано имя виртуального хоста & exit /b

set $_host=%~1

call :locase $_host

if exist C:\etc\apache\vhost\%$_host%.conf del C:\etc\apache\vhost\%$_host%.conf /Q

type %windir%\system32\drivers\etc\hosts | grep -v "127.0.0.1 %$_host% www.%$_host% # Apache Virtual Host">%$_httpd_UID%

type %$_httpd_UID% > %windir%\system32\drivers\etc\hosts

del %$_httpd_UID% /Q

call :FlushDNS

call :@--restart

if exist C:\www\%$_host%\nul rmdir C:\www\%$_host% /S /Q

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--create-host

if "%~1"=="" echo Не задано имя виртуального хоста & exit /b

set $_host=%~1

call :locase $_host

if not exist C:\www\%$_host%\nul (

  mkdir C:\www\%$_host%

  echo # %$_host% # www.%$_host%>C:\www\%$_host%\.htaccess

  echo User-agent: *>C:\www\%$_host%\robots.txt

  echo Disallow: />>C:\www\%$_host%\robots.txt

  echo ^<html^>> C:\www\%$_host%\index.php

  echo ^<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /^>>> C:\www\%$_host%\index.php

  echo ^<title^>Welcome^</title^>>> C:\www\%$_host%\index.php

  echo ^<body^>>> C:\www\%$_host%\index.php

  echo ^<H2^>Welcome to ^<?php echo $_SERVER['SERVER_NAME']; ?^>^</H2^>>> C:\www\%$_host%\index.php

  echo ^</body^>>> C:\www\%$_host%\index.php

  echo ^</html^>>> C:\www\%$_host%\index.php

)

if not exist C:\etc\apache\vhost\%$_host%.conf type C:\etc\apache\vhost_conf | sed s/_HOST_/%$_host%/ > C:\etc\apache\vhost\%$_host%.conf

type %windir%\system32\drivers\etc\hosts | grep -v "127.0.0.1 %$_host% www.%$_host% # Apache Virtual Host">%$_httpd_UID%

echo 127.0.0.1 %$_host% www.%$_host% # Apache Virtual Host>>%$_httpd_UID%

type %$_httpd_UID% > %windir%\system32\drivers\etc\hosts

del %$_httpd_UID% /Q

call :FlushDNS

call :@--restart

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:FlushDNS

ipconfig /flushdns >nul

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--use-php

if "%~1"=="" echo Не задана версия PHP ^(На пример 5.4.4^) & exit /b

if "%~2"=="" echo Не задан тип PHP ^(TS или NTS^) & exit /b

set $_php_version=%~1

set $_php_mode=%~2

call :locase $_php_mode

if "%$_php_mode%"=="ts" goto :_php_mode_is_valid

if "%$_php_mode%"=="nts" goto :_php_mode_is_valid

echo Не правильный тип PHP ^(TS или NTS^) & exit /b

:_php_mode_is_valid

set $php_dir=C:\php%$_php_version:.=\%\%$_php_mode%

if not exist %$php_dir%\nul echo Папка %$php_dir% не найдена

call :@--stop

call :$mklink%$have_mklink%

echo Define PHP_%$_php_mode% > C:\etc\apache\php_define.conf

call :@--test

call :@--php-version

call :@--start

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:$mklink0

rmdir C:\php /S /Q

xcopy %$php_dir% C:\php\ /S /E /Q

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:$mklink1

rmdir C:\php

mklink /D C:\php %$php_dir%

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--php-version

php -v

php -i | grep "Thread Safety"

php -i | grep "Architecture"

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--version

httpd -v

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--test

httpd -t

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--stop

httpd -k stop

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--start

httpd -k start

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--restart

httpd -k restart

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--install

httpd -k install

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--uninstall

httpd -k uninstall

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--activate

call :@--install

call :@--start

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:@--deactivate

call :@--stop

call :@--uninstall

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:locase

if not defined %~1 exit /b

for %%a in (

"A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m"

"N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z"

) do call set %~1=%%%~1:%%~a%%

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::

:GetUID

set i=26

set n=16

set char=0 1 2 3 4 5 6 7 8 9 A B C D E F

set UID=<nul

:loop

set /a r=1+%n%*%RANDOM%/32768

for /f "tokens=%r%" %%q in ("%char%") do (set UID=%%q%UID%)

set /a i-=1

if %i% GTR 0 goto loop

exit /b

::::::::::::::::--------------------------------------------::::::::::::::::


 

Для корректного отображения выводимых  сообщений необходимо сохранить  файл C:\usr\bin\apachectl.bat в кодировке CP866

Для Windows XP и Windows Server 2003 перед сохранением  файла необходимо строку

set $have_mklink=1


заменить на

set $have_mklink=0


 

При использовании скрипта управления Apache следует помнить, что

  • При своей работе скрипт преобразует имя виртуального хоста в нижний регистр и создает алиас имени виртуального хоста с префиксом www
  • При создании виртуального хоста скрипт делает запись в системный файл hosts

127.0.0.1 ИМЯ_ХОСТА www.ИМЯ_ХОСТА # Apache Virtual Host


  • Скрипт не поддерживает создание виртуальных хостов с кириллическим именем (IDN)
  • Показ содержимого папок без индексного файла запрещен
  • При удалении виртуального хоста происходит физическое удаление файла конфигурации и папки виртуального хоста, а также удаляется запись из системного файла hosts

 
Для проверки работоспособности скрипта  создадим виртуальный хост pma, который в дальнейшем будем использовать для phpMyAdmin

Для этого выполним команду

apachectl --create-host pma


И проверим правильность выполненных  действий.

Нет похожих записей.

Rating: 10.0/10 (3 votes cast)

Rating: +3 (from 3 votes)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.Список литературы.

1. Армстронг Д. Секреты UNIX. -М.:Вильямс, 2001.

2. Колисниченко Д.Н. Linux-сервер своими  руками. -СПб. Наука и техника, 2004.

3. Костромин В. Самоучитель Linux для пользователя. -СПб.:БХВ-Петербург, 2004.

4. Уилсон Э. Руководство по  сценариям Windows PowerShell. -М.:ЕСОМ, 2009.

5. Немет Э. Руководство администратора Linux. -М.:Вильямс, 2003.

6. Робачевский А. Операционная  система UNIX / Уч. пос. -СПб.:БХВ-Петербург, 2003.

7. Шредер К. Linux. Сборник рецептов. -СПб.:Питер, 2006.

8. Свиридов С.В. Системные вызовы  ОС UNIX.-М.:Память, 1992.

9.Такет Д., Барнет С. Специальное  издание. Использование LINUX. Пер.  с англ.-  4-е изд.-К.:, Н.:, СПб.: Издательский  дом «Вильямс», 1999.