Программа, ожидающая подключение, называется сервером. Серверу при запуске указывается номер порта, часто говорят: "сервер слушает порт". На компьютере не может быть запущено более одного сервера с одинаковым номером порта (иначе невозможно определить, к какому из серверов подключаться). Программа, устанавливающая соединение с сервером, называется клиентом. На клиентов не распространяется подобное ограничение (например, можно запустить два джаббер-клиента). Также к серверу могут подключаться несколько клиентов с разных компьютеров, если это поддерживает сам сервер.

Теперь давайте на основе этих поверхностных знаний определим, что такое веб-сервер. Во-первых, судя по названию, это сетевая программа, ожидающая и принимающая соединения (сервер). По умолчанию, веб-сервер "слушает" порт под номером 80. Веб-сервер поддерживает работу одновременно с несколькими клиентами (несколько человек одновременно могут просматривать сайт). Клиентом для веб-сервера выступает веб-браузер (Internet Explorer, Opera и так далее).

Таким образом, сайт функционирует за счет веб-сервера, который отправляет странички этого сайта клиентам, запрашивающих их у него. Для того, чтобы запросить страницу необходимо знать IP-адрес компьютера, на котором запущен веб-сервер с нужным нам сайтом. Но запоминать IP-адреса неудобно, поэтому придумали доменные имена, представляющие собой некую текстовую сущность (например, *****). Очевидно, что доменные имена более понятны и более легки в запоминании. Однако, протокол TCP/IP не в состоянии найти требуемый компьютер по доменному имени, поэтому его необходимо преобразовать в IP-адрес. Для этого служат DNS-сервера, на которых расположены таблицы соответствий доменных имен и IP-адресов. Допустим, когда мы вводим в адресной строке браузера домен *****, в первую очередь посылается запрос в DNS-сервер для определения IP-адреса данного домена. Когда адрес определен, браузер пытается связаться с веб-сервером по этому адресу и по стандартному порту под номером 80. Если соединение с веб-сервером установлено, браузер запрашивает у веб-сервера требуемую страницу сайта.

НЕ нашли? Не то? Что вы ищете?

В принципе, веб-сервер можно настроить на работу и на другом порту, в таком случае в браузере при запросе страницы необходимо его указывать через двоеточие после доменного имени (например, *****:3182).

Каким же образом происходит запрос страницы сайта у веб-сервера браузером? Понятное дело, что для взаимодействия веб-сервера и браузера необходим "общий язык", то есть некий стандарт, по которому формируются запросы и ответы. Этим стандартом служит протокол HTTP (HyperText Transfer Protocol). Этот протокол довольно прост, так как соответствует схеме "запрос-ответ". Говоря другими словами, на каждый HTTP-запрос веб-браузера веб-сервер отвечает HTTP-ответом. По своей инициативе веб-сервер HTTP-пакеты не шлет (к тому же, зачастую, после завершения операции "запрос-ответ" сервер разрывает соединение с клиентом).

Давайте рассмотрим структуру HTTP-пакета. HTTP-запрос и HTTP-ответ состоят из двух блоков — блока заголовков (headers) и блока тела пакета. Эти блоки отделены друг от друга двумя символами перевода строк (то есть между заголовками и телом расположена пустая строка). В блоке заголовков расположены различные параметры пакета, блок тела содержит какие-либо данные. Второй блок может отсутствовать, то есть HTTP-пакет может состоять только из блока заголовков. Для примера выполним запрос главной страницы сайта ***** и рассмотрим HTTP-пакеты, участвовавшие в нем. При запросе главной страницы браузер Firefox отправил веб-серверу следующий HTTP-запрос:

01.GET / HTTP/1.1

02.Host: *****

03.User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/ Firefox/3.6

04.Accept: text/html, application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8

05.Accept-Language: ru, en-us;q=0.7,en;q=0.3

06.Accept-Encoding: gzip, deflate

07.Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7

08.Keep-Alive: 115

09.Connection: keep-alive

В HTTP-запросе отсутствует блок данных (так как отсутствует пустая строка, которая бы отделяла заголовки от данных). Давайте рассмотрим представляющие для нас в данный момент интерес строки этого запроса. Во-первых, самая первая строка:

