http://nostalgy.org.ru
©2004 М.Бабичев
20 марта 2005 г.

Продолжение статьи от 11 октября 2004 г
Использование MS-DOS в сетях TCP/IP

JNOS 1.11a можно использовать в качестве простого Web-сервера. Разумеется, данный сервер имеет некоторые существенные ограничения: не поддерживаются длинные имена файлов и каталогов (они должны иметь имя формата 8+3, то есть не более 8 символов в имени и не более 3 символов в расширении). Это связано с ограничениями файловой системы DOS, под которой работает JNOS. Кроме того, отсутствуют виртуальные хосты, невозможно работать с PHP, MySQL :-) и прочее.

Однако не все так плохо! Данная версия JNOS поддерживает SSI (Server Side Includes). Механизм SSI позволяет вставлять в веб-страницы т.н. директивы SSI такого вида:
<!--# директива -->
Директивы обрабатываются прямо на сервере, а результаты обработки посылаются клиенту (браузеру), встроенными в текст веб-страницы. Например, мы вставили в текст веб-страныцы директиву:
<!--# echo var="DATE_LOCAL" -->
Если загрузить веб-страницу с сервера JNOS, на месте этой директивы мы увидим примерно такой текст:

Mon, 14 Mar 2005 11:46:42 +0100

Это - местное время генерации страницы. То есть сервер JNOS, когда мы запросили у него данную страницу, обработал директиву и вставил вместо нее текущее время (ориентируясь по системным часам компьютера). Если просмотреть код открытой браузером веб-страницы (меню "Вид" - "В виде HTML" в Internet Explorer), мы не увидим самой директивы, а только текст "Mon, 14 Mar 2005 11:46:42 +0100".

Использование директив SSI существенно расширяет возможности сервера JNOS, позволяя создавать т.н. динамические веб-страницы. То есть код этих страниц будет изменяться в зависимости от внешних обстоятельств, например, текущего времени, типа браузера, количества загрузок страницы. Более того. Мы можем одной директивой вставить в одну страницу содержимое другой веб-страницы. Это позволяет легко и просто организовывать единый дизайн всего сайта: на всех страницах сайта помещать одинаковые верхние и нижние колонтитулы, меню... Колонтитулы и меню будут храниться в отдельных файлах HTML. Изменив один такой файл мы сразу меняем дизайн всего сайта с множеством страниц. Это очень удобно!

И наконец, мы легко можем организовать статистику (счетчики посещений) на нашем сервере JNOS! В NOS.CFG - файле конфигурации JNOS есть строка типа:

HttpStatsDir = c:/ka9nos/wwwstats

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

Вот список директив SSI, поддерживаемых сервером JNOS:

echo var="DATE_LOCAL" - отобразить дату и время. Дата и время берутся на сервере из системных часов компьютера

echo var="DATE_GMT" - отобразить дату и время по Гринвичевскому меридиану. Дата и время также берутся из системных часов сервера и сдвигаются относительно локального времени

echo var="HOSTNAME" - отобразить доменное имя сервера JNOS. Если сервер не имеет имени (а только IP-адрес), будет отображен IP-адрес.

echo var="DOCUMENT_URI" - отобразить идентификатор данной страницы (относительный путь). Для страницы, находящейся в корневом каталоге сервера, идентификатор будет выглядеть как "/". Если, например, страница с именем "2.HTM" находится в подкаталоге "1" сервера, идентификатор будет такой: "/1/2.htm"

echo var="DOCUMENT_NAME" - отобразить имя и путь данной страницы. Например, если страница с именем 2.HTM находится в подкаталоге "1" сервера, значение переменной DOCUMENT_NAME будет такое: /1/2.htm. Для главной страницы значение переменной будет root.html (хотя сам файл имеет имя ROOT.HTM). Более любопытный случай, когда через директиву "include virtual" в одну страницу вставляется другая, содержащая переменную DOCUMENT_NAME. Если мы, например, к главной странице подключим упомянутую выше страницу 2.HTM, значение переменной будет такое: c:\ka9nos\www\1\2.htm (корневой каталог WWW-сервера c:\ka9nos\www, сам сервер находится в c:\ka9nos). На мой взгляд это - "дыра" в системе защиты, позволяющая хакеру узнать, на каком диске и в каком каталоге находится сервер или корневая веб-директория

