Аннотация |
Это документ содержит информацию: о построении многоцелевого веб-сервера, который будет поддерживать динамическое веб-содержание, используя скрипт-язык PHP/FI; безопасную передачу данных, основанную на Netscape SSL; безопасное выполнение CGI скриптов; серверные расширения M$ Frontpage. |
Прежде, чем вы начнете чтение, я должен предупредить - Я не лингвист, поэтому в этом документе возможны орфографические и грамматические ошибки. Сообщите мне о них.
Веб-сервер, который вы получите после того, как выполните все рекомендации, будет состоять из нескольких частей: исходных текстов сервера Apache с несколькими (хорошо, многими) патчами и некоторых внешних программ. Я рекомендую использовать программные версии, которые мною опробованы, они, вероятно, откомпилируются без больших проблем и вы, в результате, получите довольно устойчивый демон. Если вы не боитесь, то можете попробовать откомпилировать все последние версии с большим количеством новых возможностей, но не вините меня, если что-то будет сбоить ;-). Однако, в случае удачи, вы можете сообщить мне о результатах, чтобы другие рабочие конфигурации были включены в будущие версии этого документа. Все шаги были протестированы на linux версии 2.0.35, так что это howto несколько специфично под linux, но вы должны без проблем использовать данную конфигурацию в других реализациях Unix.
Вы не обязательно должны компилировать Apache со всеми компонентами. Я попробовал структурировать этот howto так, чтобы вы могли пропускать неинтересные вам части.
Этот документ - не просто справочник к Apache, SSL, PHP/FI или frontpage. Его главная цель состоит в том, чтобы избавить веб-провайдеров от головной боли при установке веб-сервера, а также сделать небольшой вклад в linux.
PHP - скрипт-язык, поддерживающий создание динамических HTML-страниц. Он несколько похож на модуль SSI сервера Apache, но намного более сложен и имеет модули для работы с базами данных для многих популярных баз. Для PHP необходимы библиотеки GD.
SSL - реализация протоколов защищенной передачи данных, разработанные Netscape (Secure Socket Layer), которые обеспечивают безопасные подключения по небезопасным сетям, например, передача номера кредитных карточек из форм.
frontpage - визуальный веб-инструмент, который использует некоторые серверные расширения, называемые webbots. Некоторые люди думают, что frontpage - это круто, потому что вы можете создавать формы для обратной связи и доски объявлений без каких-либо знаний html или cgi. Он даже оберегает веб-мастера от передачи файлов через ftp, используя встроенный веб-издатель (Web Publisher). Если вы желаете поддерживать frontpage, но не хотите устанавливать сервер под Windows, тогда расширения сервера Apache - ваш выбор.
Хотя этот документ был скачан приблизительно 100 раз с того момента, как я издал его, я получил не очень много откликов. Мне рассказали о том, что все это работает и в других комбинациях. У меня работают:
Linux 2.0.31, Apache 1.2.4, PHP 2.0.0, SSL 0.8.0, fp 98 3.0.3 (*)
Linux 2.0.33, Apache 1.2.5, PHP 2.0.1, SSL 0.8.0, fp 98 3.0.3 (*)
Linux 2.0.35, Apache 1.2.6, PHP 3, SSL 0.8.0, fp 98 3.0.4
Вам будет необходимо следующее:
Apache 1.2.6 http://www.apache.org/dist/apache_1_2_6.tar.gz
PHP/FI http://php.iquest.net/files/download.phtml?/files/php-2.01.tar.gz
Библиотека GDhttp://siva.cshl.org/gd/gd.html
SSL 0.8.0 ftp://ftp.ox.ac.uk/pub/crypto/SSL/SSLeay-0.8.0.tar.gz
SSL-патч для Apache 1.2.6 ftp://ftp.ox.ac.uk/pub/crypto/SSL/apache_1.2.6+ssl_1.17.tar.gz
расширения сервера frontpage 98 и скрипт инсталляции http://www.rtr.com/fpsupport/download.htm
Получите исходники, которые вам необходимы. Распакуйте apache, php, gd и ssl в /usr/src. Распакуйте патч SSL в /usr/src/apache_1.2.6.
Зайдите в каталог /usr/src/gd1.2 и введите make. В результате этого соберется библиотека GD libgd.a, которую нужно скопировать в /usr/lib. После этого перейдите в каталог php-2.0.1 и запустите ./install.
Would you like to compile PHP/FI as an Apache module? [yN] y (Вы хотели бы компилировать PHP/FI как модуль Apache?) Are you compiling for an Apache 1.1 or later server? [Yn] y (Вы компилируете PHP для Apache 1.1 или для более поздней версии?) Are you using Apache-Stronghold? [yN] y (Вы используете Apache-Stronghold?) Does your Apache server support ELF dynamic loading? [yN] y (Ваш сервер Apache поддерживает динамическую загрузку ELF?) Apache include directory (which has httpd.h)? [/usr/local/include/apache] /usr/src/apache_1.2.6/src (Каталог заголовочных файлов для Apache (в котором находится httpd.h)?) Would you like to build an ELF shared library? [yN] y (После компиляции программа будет использовать общедоступные библиотеки) Additional directories to search for .h files []: /usr/src/gd1.2 (Дополнительные каталоги для поиска файлов с расширением .h) Would you like the bundled regex library? [yN] n (Вы хотели бы собрать связанную regex библиотеку?) |
Подобно расширениям frontpage, phtml имеет проблему с защитой, потому что выполняется под веб-сервером. Убедитесь, что включили безопасный режим в src/php.h и ограничьте путь поиска файлов. Имеются некоторые другие параметры в php.h - вы можете их отредактировать. Если вы очень обеспокоены относительно защиты, компилируйте php как cgi. Однако, вы потеряете эффективность, и это не так шикарно, как модуль.
Наберите make чтобы собрать все файлы. Когда компиляция закончится, скопируйте mod_php.* и libphp.a в /usr/src/apache_1.2.6/src. Добавьте строку Module php_module mod_php.o в конец /usr/src/apache_1.2.6/src/Configuration, добавьте -lphp -lm -lgdbm -lgd к EXTRA_LIBS в том же самом файле, application/x-httpd-php phtml в файл Apache mime.types и AddType application/x-httpd-php .phtml в Apache srm.conf.
Вы можете добавить index.phtml к DirectoryIndex в этом файле так, чтобы файл index.phtml автоматически загружался, когда обращаются к его каталогу.
cd /usr/src/SSL-0.8.0; ./Configure linux-elf; make; make rehash В результате этих команд будут собраны библиотеки, необходимые Apache. Вы можете выполнить make test, чтобы проверить правильность компиляции. После этого вы должны применить патч к apache. Важно, чтобы вы применили его прежде, чем патч frontpage, иначе frontpage не будет работать. Перейдите в каталог /usr/src/apache_1.2.6/src и запустите patch < /usr/src/apache_1.2.6/SSLpatch. Установите SSL_BASE=/usr/src/SSLeay-0.8.0 в Configuration. Удостоверьтесь, что Module proxy_module отключен, иначе Apache не будет компилироваться. Если вам нужен прокси - идите за Squid http://squid.nlanr.net/
После этого дайте команду make certificate, чтобы сгенерировать SSLconf/conf/httpsd.pem.
Переименуйте файл fp30.linux.tar.Z в fp30.linux.tar.gz, иначе установочный скрипт его не найдет. Запустите ./fp_install, чтобы скопировать файлы расширения в каталог /usr/local/frontpage. zcat обычно находится в каталоге /usr/bin.
Теперь вы можете применить патч FP. Перейдите в каталог /usr/src/apache_1.2.6/src и введите patch < /usr/src/frontpage/version3.0/apache-fp/fp-patch-apache_1.2.5 Это создаст файлы mod_frontpage.* и внесет небольшие изменения в Configuration. Патч 1.2.5 будет работать с обеими версиями apache 1.2.5 и 1.2.6. Пропустите часть, касающуюся установки веб - вы можете сделать это позже.
Модули, которые я использую (кроме SSL, PHP и frontpage): Module env_module mod_env.o Module config_log_module mod_log_config.o Module mime_module mod_mime.o Module negotiation_module mod_negotiation.o Module dir_module mod_dir.o Module cgi_module mod_cgi.o Module asis_module mod_asis.o Module imap_module mod_imap.o Module action_module mod_actions.o Module alias_module mod_alias.o Module rewrite_module mod_rewrite.o Module access_module mod_access.o Module auth_module mod_auth.o Module anon_auth_module mod_auth_anon.o Module digest_module mod_digest.o Module expires_module mod_expires.o Module headers_module mod_headers.o Module browser_module mod_browser.o |
Если вы - интернет-провайдер, вы захотите увеличить степень безопасности системы. suexec - утилита, позволяющая вам это сделать; выполнение cgi под пользователем-владельцем веб-каталога, вместо пользователя, запустившего веб-сервер. Перейдите в /usr/src/apache_1.2.6/support и дайте команду make suexec. chmod 4711 suxec; скопируйте этот файл в каталог, указанный в ../src/httpd.h (по умолчанию - /usr/local/etc/httpd/sbin/suexec ). Если путь кажется вам странным - как это казалось мне - измените его в httpd.h.
Перейдите в каталог /usr/src/apache_1.2.6/src и отредактируйте Configuration, установив все необходимые модули, входящие в состав вашего Apache. Когда все будет готово, запустите ./Configure и make. Это - последний (и наиболее сложный) шаг компиляции, так что скрестите ваши пальцы. Если все пройдет успешно, скопируйте httpsd в /usr/sbin. Демон достаточно большой, учтите это при компиляции вашего веб-сервера. Создайте директорию /var/httpd с подкаталогами cgi-bin, conf, htdocs, icons, virt1, virt2 and logs. В /usr/src/apache_1.2.6/conf отредактируйте файлы access.conf-dist, mime.types и srm.conf-dist, как вам надо, и скопируйте их в var/httpd/conf/access.conf, srm.conf и mime.types. Скопируйте файл httpsd.pem, созданный с помощью make certificate в каталог /var/httpd/conf. Используйте следующий httpd.conf:
ServerType standalone Port 80 Listen 80 Listen 443 User wwwrun Group wwwrun ServerAdmin webmaster@yourhost.com ServerRoot /var/httpd ErrorLog logs/error_log TransferLog logs/access_log PidFile logs/httpd.pid ServerName www.yourhost.com MinSpareServers 3 MaxSpareServers 20 StartServers 3 SSLCACertificatePath /var/httpd/conf SSLCACertificateFile /var/httpd/conf/httpsd.pem SSLCertificateFile /var/httpd/conf/httpsd.pem SSLLogFile /var/httpd/logs/ssl.log <VirtualHost www.virt1.com> SSLDisable ServerAdmin webmaster@virt1.com DocumentRoot /var/httpd/virt1 ScriptAlias /cgi-bin/ /var/httpd/virt1/cgi-bin/ ServerName www.virt1.com ErrorLog logs/virt1-error.log TransferLog logs/virt1-access.log User virt1admin Group users </VirtualHost> <VirtualHost www.virt1.com:443> ServerAdmin webmaster@virt1.com DocumentRoot /var/httpd/virt1 ScriptAlias /cgi-bin/ /var/httpd/virt1/cgi-bin/ ServerName www.virt1.com ErrorLog logs/virt1-ssl-error.log TransferLog logs/virt1-ssl-access.log User virt1admin Group users SSLCACertificatePath /var/httpd/conf SSLCACertificateFile /var/httpd/conf/httpsd.pem SSLCertificateFile /var/httpd/conf/httpsd.pem SSLLogFile /var/httpd/logs/virt1-ssl.log SSLVerifyClient 0 SSLFakeBasicAuth </VirtualHost> <VirtualHost www.virt2.com> SSLDisable ServerAdmin webmaster@virt2.com DocumentRoot /var/httpd/virt2 ScriptAlias /cgi-bin/ /var/httpd/virt2/cgi-bin/ ServerName www.virt2.com ErrorLog logs/virt2-error.log TransferLog logs/virt2-access.log </VirtualHost> |
В зависимости от модулей, не все директивы могут быть доступны. Вы можете получить список доступных директив с помощью команды httpsd -h.
Перейдите в каталог /usr/local/frontpage/version3.0/bin и загрузите ./fpsrvadm. Выберите install и apache-fp. Вам нужно будет ответить на следующие вопросы:
Enter server config filename (Введите имя конфигурационного файла сервера): /var/httpd/conf/httpd.conf Enter host name for multi-hosting (Введите имя машины для мультихостинга) []: www.virt2.com Starting install, port (Начало установки, порт) : www.virt2.com:80, web (веб каталог): "" Enter user's name (Введите имя пользователя) []: virt2admin Enter user's password (Введите пароль) : Confirm password (Подтвердите пароль) : Creating root web (Создание корневого каталога веб) Recalculate links for root web Install completed. |
Имя пользователя должно соответствовать имени входа в систему веб-пользователя. Пароль не обязательно должен совпадать с системным паролем. Вы должны вручную добавить sendmailcommand:/usr/sbin/sendmail %r к /usr/local/frontpage/www.virt2.com:80.conf, иначе ваши пользователи не смогут посылать веб-генерированные письма. kill -HUP ваш httpsd, чтобы заставить fp заново прочитать файлы конфигурации. Теперь вы можете обращаться к www.virt2.com с вашего клиента frontpage.
При некоторых обстоятельствах fpsrvadm выдает сообщения, что сначала должен быть задан корневой каталог веб. Их можно игнорировать, но вы должны сделать так, чтобы fpsrvadm их не выдавал.
Запустите Apache с помощью команды httpsd -f /var/httpd/conf/httpd.conf. Теперь вы можете обращаться к www.virt1.com через http и https (кстати, достаточно мощный протокол). Конечно вы должны оплатить реальный сертификат, если вы хотите предоставлять SSL, или вас засмеют ;-).
Скопируйте один файл из каталога примеров php (examples) в virt1, чтобы проверить работу php.
Не используйте расширения frontpage 97. Они не работают, по крайней мере, в Linux. При установке определенных версий библиотек C++, они вроде работают, но ваши журналы и почтовый ящик скоро заполнятся сообщениями вида premature end of script headers Не используйте расширения frontpage 98 версии ниже 3.0.2.1330. Не запутайтесь, номера версий несколько непривычны. Когда зайдете telnet'ом на 80-й порт, введите "get / http/1.0" и дважды нажмите ввод - вы получите версию номер 3.0.4 для frontpage.
Более точно номер версии вы можете узнать при помощи команды /usr/local/frontpage/currentversion/exes/_vti_bin/shtml.exe -version. Старые версии имеют неприятную ошибку, которая требует, чтобы httpd.conf можно было перезаписывать под gid вебсервера'а. Это достаточно плохо, если вас беспокоит безопасность. Я, в любом случае, рекомендую использовать версии новее 3.0.2.1330, лишенные этого недостатка.
При запуске Recalculate Links в клиенте frontpage, сервер запускает процесс, который потребляет 99% процессорного времени и около 10 Мб памяти. Но даже с сайтов среднего размера и быстрых машин, Клиент иногда получает сообщение, что время ожидания истекло, хотя вычисление будет закончено правильно. Сообщите пользователям, что нужно подождать, а не нажимать Recalculate Links несколько раз. Уясните для себе, что нужно оборудовать сервер по крайней мере 64 Мб памяти.
Пожалуйста, обратите внимание, что во время записи и SSL, и frontpage могут работать по отдельности, но не вместе - это означает, что вы не можете опубликовывать свои страницы, используя ssl, и не можете использовать webbots через https. Вы можете опубликовать ваше веб-содержимое через 80-ый порт и обращаться к зашифрованному содержимому через порт 443, но ваши счетчики и т.п. будут нарушены. Я думаю это ошибка. Эта проблема будет исправлена в SSL 0.9.0 (я надеюсь).
Вопрос для тех, кто думает, что заголовок этого руководства такой-же длинный, как и его текст: Вы когда-нибудь слушали Meat Loaf?
O.K. Читатели, хватит вам на сегодня. Не стесняйтесь посылать мне письма, вечную благодарность, цветы, электронные деньги, автомобили, нефтяные источники и т.д.
Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: <linux-howto@metalab.unc.edu>, или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу <linux-howto@asplinux.ru>