1.GET / HTTP/1.1

"GET" — тип запроса. Два наиболее распространенных типа запросов — это GET и POST. О них мы поговорим в одной из следующих статей или уроков. "/" указывает на то, что запрашивается главная страница сайта. В противном случае здесь указывается путь и имя запрашиваемой страницы или файла. "HTTP/1.1" — версия протокола HTTP.

1.Host: *****

Параметр Host содержит домен сайта, к которому происходит обращение.

1.User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/ Firefox/3.6

User-Agent содержит информацию о клиенте: тип браузера, операционной системы и так далее. Остальные параметры в данный момент нас особо не интересуют.

На данный HTTP-запрос веб-сервер ответил следующим HTTP-ответом:

01.HTTP/OK

02.Server: nginx

03.Date: Thu, 25 Feb 2010 12:31:25 GMT

04.Content-Type: text/html; charset=utf-8

05.Last-Modified: Tue, 12 Jan 2010 15:29:06 GMT

06.Transfer-Encoding: chunked

07.Connection: keep-alive

08.Content-Encoding: gzip

09. 

10.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

11.<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

12.<title>Яндекс</title>

13....

Пустая строка указывает на наличие блока данных (тела пакета). Как и в случае с HTTP-запросом рассмотрим наиболее важные строки полученного ответа. В первой строке указывается версия протокола HTTP (HTTP/1.1) и код результата. Код результата 200 означает, что запрос выполнен успешно. В описании протокола HTTP расписаны все коды результатов. С некоторыми из них, например, 403 и 404, мы познакомимся в будущем.

1.Server: nginx

Параметр Server содержит название веб-сервера. В нашем случае мы имеем дело с веб-сервером nginx. Данный параметр может отсутствовать в HTTP-ответе, если администратор данного сервера по каким-либо причинам не желает оглашать эту информацию.

1.Content-Type: text/html; charset=utf-8

Content-Type содержит тип переданных данных и, если необходимо, их кодировку (charset). Также в заголовках часто содержится параметр Content-Length, содержащий размер переданных сервером данных в байтах. В блоке тела пакета содержится код запрошенной страницы.

Ход работы

Задание 1. Установка Apache

Первым делом поставим сам Веб-сервер Apache, что логично. Для этого заходим на сайт www. apache. org, и скачиваем оттуда самого Апача: ссылка на файл должна выглядеть примерно так:

Apache 1.3.xx Win32 Binary (Self extracting)

Примечание:

Будет все рассказывать на примере Apache версии 1.3.33. Он довольно стабилен и проблем с его установкой и настройкой не возникало.

Итак, Вы скачали Apache. Название файла выглядит примерно как apache_1.3.33-win32-x86-no_src. exe. Открывайте этот файл. Бегут буковки, циферки и в результате Вы видите следующее окно:

Значит, Вы скачали то, что нужно и сейчас начнется инсталляция: Жмите Next.

Появится окно с лицензионным соглашением. Выберите пункт I accept the terms in the license agreement и жмите Next.

В следующем окне тоже жмите Next.

Теперь должно появиться окно:

Первое поле - название домена. Допустим, напишите *****

Второе поле - название сервера. Допустим, www. *****

Третье поле - e-mail адрес администратора. Напишите что - нибудь, вроде *****@***ru

Примечание:

Если Вы будете использовать свой Веб - сервер только для тестирования скриптов на локальном компьютере - то неважно, что Вы там напишите. После установки, если захотите, можете переправить эти поля.

Ниже выберите пункт Run as a service for Al Users.

Жмите Next.

В следующем окне выберите пункт Complete и нажмите Next.

Теперь Вас спросят, куда ставить Apache. Советую, не мудрствуя лукаво, ставить в папку по умолчанию: C:\Program Files\Apache Group\

Жмите Next.

Вам напишут, что все готово к установке. Нажмите Install, чтобы ее начать.

Если все прошло успешно, по окончанию инсталляции Вы увидите окно

Жмите Finish. Вот и все! Мы установили самый лучший Веб - сервер в мире - Apache!

Задание 2. Установка php

Сперва нам надо получить сам php. Заходим на сайт http://www. / и качаем оттуда ZIP-архив Windows Binaries (PHP 5.x. x Zip package).

