Linux Slackware Энциклопедия от А до Я
Сайт посвящен свободно распространяемому ПО и Linux Slackware в частности.
Разделы:
Раздел/Тема
Главная -> Настройка -> Личный web-сервер для личной странички (Apache)
Продолжаем начатую тему, а именно установку и настройку простенького сервера. Сегодня буду наводить порядок на свежеустановленной Slackware-10.1, коей по-сути является тот минимальный набор пакетов, который установил в прошлый раз. Мне не очень понравилось имя машины, которое я дал тогда, поэтому поменял: gena@gena:~:$ ssh root@live-cd root@live-cd's password: Last login: Fri Feb 25 19:12:13 2005 Linux 2.4.29. root@gena2:~# vi /etc/HOSTNAME reading /etc/HOSTNAME root@gena2:~# cat /etc/HOSTNAME slack. root@slack:~# vi /etc/hosts reading /etc/hosts wrote /etc/hosts, 19 lines, 615 chars root@gena2:~# shutdown -r 0 Broadcast message from root (pts/0) (Sat Feb 26 00:04:24 2005): The system is going down for reboot NOW! root@gena2:~# Connection to slack closed by remote host. Connection to slack closed. gena@gena:~:$ ssh root@slack The authenticity of host 'slack (192.168.52.101)' can't be established. RSA key fingerprint is b8:92:ad:8e:6d:c8:20:01:24:23:a6:c4:7b:a3:84:80. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'slack,192.168.52.101' (RSA) to the list of known hosts. root@slack's password: Last login: Fri Feb 25 23:54:23 2005 Linux 2.4.29. root@slack:~# ps ax PID TTY STAT TIME COMMAND 1 ? S 0:05 init [3] 2 ? S 0:00 [keventd] 3 ? SN 0:00 [ksoftirqd_CPU0] 4 ? S 0:00 [kswapd] 5 ? S 0:00 [bdflush] 6 ? S 0:00 [kupdated] 10 ? S< 0:00 [mdrecoveryd] 11 ? S 0:00 [kreiserfsd] 65 ? Ss 0:00 /usr/sbin/syslogd 68 ? Ss 0:00 /usr/sbin/klogd -c 3 -x 118 ? Ss 0:00 /usr/sbin/sshd 125 ? S 0:00 /usr/sbin/crond -l10 128 ? Ss 0:00 sendmail: accepting connections 131 ? Ss 0:00 sendmail: Queue runner@00:25:00 for /var/spool/client 136 tty1 Ss+ 0:00 /sbin/agetty 38400 tty1 linux 137 tty2 Ss+ 0:00 /sbin/agetty 38400 tty2 linux 138 tty3 Ss+ 0:00 /sbin/agetty 38400 tty3 linux 139 tty4 Ss+ 0:00 /sbin/agetty 38400 tty4 linux 140 tty5 Ss+ 0:00 /sbin/agetty 38400 tty5 linux 141 tty6 Ss+ 0:00 /sbin/agetty 38400 tty6 linux 168 ? Ss 0:00 sshd: root@pts/0 171 pts/0 Ss 0:00 -bash 183 pts/0 R+ 0:00 ps ax Видим, что сейчас работает sshd, crond, sendmail и система логов. Добавим сюда apache. Т.к. мы ставили этот пакет, то для запуска нужно просто подправить конфигурационный файл /etc/apache/httpd.conf root@slack:~# vi /etc/apache/httpd.conf reading /etc/apache/httpd.conf wrote /etc/apache/httpd.conf, 278 lines, 8745 chars Вкратце, что я там делаю. Изменяю имя и группу, под которым будет запускаться сервер для того, чтобы работали cgi-скрипты; задаю email администратора; включаю технологию SSL; отрубаю возможность использования персональных страничек пользователей вида http://slack/~username/ ибо это изврат и практически никем не используется, а лишняя дырка не нужна; добавляю акромя index.html еще .shtml и .php; разрешаю кэширование документов прокси-серверами; закрываю алиас на /manual за ненадобностью; разбираюсь с языками, удаляя лишние; разрешаю парсить только .shtml; подключаю модуль PHP. Что-то еще делал, но это мелочи. А вот и сам файл httpd.conf. Примеров его настройки в сети просто море (любой поисковик завалит вас ссылками), написаны книги, да и в конце концов прилагаемый мануал /var/www/htdocs/manual/ очень хорош, поэтому велосипед придумывать не буду. Теперь добавим пару пользователей, для своей работы (негоже под рутом) и функционирования web-сервера. root@slack:~# groupadd www root@slack:~# useradd www -s /bin/false -d /dev/null -g www root@slack:~# useradd gena -p NOtWOrDlISTPaSsworD Теперь, при попытке запуска httpd вылезает ошибка: Cannot load /usr/libexec/apache/libphp4.so into server: libmhash.so.2: cannot open shared object file: No such file or directory /usr/sbin/apachectl start: httpd could not be started Это потому что в прошлый раз я забыл поставить пакет mhash, с кем не бывает - типичная ситуация. Решаем попутно. root@slack:~# mkdir /mnt/slackware-current root@slack:~# echo 192.168.52.1 gena >> /etc/hosts root@slack:~# mount -t nfs -o ro,nolock \ > gena:/home/ftp/pub/distr/slackware/slackware-current/ \ > /mnt/slackware-current/ root@slack:~# installpkg /mnt/slackware-current/slackware/l/mhash-0.9.1-i486-1.tgz Installing package mhash-0.9.1-i486-1... PACKAGE DESCRIPTION: mhash: mhash (Thread-safe hash library) mhash: mhash: mhash is a thread-safe hash library, implemented in C, and provides a mhash: uniform interface to a large number of hash algorithms (MD5, SHA-1, mhash: HAVAL, RIPEMD128, RIPEMD160, TIGER, GOST). These algorithms can be mhash: used to compute checksums, message digests, and other signatures. mhash: The HMAC support implements the basics for message authentication, mhash: following RFC 2104. mhash: Executing install script for mhash-0.9.1-i486-1... root@slack:~# /etc/rc.d/rc.httpd start /usr/sbin/apachectl start: httpd started root@slack:~# ps ax|grep httpd 437 ? Ss 0:00 /usr/sbin/httpd 438 ? S 0:00 /usr/sbin/httpd 439 ? S 0:00 /usr/sbin/httpd 440 ? S 0:00 /usr/sbin/httpd 441 ? S 0:00 /usr/sbin/httpd 442 ? S 0:00 /usr/sbin/httpd 444 pts/0 S+ 0:00 grep httpd Вуоля. Теперь проверяем удаленно. gena@gena:~:$ links http://slack/ Если все прошло удачно, то вы увидите стандартное приветствие сервера. Далее - все в ваших руках. Проверим работу CGI. root@slack:~# chmod +x /var/www/cgi-bin/test-cgi Смотрим удаленно: gena@gena:~:$ links http://slack/cgi-bin/test-cgi Если все ок, видим: CGI/1.0 test script report: argc is 0. argv is . SERVER_SOFTWARE = Apache/1.3.33 (Unix) PHP/4.3.10 SERVER_NAME = slack GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.1 SERVER_PORT = 80 REQUEST_METHOD = GET HTTP_ACCEPT = text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 PATH_INFO = PATH_TRANSLATED = SCRIPT_NAME = /cgi-bin/test-cgi QUERY_STRING = REMOTE_HOST = REMOTE_ADDR = 192.168.52.1 REMOTE_USER = AUTH_TYPE = CONTENT_TYPE = CONTENT_LENGTH = Теперь проверим SSI: root@slack:~# echo '<html><!--#include virtual="xxx.txt" --></html>' >\ > /var/www/htdocs/index.shtml root@slack:~# echo Hello>/var/www/htdocs/xxx.txt root@slack:~# cat /var/www/htdocs/index.shtml <html><!--#include virtual="xxx.txt" --></html> root@slack:~# cat /var/www/htdocs/xxx.txt Hello root@slack:~# chown www:www /var/www/htdocs/index.shtml root@slack:~# chown www:www /var/www/htdocs/xxx.txt Заодно проверим PHP. root@slack:~# echo '<?php print "Hello in PHP"; ?>' > /var/www/htdocs/index.php root@slack:~# chown www:www /var/www/htdocs/index.php Убеждаемся: gena@gena:~:$ links http://slack/index.shtml gena@gena:~:$ links http://slack/index.php Теперь можно удалить все файлы и директории из /var/www/htdocs/ и начать свой проект. Конец пожалуй. Добавлю только о виртуальном хостинге. В примере httpd.conf спецально оставил закомментированной секцию VirtualHost. Если планируется небольшое количество виртуалок, то просто скопируйте эту секцию столько раз, сколько нужно и замените символ "*" на имя этого хоста (например www чтобы получить хост www.slack). Не забудьте указать новый каталог в DocumentRoot. Кстати, чтобы это работало в локальной сети, необходимо сделать соответствующие записи на DNS-сервере этой локалки так, чтобы все виртуальные хосты имели один IP адрес - 192.168.52.101. Все просто, но почему-то у некоторых вызывает проблемы. Если DNS еще нет, то скоро будет - об этом в следующий раз. На этом настройку простого web-сервера считаю законченной. Все вышеизложенное не претендует на звание лучший web-сервер. В моем понимании хороший - это тот, который скомпилирован тобой собственноручно со статическими выборочными модулями и засунутый в chroot. Зато этот ставится за 5 мин и для небольшого проекта типа моего вполне даже сойдет, я не параноик :), хотя придет время - обязательно сделаю хороший и расскажу как. Gena 01.03.2005