echo var="LAST_MODIFIED" - отобразить дату и время последней модификации (изменения) данной веб-страницы на сервере

echo var="TOTAL_HITS" - отобразить общее количество обращений к веб-серверу (запросов на открытие всех веб-страниц). Это число берется из файла-счетчика TCOUNT.DAT из каталога статистики. Файл TCOUNT.DAT создается и инкрементируется при запросах к серверу независимо от директив SSI

echo var="REQ_REFERER" - отобразить ссылку на веб-страницу, загруженную ранее. Некоторые браузеры посылают серверу информацию о URL предыдущей страницы, и сервер использует эти данные при обработке данной директивы. Некоторые браузеры, впрочем, ничего не сообщают серверу. А браузер Arachne 1.70 ссылается на официальный сайт Arachne. Это его право :-)

echo var="REQ_AGENT" - отобразить название и версию браузера клиента. Опять же, эта информация поставляется веб-серверу самим браузером по желанию. Некоторые браузеры просто сообщают серверу свое название и версию (Internet Explorer). Некоторые (Arachne) кроме того, указывают разрешение экрана, версию DOS и прочее. Хитрее всех Opera: в ней пользователь может выбрать, что Opera будет сообщать серверу - свое название и версию, либо определенную версию Internet Explorer. Иногда это бывает полезно

echo scount="FILENAME" - увеличить значение счетчика на единицу при загрузке веб-страницы с данной директивой. Файл счетчика с именем FILENAME хранится в каталоге статистики, путь к которому указан в файле NOS.CFG (см. выше параметр HttpStatsDir). Имя файла может быть любое допустимое, файлов-счетчиков может быть множество

echo dcount="FILENAME" - отобразить при загрузке веб-страницы значение счетчика, хранящегося в файле FILENAME в каталоге статистики. Значение счетчика при этом не меняется.

echo icount="FILENAME" - отобразить и увеличить на единицу значение счетчика, хранящегося в файле FILENAME в каталоге статистики. Применение этой директивы аналогична одновременному использованию двух предыдущих на одной веб-странице. Например, директивой
<!--# echo icount="counter.txt" -->
мы создаем (при первом открытии страницы) файл-счетчик COUNTER.TXT и увеличиваем его значение на единицу при каждом просмотре страницы пользователем

include virtual="PATH" - самая "мощная" директива! Позволяет "вставить" содержимое одной веб-страницы, путь к которой указан в директиве, в другую веб-страницу в том месте, где находится директива include. Вставка производится на сервере, клиент (браузер) получает уже объединенную страницу. Например, если вставить в файл ROOT.HTM, лежащий в корневом каталоге, строку
<!--# include virtual="\1\2.htm" -->
то к главной странице будет присоединено содержимое страницы "2.HTM", лежащей в подкаталоге "1" корневого каталога веб-сервера

Еще раз напомним, что главная страница сервера должна иметь имя ROOT.HTM и располагаться в корневом каталоге веб-сервера. Путь к корневому каталогу сервера на диске указывается в файле NOS.CFG в строке типа:
Httpdir = c:/ka9nos/www.
И одновременно в строке запуска www-сервера в файле AUTOEXEC.NOS, например:
start http 80 c \ka9nos\www.

А вот главной странице какого-либо подкаталога следует присвоить имя WELCOME.HTM. Например, если адрес сервера JNOS 192.0.1.1 (как у меня), а в корневом каталоге сервера создан подкаталог "1", где помещена страница WELCOME.HTM, то для того, чтобы увидеть эту страницу, достаточно ввести в строке браузера адрес
http://192.0.1.1/1
Таким образом, чтобы создать несколько сайтов на одном сервере JNOS, нужно создать несколько подкаталогов и разместить там файлы WELCOME.HTM.