Не стоит качать "PHP 5.x. x installer" - так как там отсутствуют многие необходимые нам файлы!

Далее распаковываем архив в C:\php, хотя Вы можете распаковать куда хотите, но в дальнейшем я буду описывать настройку, полагая, что он у Вас все - таки в C:\php :

Вот и все, php мы установили. Если захотите его стереть, то надо будет всего навсего удалить папку c:\ php, а не через Установку и Удаление. Идем дальше:

Задание 3. Установка perl

Установим интерпретатор другого популярного языка для web - кодинга - Perl. Для Win32 нам нужен не обычный Перл, который изначально создавался под *nix - системы, а уже скомпилированная под Windows версия - Active Perl (хотя, если есть желание, то можете скачать исходники и скомпилировать сами Perl под Win32). Качаем его с сайта www. .

Рассмотрим на примере Active Perl 5.8.0, так как его установить будет проще - он имеет привычный графический Windows - инсталлятор (хотя, если хотите, можете поставить свежачок - Active Perl 5.8.6. Он имеет консольную инсталляцию и устанавливается тоже очень просто. Подробно об установке этой версии можете прочитать тут http://. ru/?s=4;f=5).

Итак, мы скачали файл. Он выглядит примерно, как ActivePerl-5.8.0.805-MSWin32-x86.msi - обычный Win - инсталлятор. Запускаем и видим окно:

Жмем Next.

Появится окно с лицензионным соглашением. Выберите пункт I accept the terms in the license agreement и жмите Next.

Выбираем, куда ставить Perl. Я советую сменить имя директории на C:\usr.

Примечание:

Это следует сделать по следующей причине: если Вы тестируете скрипты на локальной машине, то наверняка потом выкладываете на Web - сервер. А хорошие сервера, как известно, работают под *nix - системами. В начале перл - скрипта Вы пишете путь к интерпретатору перла. Обычно на сервере он выглядит как

#!/usr/bin/perl.

А если на локальной машине Перл у Вас будет стоять в папке, скажем, С:\Perl, то первая строчка будет выглядеть так #!/Perl, и после тестирования скриптов и перед их закачкой на сервер, Вам придется менять первую строчку во всех Ваших скриптах.

В следующем окне жмем Next (не надо ставить галочку).

В следующем окне оставляем галочки, где они стоят и жмем Next

Должно появиться окно:

Теперь все готово к инсталляции, жмем Install.

Инсталляция завершена. Жмем Finish. Мы уже установили сам веб - сервер и интерпретаторы 2 самых популярных языков программирования в Вебе - PHP и Perl. Но на этом установка не закончилась.

Каждый веб - мастер, пишущий серьезные проекты использует базы данных, а самой популярной, удобной и простой в использовании базой данных является, безусловно, MySQL. Не стоит откладывать этот шаг до лучших времен - давайте лучше сразу все установим и получим полноценный рабочий Веб - сервер со всеми наворотами.

Задание 4. Установка MySQL

Как обычно, сначала нам надо скачать эту красоту. Делаем это тут: http://www. /

В разделе Downloads. Выбирайте там самую последнюю версию под Windows и скачивайте. Я буду рассказывать на примере MySQL 4.1.9, хотя инсталляция более новых ничем не отличается от этой. Дистрибутив представляет собой zip - архив, который надо куда - нибудь развернуть.

Теперь запускайте файл setup. exe. Должно появится окошко:

Жмем Next.

В следующем окне выбираем тип установки Custom. Жмем Next.

Щелкаете по кнопке Change и меняете путь на C:\Program Files\MySQL\

Жмете Next.

Все готово к установке, жмем Install.

Появится окно:

Выбираем нижний пункт и жмем Next.

В следующем окошке ставим галочку и давим Next.

Появится окно Configuration Wizard

Ну что ж, будем конфигурировать:. Жмем Next.

Выбираем Detailed Configuration и жмем Next.

Выбираем Developer Machine и жмем Next.

Выбираем Multifunctional Database и давим Next.

Появится окно:

Оставляем все, как на рисунке и нажимаем на Next.

Выбираем пункт Decision Support (DSS)/OLAP и опять жмем Next.

Оставляем галочку Enable TCP/IP Networking, номер порта оставляем 3306 и давим на Next.

Выбираем Standart Character Set и жмем Next.

Ставим галку напротив Install As Windows Service, имя оставляем MySQL, а с Launch the MySQL Server automatically снимаем. Хотя если хотите, то можете оставить, но она будет постоянно висеть в памяти и кушать ресурсы (хоть и не большие, где-то 9 мегабайт). Лично я предпочитаю все запускать вручную, когда понадобится.

Жмем Next.

Ставим галку напротив Modify Security Settings, пишем пароль рута (так в *nix системах зовется администратор), потом подтверждаем во втором поле и жмем Next.

Теперь жмем Execute

Жмем Finish.

Примечание:

Запускается и останавливается сервер MySQL соответственно командами

net start mysql

net stop mysql

Задание 5. Настройка работы Apache

Сперва так настроим Apache, чтобы нам было удобно работать с нашим сервером. Основные настройки сервера храняться в файле httpd. conf, который находится по адресу c:\Program Files\Apache Group\Apache\conf\httpd. conf (если Вы, конечно, установили его туда как я описывал в первой части). Это обычный текстовый файл, открывайте его блокнотом.

1) Первым делом ищем строчку

