Установка и настройка www (apache)
Установка и настройка www (apache)
В этой заметке будут рассмотрены вопросы поднятия вевсервиса. Косвенно они уже затрагивались в других статьях, но "повторение мать ученья". Опять же именно тут я постараюсь собрать все то, что касается именно вебсервиса.
Установка вебсервера - apache
Итак, самый распространенный способ отдать файл через http - это поставить apache. Фраза ключавая - например если мне нужно передать большой файл по сети то зачастую я его подсовываю в директорию apache и скачиваю через web любой программой. Но это лирическое отступление. Давайте поставим Апачь.
Я выбрал такие параметны
Естественно эти параметры будут меняться, но на сегодня мне были нужны вот эти параметры. Больше у меня он не спросил ничего криминального и апачь поставился. Единственное что где-то он у меня спросил что-то еще, где я просто выключил IPv6, а все остальное осталось по умолчанию.
Не забываем включить загрузку апача в конфиге - то есть в конец /etc/rc.conf добавляем apache22_enable="YES" И вроде как на этом все - теперь приступаем к настройке
Код: Выделить всё
cd /usr/ports/www/apache22
make install clean
Код: Выделить всё
┌────────────────────────────────────────────────────────────────────┐
│ Options for apache 2.2.17_1 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │[ ] THREADS Enable threads support in APR │ │
│ │[ ] MYSQL Enable MySQL support for apr-dbd │ │
│ │[ ] PGSQL Enable PostgreSQL support for apr-dbd │ │
│ │[ ] SQLITE Enable SQLite support for apr-dbd │ │
│ │[ ] IPV6 Enable IPv6 support │ │
│ │[ ] BDB Enable BerkeleyDB dbm │ │
│ │[X] AUTH_BASIC Enable mod_auth_basic │ │
│ │[X] AUTH_DIGEST Enable mod_auth_digest │ │
│ │[X] AUTHN_FILE Enable mod_authn_file │ │
│ │[ ] AUTHN_DBD Enable mod_authn_dbd │ │
│ │[X] AUTHN_DBM Enable mod_authn_dbm │ │
│ │[X] AUTHN_ANON Enable mod_authn_anon │ │
│ │[X] AUTHN_DEFAULT Enable mod_authn_default │ │
│ │[X] AUTHN_ALIAS Enable mod_authn_alias │ │
│ │[X] AUTHZ_HOST Enable mod_authz_host │ │
├─└────v(+)────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Options for apache 2.2.17_1 │
│ ┌────^(-)────────────────────────────────────────────────────────┐ │
│ │[X] AUTHZ_GROUPFILE Enable mod_authz_groupfile │ │
│ │[X] AUTHZ_USER Enable mod_authz_user │ │
│ │[X] AUTHZ_DBM Enable mod_authz_dbm │ │
│ │[X] AUTHZ_OWNER Enable mod_authz_owner │ │
│ │[X] AUTHZ_DEFAULT Enable mod_authz_default │ │
│ │[X] CACHE Enable mod_cache │ │
│ │[X] DISK_CACHE Enable mod_disk_cache │ │
│ │[X] FILE_CACHE Enable mod_file_cache │ │
│ │[ ] MEM_CACHE Enable mod_mem_cache │ │
│ │[X] DAV Enable mod_dav │ │
│ │[X] DAV_FS Enable mod_dav_fs │ │
│ │[ ] BUCKETEER Enable mod_bucketeer │ │
│ │[ ] CASE_FILTER Enable mod_case_filter │ │
│ │[ ] CASE_FILTER_IN Enable mod_case_filter_in │ │
│ │[ ] EXT_FILTER Enable mod_ext_filter │ │
├─└────v(+)────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Options for apache 2.2.17_1 │
│ ┌────^(-)────────────────────────────────────────────────────────┐ │
│ │[ ] LOG_FORENSIC Enable mod_log_forensic │ │
│ │[ ] OPTIONAL_HOOK_EXPORT Enable mod_optional_hook_export │ │
│ │[ ] OPTIONAL_HOOK_IMPORT Enable mod_optional_hook_import │ │
│ │[ ] OPTIONAL_FN_IMPORT Enable mod_optional_fn_import │ │
│ │[ ] OPTIONAL_FN_EXPORT Enable mod_optional_fn_export │ │
│ │[ ] LDAP Enable mod_ldap │ │
│ │[ ] AUTHNZ_LDAP Enable mod_authnz_ldap │ │
│ │[X] ACTIONS Enable mod_actions │ │
│ │[X] ALIAS Enable mod_alias │ │
│ │[X] ASIS Enable mod_asis │ │
│ │[X] AUTOINDEX Enable mod_autoindex │ │
│ │[X] CERN_META Enable mod_cern_meta │ │
│ │[X] CGI Enable mod_cgi │ │
│ │[X] CHARSET_LITE Enable mod_charset_lite │ │
│ │[ ] DBD Enable mod_dbd │ │
├─└────v(+)────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Options for apache 2.2.17_1 │
│ ┌────^(-)────────────────────────────────────────────────────────┐ │
│ │[X] DEFLATE Enable mod_deflate │ │
│ │[X] DIR Enable mod_dir │ │
│ │[X] DUMPIO Enable mod_dumpio │ │
│ │[X] ENV Enable mod_env │ │
│ │[X] EXPIRES Enable mod_expires │ │
│ │[X] HEADERS Enable mod_headers │ │
│ │[X] IMAGEMAP Enable mod_imagemap │ │
│ │[X] INCLUDE Enable mod_include │ │
│ │[X] INFO Enable mod_info │ │
│ │[X] LOG_CONFIG Enable mod_log_config │ │
│ │[X] LOGIO Enable mod_logio │ │
│ │[X] MIME Enable mod_mime │ │
│ │[X] MIME_MAGIC Enable mod_mime_magic │ │
│ │[X] NEGOTIATION Enable mod_negotiation │ │
│ │[X] REWRITE Enable mod_rewrite │ │
├─└────v(+)────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Options for apache 2.2.17_1 │
│ ┌────^(-)────────────────────────────────────────────────────────┐ │
│ │[X] SETENVIF Enable mod_setenvif │ │
│ │[X] SPELING Enable mod_speling │ │
│ │[X] STATUS Enable mod_status │ │
│ │[X] UNIQUE_ID Enable mod_unique_id │ │
│ │[X] USERDIR Enable mod_userdir │ │
│ │[X] USERTRACK Enable mod_usertrack │ │
│ │[X] VHOST_ALIAS Enable mod_vhost_alias │ │
│ │[X] FILTER Enable mod_filter │ │
│ │[X] VERSION Enable mod_version │ │
│ │[X] PROXY Enable mod_proxy │ │
│ │[X] PROXY_CONNECT Enable mod_proxy_connect │ │
│ │[X] PATCH_PROXY_CONNECT Patch proxy_connect SSL support │ │
│ │[ ] PROXY_FTP Enable mod_proxy_ftp │ │
│ │[ ] PROXY_HTTP Enable mod_proxy_http │ │
│ │[ ] PROXY_AJP Enable mod_proxy_ajp │ │
├─└────v(+)────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Options for apache 2.2.17_1 │
│ ┌────^(-)────────────────────────────────────────────────────────┐ │
│ │[X] FILTER Enable mod_filter │ │
│ │[X] VERSION Enable mod_version │ │
│ │[X] PROXY Enable mod_proxy │ │
│ │[X] PROXY_CONNECT Enable mod_proxy_connect │ │
│ │[X] PATCH_PROXY_CONNECT Patch proxy_connect SSL support │ │
│ │[ ] PROXY_FTP Enable mod_proxy_ftp │ │
│ │[ ] PROXY_HTTP Enable mod_proxy_http │ │
│ │[ ] PROXY_AJP Enable mod_proxy_ajp │ │
│ │[ ] PROXY_BALANCER Enable mod_proxy_balancer │ │
│ │[ ] PROXY_SCGI Enable mod_proxy_scgi │ │
│ │[X] SSL Enable mod_ssl │ │
│ │[X] SUEXEC Enable mod_suexec │ │
│ │[ ] SUEXEC_RSRCLIMIT SuEXEC rlimits based on login class │ │
│ │[X] REQTIMEOUT Enable mod_reqtimeout │ │
│ │[ ] CGID Enable mod_cgid │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
Не забываем включить загрузку апача в конфиге - то есть в конец /etc/rc.conf добавляем apache22_enable="YES" И вроде как на этом все - теперь приступаем к настройке
Ограничение доступа к ресурсам
В этой статье будут рассмотрены простые способы ограничения доступа к ресурсам, размещенным на веб сервера apache
Установка пароля
За работу того, что будет описано ниже отвечает опция apache AllowOverride
Она в директории ищет специальный файл, в котором могут содержаться дополнетельные настройки. Таким образом в данной директории эта директива должны быть включена
Сохраняем, перезапускаем apache. Теперь можно приступить к созданию самого файла - идём в ту директорию, о которой мы рассказали конфигу, и создаём там файл - его имя строго предопределено!
Открываем этот файл и приводим к виду
Ну вроде как тут всё понятно
1) мы задаём путь к файлу с паролями
2) сообщение при авторизации и метод
3) определяем каким пользователям можно входить - так же можно разрешить всех пользователей, которые прошли авторизацию - для этого строку require user roman следует заменить на require valid-user
Сохраняем, закрывем и создаём файл с паролями, раз уж мы его упомянули
Ntgthm надо вписать в него пароли. Для этого существует специальная утилитка, синтаксис которой весьма прост - утилита, файл куда сохранить, логи, пароль:
Проверим что получилось
Всё. Перезапускать apache при этом не надо - этот файл он будет сканировать как только кто-то обратится к этой папке
Хочу заметить, что содержимое файла .htaccess вполне можно было вписать и в сам конфиг apache в раздел <Directory> - такой способ увеличил бы скорость работы, но при внесении изменений пришлось бы перезапускать вебсервер
Ограничение по IP
Иногда бывают ситуации, когда надо просто разрешить одному ИП адресу - в этом случае морочиться с паролем не совсем хочется, и тогда можно ограничить доступ по IP адресу. В этом случае файл .htpasswd нам не нужен, а .htaccess имел бы следующий вид
Вот так мы ограничили доступ к файлу upsset.cgi одним IP 192.168.1.42, и соответственно доступ к папке будет выглядеть как
Ну а что сделать, если нам надо запретить один ИП, и разрешить все остальные? Да просто поменять местами
Хочу заметить, что содержимое файла .htaccess вполне можно было вписать и в сам конфиг apache в раздел <Directory> - такой способ увеличил бы скорость работы, но при внесении изменений пришлось бы перезапускать вебсервер
NTLM авторизация
Но ведь у нас есть домен, и правильнее будет авторизоваться там - возразите вы, и будите правы. О том, как это сделать написано вот тут http://corp.stniva.ru/forum/viewtopic.p ... &t=44#p298
Установка пароля
За работу того, что будет описано ниже отвечает опция apache AllowOverride
Код: Выделить всё
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
Код: Выделить всё
<Directory "/usr/home/www/admin/">
AllowOverride All
</Directory>
Код: Выделить всё
cd /usr/home/www/admin/
touch .htaccess
Код: Выделить всё
AuthUserFile /usr/home/www/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Test pass of go"
AuthType Basic
<limit GET POST>
require user roman
</limit>
1) мы задаём путь к файлу с паролями
2) сообщение при авторизации и метод
3) определяем каким пользователям можно входить - так же можно разрешить всех пользователей, которые прошли авторизацию - для этого строку require user roman следует заменить на require valid-user
Сохраняем, закрывем и создаём файл с паролями, раз уж мы его упомянули
Код: Выделить всё
touch .htpasswd
Код: Выделить всё
www# /usr/local/sbin/htpasswd -b /usr/home/www/admin/.htpasswd roman 123123
Adding password for user roman
Код: Выделить всё
www# cat .htpasswd
roman:cpndBbxb1EbxU
Хочу заметить, что содержимое файла .htaccess вполне можно было вписать и в сам конфиг apache в раздел <Directory> - такой способ увеличил бы скорость работы, но при внесении изменений пришлось бы перезапускать вебсервер
Ограничение по IP
Иногда бывают ситуации, когда надо просто разрешить одному ИП адресу - в этом случае морочиться с паролем не совсем хочется, и тогда можно ограничить доступ по IP адресу. В этом случае файл .htpasswd нам не нужен, а .htaccess имел бы следующий вид
Код: Выделить всё
<Files upsset.cgi>
deny from all
allow from 192.168.1.42
</Files>
Код: Выделить всё
deny from all
allow from 192.168.1.42
Код: Выделить всё
deny from 192.168.1.42
allow from all
NTLM авторизация
Но ведь у нас есть домен, и правильнее будет авторизоваться там - возразите вы, и будите правы. О том, как это сделать написано вот тут http://corp.stniva.ru/forum/viewtopic.p ... &t=44#p298
Работа с php как модулем
Если мы собрали php как модуль к апачу, то для того что бы фалы начали обрабатываться в конфиг httpd.conf нужно добавить следующее
найти
найти
и заменить на<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
Затем найти секцию<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
и прописать туда<IfModule mime_module>
После чего требуется перезапустить апачьAddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
"Проксирующий" Апач
Часто возникают задачи, при которых нам необходимо использовать несколько web серверов, расположенных в локальной сети за NAT, для данной задачи есть множество решений (например взять у провайдера еще один белый статический адрес или использовать несколько портов - например 80 и 81), решение с портами я отбросил, т.к. не хотелось делать лишнюю "дырку" в свою сеть и не очень удобно заводить адрес с портом, за дополнительный адрес надо платить, после изучения материала по Apache - решение пришло само
подгружаем модули, добавив в основной конфиг httpd.conf:
настройки виртуальных хостов будут выглядеть так:
подгружаем модули, добавив в основной конфиг httpd.conf:
Код: Выделить всё
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_html_module libexec/apache22/mod_proxy_html.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
Код: Выделить всё
<VirtualHost *:80>
ServerName mail.mydomain.ru
ProxyPass / http://192.168.*.11/mail/
ProxyPassReverse / http://192.168.*.11/mail/
</VirtualHost>
<VirtualHost *:80>
ServerName gps.mydomain.ru
ProxyPass / http://192.168.*.12/
ProxyPassReverse / http://192.168.*.12/
</VirtualHost>
apache - Доступ запрещен
Скорее всего, после установки, apache будет говорить что у вас отсутствует доступ к директории.
Для apache 2.4
Что бы он мог показывать файлы, в секции конфигурации данного виртуального хоста надо прописать следующее:Forbidden
You don't have permission to access /zabbix/ on this server.
Для apache 2.4
Код: Выделить всё
<Directory "/usr/home/www/">
Options None
AllowOverride All
Require all granted
</Directory>
Ротация логов
Введение:
Веб-сервис - это такой ресурс, который работает и по сути со временем за него забываешь. Но логи он пишет и через время размер лог-файла становится огромным и начинаются проблемы - медлено работает сервис, кончается место на диске и так далее. Что бы этого не происходило в системе предусмотрен механизм ротации логов, к которому надо подключить и наш лог
Задача:
Настроить ротацию логов. Логи должны архивироваться и обрезаться раз в сутки. Храниться будут логи за последнии 28 дней. Все новые логи сервиса должны ротироваться автоматически.
Решение:
В файл /etc/newsyslog.conf добавляем следующую строчку:
Где:
/var/log/apache/*.log - директория с логами сервиса
644 - права доступа - соответственно только стение
@T00 - время - полночь
GJ - флаги - G как раз и разрешает использовать * в имени лог-файла
После изменений надо перезапустить
Веб-сервис - это такой ресурс, который работает и по сути со временем за него забываешь. Но логи он пишет и через время размер лог-файла становится огромным и начинаются проблемы - медлено работает сервис, кончается место на диске и так далее. Что бы этого не происходило в системе предусмотрен механизм ротации логов, к которому надо подключить и наш лог
Задача:
Настроить ротацию логов. Логи должны архивироваться и обрезаться раз в сутки. Храниться будут логи за последнии 28 дней. Все новые логи сервиса должны ротироваться автоматически.
Решение:
В файл /etc/newsyslog.conf добавляем следующую строчку:
Код: Выделить всё
/var/log/apache/*.log 644 28 * @T00 GJ /var/run/httpd.pid 30
/var/log/apache/*.log - директория с логами сервиса
644 - права доступа - соответственно только стение
@T00 - время - полночь
GJ - флаги - G как раз и разрешает использовать * в имени лог-файла
После изменений надо перезапустить
Код: Выделить всё
/etc/rc.d/newsyslog restart