Продолжаем начатую тему, а именно установку и настройку простенького сервера. Сегодня буду наводить порядок на свежеустановленной 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.
Не забудьте подправить /etc/hosts на всех машинах. Это нужно сделать если в сети нет DNS-сервера. Позже мы установим его на эту же машину, а пока так.
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 администратора; включаю технологию SSI; отрубаю возможность использования персональных страничек пользователей вида http://slack/~username/ ибо это изврат и практически никем не используется, а лишняя дырка не нужна; добавляю акромя index.html еще .shtml и .php; разрешаю кэширование документов прокси-серверами; закрываю алиас на /manual за ненадобностью; разбираюсь
с языками, удаляя лишние; разрешаю парсить только .shtml; подключаю модуль PHP. Что-то еще делал, но это мелочи. А вот и сам файл httpd.conf. Примеров его настройки в сети просто море (любой поисковик завалит вас ссылками), написаны книги, да и в конце концов прилагаемый мануал /var/www/htdocs/manual/ очень хорош, поэтому велосипед придумывать не буду.
Теперь добавим пару пользователей, для своей работы (негоже под рутом) и функционирования web-сервера.
Теперь, при попытке запуска 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.
Теперь можно удалить все файлы и директории из /var/www/htdocs/ и начать свой проект. Конец пожалуй. Добавлю только о виртуальном хостинге. В примере httpd.conf спецально оставил закомментированной секцию VirtualHost. Если планируется небольшое количество виртуалок, то просто скопируйте эту секцию столько раз, сколько нужно и замените символ "*" на имя этого хоста (например www чтобы получить хост www.slack). Не забудьте указать новый каталог в DocumentRoot. Кстати,
чтобы это работало в локальной сети, необходимо сделать соответствующие записи на DNS-сервере этой локалки так, чтобы все виртуальные хосты имели один IP адрес - 192.168.52.101. Все просто, но почему-то у некоторых вызывает проблемы. Если DNS еще нет, то скоро будет - об этом в следующий раз. На этом настройку простого web-сервера считаю законченной.
Все вышеизложенное не претендует на звание лучший web-сервер. В моем понимании хороший - это тот, который скомпилирован тобой собственноручно со статическими выборочными модулями и засунутый в chroot. Зато этот ставится за 5 мин и для небольшого проекта типа моего вполне даже сойдет, я не параноик :), хотя придет время - обязательно сделаю хороший и расскажу как.