DocumentRoot "C:/Program Files/Apache Group/Apache/htdocs" и меняем ее на

DocumentRoot "C:/www/html"

Теперь объясню, зачем мы это сделали. Не очень удобно делать так, чтобы все html - страницы Вашего сайта находились по адресу C:\Program Files\Apache Group\Apache\htdocs. Гораздо удобнее, когда все HTML - документы на Вашем сервере лежали бы в одной папке C:\www\html.

Обратите внимание, что в пути вместо стандартного для Win - систем обратного слэша "\" используется прямой - "/". Это объясняется тем, что Apache разрабатывался изначально под *nix - системы, а там везде вместо "\" используется "/".

2) Теперь ищем строчку

ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/"

и меняем ее на 2 следующие строчки:

ScriptAlias /cgi/ "C:/www/cgi/"

ScriptAlias /cgi-bin/ "C:/www/cgi/"

Тут мы делаем, таким образом, 2 вещи: первая, что все cgi - скрипты будут располагаться в папке c:\ www\cgi. Делается это также исключительно для удобства. А вторая, что для каталога C:/www/cgi создается 2 псевдонима. Таким образом, если будет указан путь http://localhost/cgi или http://localhost/cgi-bin , то на самом деле обращение будет идти к одной и той же папке c:\www\cgi

3) Ищем секцию <Directory "C:/Program Files/Apache Group/Apache/htdocs"> и заменяем ее содержимое на следующее:

<Directory "C:/www">

Options Indexes Includes

AllowOverride All

Allow from all

</Directory>

Тут мы задаем ряд настроек по умолчанию для нашего каталога c:\www и всех подкаталогов, которые в нем содержатся: автоматическую генерацию списка содержимого каталога при просмотре его в браузере, поддержку SSI, возможность использовать файлы. access для индивидуальной настройки каталогов.

4) Ищем строчку

#AddHandler cgi-script. cgi

стираем перед ней комментарий и добавляем. bat. exe

В результате строчка принимает вид:

AddHandler cgi-script. cgi. bat. exe

Тут мы указываем серверу, что файлы с расширениями. bat, .exe, .cgi надо рассматривать как cgi - модули

5) Ищем строчки

#AddType text/html. shtml

#AddHandler server-parsed. shtml

И меняем их на

AddType text/html. shtml

AddHandler server-parsed. shtml. html. htm

Здесь мы указываем серверу, файлы с какими р будут обрабатываться как SSI.

Примечание

SSI (Server Side Include) - технология, которая позволяет включать в WEB - страницу "внешние" файлы (будь то другая html - страница или скрипт, находящийся в папке cgi). Таким образом можно строить сайт как бы по кирпичикам.

6) Не забудьте сохранить изменения в файле httpd. conf

Общая настройка Apache закончена. Нажмите Пуск -> Выполнить, введите команду

net start apache.

Теперь если в адресной строке браузера Вы введете http://localhost, то высветится страничка index. html, расположенная в папке c:\www\html, а если ее там нет, то список файлов в этой папке.