Отдельно поговорим о файле ACCESS.WWW, который позволяет разграничивать доступ разным пользователям к различным ресурсам сервера. Во-первых, в любом случае файл ACCESS.WWW должен присутствовать в каталоге /SPOOL сервера JNOS. Путь к этому каталогу задается в файле NOS.CFG строкой типа:
Spoolqdir = c:/ka9nos/spool.
Даже если мы никому не собираемся ограничивать доступ, файл ACCESS.WWW должен быть, хотя бы пустой. Иначе не удастся получить доступ ко всему веб-серверу... Возможно, путешествуя по Интернету, вы попадали на закрытые страницы, для доступа к которым нужно ввести имя и пароль в открывшемся окне браузера. Сервер JNOS позволяет нам организовать нечто подобное!

Итак, для того, чтобы разрешить доступ к одному из каталогов веб-сервера только авторизованному пользователю, надо в файл ACCESS.WWW вставить строку вида:

/path Zone user:password

Где /path - путь к закрытому каталогу, относительно корневого каталога сервера. Zone - название закрытой нами области сервера (отображается в браузере, в окне авторизации). user:password - имя пользователя и пароль, закодированные в формате MIME64. Для того, чтобы задать имя и пароль, нам понадобится любая утилита, работающая с форматом MIME64/BASE64. Подходящую утилиту вы можете скачать отсюда:
http://nostalgy.org.ru/util/mime64.zip

Поясним все на примере. Пусть у вас есть данная утилита, MIME64.EXE. В одном каталоге с ней создайте файл, например IN.TXT и запишите в него строку:
admin:1234
Затем введите команду:
mime64 in.txt out.txt -e
Наши имя (admin) и пароль (1234) будут закодированы в строку YWRtaW46MTIzNA==, которую вы найдете в файле OUT.TXT.

Теперь вы хотите закрыть от посторонних подкаталог "1" сервера. В ACCESS.WWW запишем строку:

/1 СекретныеФайлы YWRtaW46MTIzNA==

Здесь /1 - адрес каталога "1", "СекретныеФайлы" - название нашей закрытой области (мы увидим его при вводе пароля). "YWRtaW46MTIzNA==" - закодированные в MIME64 имя и пароль.

А если мы желаем закрыть каталог "1" от ВСЕХ, пишем в ACCESS.WWW такую простую строку:

/1

И тогда никто не сможет войти в этот каталог.

В какой кодировке делать веб-страницы? В любой! Хоть в KOI-8R, хоть в WIN-1251. Или даже в DOS-866. Сервер JNOS без проблем предоставляет такие страницы пользователю. Главное, чтобы с данной кодировкой нормально работал браузер пользователя. Чтобы все подумали, что у вас сервер UNIX, используйте кодировку KOI-8R :-). В противном случае удобнее использовать кодировку Windows.

Зачем вообще нужен веб-сервер JNOS? Ведь есть гораздо более мощные серверы, например Apache. Отвечаю: основное назначение JNOS - маршрутизировать сеть. Старенький дешевый компьютер с DOS+JNOS позволяет соединять вместе несколько сегментов сети, а также соединять локальную сеть с глобальной через сетевую карту или модем (по линии PPP). Значит этот компьютер должен работать круглосуточно или по крайней мере тогда, когда локальной сетью кто-то пользуется. А если маршрутизатор постоянно работает, почему бы не разместить на нем еще и сайт, который к тому же можно обновлять по FTP? Конечно, форум или гостевую на этом сайте сделать сложно, но это не всегда нужно. Например, если JNOS соединяет сеть кафедры института с сетью всего института, на сервере JNOS будет вполне уместен сайт кафедры, где будет вкратце рассказано о кафедре, о сотрудниках; где можно разместить расписание занятий, учебные планы и пособия; где наконец, будут находиться "домашние страницы" студентов, обновляемые студентами через FTP. Помимо всего прочего, на сервере JNOS легко организовать хранилище файлов: общий каталог, доступный всем для чтения, и специальные "домашние" каталоги пользователей, доступные только пользователям-владельцам. Разумеется, сервер JNOS может найти аналогичное применение и в частной фирме, школе, гимназии или домашней сети...

Антиквар

вернуться к списку текстов