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

Автор: Пользователь скрыл имя, 20 Декабря 2012 в 20:19, курсовая работа

Описание работы

Работающий Webсервер и СУБДтребуются при создании Интернет проектов с использованием современных технологий. Наилучший вариант — это установка локального Webсервера на тот же ПК, где создается Интернет проект. Этот ПК всегда доступен по IP-адресу 127.0.0.1, что эквивалентно доменному имени localhost. Поэтому для доступа к Webсерверу через браузер можно использовать адрес http://localhost. При использовании локального сервера все изменения в файлах доступны через браузер сразу же. Когда все скрипты будут отлажены, можно зайти в Интернет и скопировать их на сервер хостинг-провайдера.

Содержание

Вступ
1. Теоретична частина
Проектна частин
2.1 Постановка задачі.
2.2. Розробка алгоритма рішення задачі.
Програмна реалізація алгоритма.
Опис розробленої програми.
Висновки
Список використаних джерел
Додатки
А. Інструкції по використанню програмних модулів.
Б. Лістінг програмних модулів
В. Протокол виконання програми

Работа содержит 1 файл

курсак по СПЗ.doc

— 448.00 Кб (Скачать)

        $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.


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