Задание 6. Настройка связки Apache + PHP5

1) Скопируйте файл php5ts. dll из папки C:\php в папку C:\WINDOWS\SYSTEM32

2) Скопируйте файл php. ini-dist из папки C:\php в каталог C:\WINDOWS и переименуйте его в php. ini, откройте в блокноте, найдите переменные, указанные ниже и установите их значения, как написано ниже:

register_globals = off

magic_quotes_gpc = off

magic_quotes_runtime = off

error_reporting = E_ALL # - и именно так, никаких E_ALL & ~E_NOTICE и пр.!

display_errors = on

Примечание:

Если Вы начинающий программист на PHP, то советую Вам установить значение register_globals = on. Объясню почему: почти во всех руководствах по РНР пишут, что даные, полученные из формы, или переданные по ссылке, вот так: http://localhost/my_script. php? variable1=x&variable2=y автоматически становятся переменными PHP, $x и $y. Но эта информация немного устарела.

Приведу по этому поводу отрывок с сайта http://*****

"Дело в том, что в целях безопасности, начиная с версии 4.1, РНР настраивается по умолчанию так, чтобы переданные значения не назначались переменным.

Получить же переданное значение можно обратившись к соответствующему массиву.

Например:

Если передаем методом GET, обратившись к скрипту по ссылке вида

script. php? var=value

или отправив форму, указав в ней method="GET",

то все переменные содержатся в массиве $_GET.

echo $_GET['var']; напечатает "value".

Если получаем данные из формы, отправленной методом POST, то все поля этой формы содержатся в массиве $_POST. Допустим, в форме был элемент

<input type="hidden" name="var" value="1">,

то в скрипте, который указан в action формы, можно написать echo $_POST['var']; и будет выведена 1.

Поэтому, если вы уверены, что переменная есть, но вы не можете ее найти - ищите ее в суперглобальных массивах.

Подробнее о них можно почитать на русском языке в официальной документации http:///variables. predefined

То же касается и серверных переменных, таких, как $REMOTE_ADDR, $PHP_SELF. Получить их можно, обратившись к массивам $_SERVER, $_ENV или функцией getenv - getenv('HTTP_REFERER');

Переменные, зарегистрированные в сессии, следует искать в массиве $_SESSION.

Данные cookie содержатся в массиве $_COOKIE, сведения о закачанных файлах - в $_FILES

Переменные окружения - в $_ENV, а так же, существует массив $_REQUEST, в котором собраны данные из GET, POST и cookie.

Важно! Весьма в поисках переменных помогает одна их главных функций PHP - phpinfo() ее следует применять всякий раз, когда вы "потеряли" переменную, вызовите phpinfo(32); в скрипте, в котором не работает авторизация, в скрипте, который принимает файл при аплоаде - и все найдется!

За назначение переменных отвечает параметр register_globals в php. ini.

Если register_globals=on, то все полученные скриптом данные будут назначены соответствующим переменным.

Разработчики PHP настоятельно рекомендуют выключать register_globals (такой режим даже введен по умолчанию во всех новых версиях) и пользоваться данными, полученными от пользователя, только обращаясь к соответствуюим массивам.

Это сделано потому, что при register_globals = on легко взломать небрежно написаный скрипт.

К примеру, функция авторизации выставляет переменную $admin=1, а если авторизации не было, то не делает ничего. В таком скрипте при register_globals=on очень легко стать админом, просто обратившись к нему script. php? admin=1

К тому же, register_globals = off заставляет пользоваться суперглобальнми массивами ($_GET, $_POST и т. д.), что помогает избежать путаницы. ОЧЕНЬ много людей, записав некую переменную в сессию, а потом пытаясь изменить ее значение, передавая ее скрипту методом GET, долго не могли понять, почему у них ничего не работает? Поэтому очень важно при работе с сессиями, при любых настройках (и особенно - при register_globals=on!) работать только с массивом $_SESSION, как это описано в соответствующем разделе.

То есть, register_globals=off - на самом деле не цель, а средство. Побудительный мотив для программиста писать защищенные скрипты и избегать путаницы.

Если вы хотите написать скрипт, не зависящий от настройки register_globals, и при этом защищенный - переменные надо объявлять перед использованием. На это нацелена еще одна инициатива разработчиков PHP - написание программ при уровне отображения ошибок (error_reporting) равном E_ALL, при котором об использовании необъявленных переменных выдаются предупреждения.

Именно объявление ВСЕХ переменных, используемых в скрипте и является гарантией от взлома. Если вы пишете программу для распространения, то гарантией ее безопасности является только объявление переменных.

Если же нет возможности переделать готовый скрипт, но его надо заставить работать при register_globals=off, то надо помнить, что во-первых, вы делаете потенциальную дыру у себя на сайте, а во-вторых, для этого можно воспользоваться функциями extract и import_request_variables

НО: Бездумное использование этих функций является таким же опасным!

Если вы хотите адаптировать старый скрипт под новые правила, то выполните приведенный код именно в таком порядке!

import_request_variables("GPC");

extract($_SERVER);

сначала назначаются переменные, пришедшие от юзера, а потом - предопределенные серверные, чтобы первые не могли затереть одноименные серверные.

ВАЖНО!!! Этот код должен вызываться как можно раньше в скрипте. ДО любого кода и присвоения переменных. Поскольку он являет собой дыру похлеще register_globals=on!

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

Последние версии PHP сообщают вам об этом нотайсом при использовании import_request_variables.

И то правда - три года прошло с тех пор, как введены новые правила. Пора бы уже и научиться писать скрипты правильно.

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

Все то же самое можно прочесть и в документации: http://www. /manual/ru/security. globals. php"

3) Настроим PHP двумя способами: как модуль Апача и как CGI - бинарник

4) Настройка PHP, как модуля Apache:

В файл конфигурации Apache httpd. conf добавляем:

LoadModule php5_module C:/php/php5apache. dll

(хотя может быть и LoadModule php5_module C:/php/sapi/php5apache. dll. Зависит от Вашей версии PHP. У меня 5.0.3 и этот файл лежит, как в первом случае )

После последней директивы AddModule добавляем строку

AddModule mod_php5.c

Внутри блока <IfModule mod_mime. c> добавляем строку

AddType application/x-httpd-php. php

В строке DirectoryIndex надо прописать еще index. php:

DirectoryIndex index. php index. html

5) PHP, как CGI - бинарника:

В файл конфигурации Apache httpd. conf добавляем:

Внутри блока <IfModule mod_mime. c> добавляем строку:

AddType application/x-httpd-php. php

ПРАКТИЧЕСКАЯ РАБОТА №6

Тема работы: Создание и настройка виртуального сервера.

Цель работы: научиться создавать и настраивать виртуальный сервер SMTP.

Теоретическая часть

Для осуществления отправки сервером WS03 электронной почты с помощью SMTP на нем должна работать служба SMTP. Если служба SMTP установлена и работает, для ее использования необходимо создать виртуальный сервер SMTP. По умолчанию он создается при установке службы SMTP. Для добавления другого виртуального сервера SMTP используйте мастер из консоли Computer Management (Управление компьютером), который выполняет базовую настройку виртуального сервера SMTP. В отличие от FTP - и Web-серверов, являющихся частью IIS, виртуальные серверы SMTP не могут создаваться из файлов конфигурации или экспортироваться. Также отсутствует сценарий администрирования SMTP и создания виртуальных серверов SMTP. Мастер создания виртуальных SMTP-серверов (New SMTP Virtual Server Wizard) предназначен только для создания администратором нового виртуального сервера SMTP.

Ход работы

Каждый параметр виртуального сервера SMTP, за исключением домашнего каталога, можно изменить позже (после создания) с помощью окна Properties (Свойства) консоли Computer Management (Управление компьютером). Для создания виртуального сервера SMTP с помощью New SMTP Virtual Server Wizard (Мастера создания виртуальных SMTP-серверов) выполните следующие действия.

1.Щелкните правой кнопкой мыши на узле Internet Information Services Manager (Диспетчер IIS) в левой части консоли MMC и выберите команду New\SMTP Virtual Server (Создать\Виртуальный сервер SMTP).

2.Откроется окно мастера. Введите имя создаваемого сайта Имя должно быть информативным, по которому можно идентифицировать сайт. Введенное здесь имя будет отображаться рядом с узлом виртуального SMTP-сервера в консоли Computer Management.

Запрос

Рис. 1  - Запрос имени виртуального сервера SMTP в мастере создания виртуальных SMTP-серверов

3.Нажмите на кнопку Next (Далее) для продолжения работы.

4.В следующем окне введите IP-адрес (см. рис. 2). Этот IP-адрес используется сообщениями, передаваемые и принимаемые главным сервером. Значением по умолчанию является (All Unassigned) (Все незанятые), однако при наличии нескольких IP-адресов они отобразятся в ниспадающем списке. Так как этот список основан на исключениях, при отсутствии значения в списке администратор не сможет указать его в поле. Если главный сервер имеет только один IP-адрес (как в нашем примере), разрешается выбрать только одно значение – (All Unassigned) (Все незанятые). Оставьте это значение в поле и нажмите на кнопку Next (Далее).

Окно


Отобразится окно Select Home Directory (Выбор домашнего каталога). Домашним каталогом является путь к месту расположения на главном сервере, в которое SMTP-служба записывает сообщения и файлы, относящиеся к виртуальному SMTP-серверу. В этом каталоге для любого виртуального сервера SMTP создаются следующие подкаталоги.

    BadMail. Каталог для записи сообщений, вернувшиеся с отчетом о невозможности доставки. Drop. Каталог для записи всех входящих сообщений данного домена. Pickup. Каталог для записи сообщений, используемых службой сообщений. Queue. Каталог, в котором сообщения электронной почты ставятся в очередь для использования удаленно инициированной доставкой при наличии поддержки удаленного домена.

Выберите путь к домашнему каталогу. Нажмите на кнопку Browse (Обзор) для перехода к нужному месту расположения (при необходимости).

Окно


Рис. 3 -  Окно выбора домашнего каталога мастера создания виртуальных SMTP-серверов

5.  После указания пути нажмите на кнопку Next (Далее) для открытия окна Default Domain (Домен по умолчанию). Доменом по умолчанию является имя домена, присоединяемое к данному имени учетной записи в процессе аутентификации. Введите значение в текстовое поле (см. рис. 4.6) и нажмите на кнопку Finish (Готово). Мастер сгенерирует новый виртуальный сервер SMTP.

Указание имени домена по умолчанию

Рис. 4 -  Указание имени домена по умолчанию

Конфликт IP-адреса и порта

Если виртуальный SMTP-сервер уже настроен на главном сервере, и IP-адрес для имеющегося виртуального сервера SMTP тот же самый, что указан в окне Select IP Address (Выбор IP-адреса), то отобразится сообщение об ошибке (см. рисунок ниже). Если у вас возникли сомнения, нажмите на кнопку Yes (Да), что не вызовет никаких проблем в текущей работе служб виртуальных каталогов SMTP-сервера. IP-адрес и порт для нового виртуального каталога SMTP можно сменить позднее. При наличии конфликта между IP-адресами нового и имеющегося SMTP-сервера новый виртуальный сервер будет остановлен после создания, сбоев в работе имеющегося виртуального каталога SMTP не произойдет.

Настройка виртуального сервера SMTP

После создания нового виртуального SMTP-сервера администратору, скорее всего, нужно будет настроить некоторые функции. Это делается двумя способами: в окне Properties (Свойства) самого виртуального SMTP-сервера либо в окне Properties каждого домена виртуального сервера SMTP. Используя эти окна, можно сконфигурировать виртуальный сервер SMTP в соответствии с требованиями организации к работе с сообщениями.

Открытие окна свойств виртуального сервера SMTP

Для открытия окна Properties (Свойства) виртуального SMTP-сервера выполните следующие действия.

1.  Откройте оснастку MMC Computer Management (Управление компьютером) и щелкните на узле Services And Applications (Службы и приложения) в левой части консоли, чтобы отобразить доступные подчиненные узлы.

2.  В узле Services And Applications (Службы и приложения) расположен узел Internet Information Services Management (Управление IIS). Щелкните на этом узле для отображения вложенных узлов.

3.  Щелкните правой кнопкой мыши на узле виртуального сервера SMTP в левой части консоли и выберите Properties (Свойства). Откроется окно Properties, в котором находятся параметры виртуального сервера, предназначенные для настройки администратором.

Открытие окна свойств домена в виртуальном сервере SMTP

Для открытия окна Properties (Свойства) домена виртуального сервера SMTP выполните следующие действия.

1.  Откройте консоль Computer Management (Управление компьютером) и найдите виртуальный сервер SMTP, к которому относится домен.

2.  Щелкните на узле виртуального SMTP-сервера в левой части консоли MMC для отображения вложенных узлов. Появятся два вложенных узла (для каждого виртуального сервера SMTP) с именами Domains (Домены) и Current Sessions (Текущие сеансы).

3.  Щелкните на узле Domains (Домены) для отображения в правой части консоли доменов, используемых виртуальным SMTP-сервером.

4.  Щелкните правой кнопкой мыши на имени соответствующего домена в правой части консоли MMC, затем выберите в появившемся меню Properties (Свойства) для открытия окна свойств.

ПРАКТИЧЕСКАЯ РАБОТА №7

Тема работы: Разработка CGI программы на языке C.

Цель работы: научиться разрабатывать  CGI программы на языке C.

Теоретическая часть

Протокол CGI - Common Gateway Interface служит для связи веб-сервера с другими программами. На его основе работают гостевые книги, форумы, интернет-магазины и любые другие интерактивные сайты. Вы заполняете HTML-форму на сайте, нажимаете кнопку "Отправить", после чего обозреватель передает данные веб-серверу. Веб-сервер запускает соответствующую программу и передает ей данные, полученные от вашего Интренет-обозревателя. Программа на основе этих данных формирует HTML-страницу и возвращает ее веб-серверу. Веб-сервер, в свою очередь, возвращает эту страницу вашему обозревателю. При этом, программа может обращаться к базе данных или запустить другие программы на сервере. Программа может быть как исполняемым файлом, написанным на языках С\С++, Pascal, Assembler и др., так и скриптом на языке Perl или UNIX-shell.

Ход работы

Когда пользователь заполняет html-форму и нажимает кнопку submit, данные отправляются веб-серверу. Веб-сервер, будь это Apache, IIS или какой-либо другой, запускает программу, указанную в качестве значения атрибута action. В нашем случае это test. cgi. Веб-сервер запускает test. cgi и передает ей параметры в виде текстовой строки, следующего содержания: name1=value1&name2=value2&....nameN=valueN, т. е. имя_параметра=значение. Эта строка передается на стандартный поток ввода (STDIN) или в качестве значения переменной окружения QUERY_STRING. Соответственно, считать данную строку в программе можно одним из двух способов:

unsigned int len;

len = atoi( getenv("CONTENT_LENGTH") );

query = (char*)malloc(len+1);

fread(query, 1, len, stdin);

query[len] = 0;

или

query=(char*)malloc(strlen(getenv("QUERY_STRING")));

strcpy(query, getenv("QUERY_STRING"));

В первом случае параметры передаются методом POST, а во втором методом GET. В первом случае мы читаем строку из STDIN. Длину строки мы узнаем из значения параметра окружения CONTENT_LENGTH. Во втором она хранится в переменной окружения QUERY_STRING. Значение переменной окружения можно получить, вызвав функцию getenv. Метод, с помощью которого передается строка с параметрами CGI-программе, можно определить следующим образом: strcmp(getenv("REQUEST_METHOD"),"POST"). Далее придется разбирать строку и получать необходимые значения параметров. Для того чтобы не делать это каждый раз, мы написали небольшую, но очень удобную библиотечку ITCGI для написания CGI-скриптов. Эта библиотека позволяет вам полностью абстрагироваться от метода, которым передаются параметры, от кодировки, от разбора строки. Вы просто вызываете функцию GetParamByName, в которую передаете имя интересующего вас параметра и адрес строки, куда сохранить значение. Библиотека также предоставляет вам ряд функций для написания эффективных и защищенных от взлома CGI-скриптов.
В простейшем случае, когда ваша программа не нуждается в параметрах, вам и не потребуется ни самому разбирать и раскодировать строку, ни использовать для этого нашу библиотеку. Самой простой CGI-программой будет:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4