Difference between revisions of "Apache HTTP Server (Русский)"

From ArchWiki
Jump to: navigation, search
(Need check after apache upgrade)
Line 21: Line 21:
 
{{Article summary wiki|mod_perl}}
 
{{Article summary wiki|mod_perl}}
 
{{Article summary end}}
 
{{Article summary end}}
 +
{{Out of date|This page may need update since last apache version since it still referenced apache24 as the "next apache"}}
 
[[Wikipedia:LAMP (software bundle)|LAMP]] - это комбинированная серверная технология, суть которой состоит в развертывании веб-сервера '''A'''pache, сервера баз данных '''M'''ySQL/'''M'''ariaDB  и интерпретатора '''P'''HP на '''L'''inux-системе.  Эта статья описывает, как установить HTTP-сервер Apache на Arch Linux. Также он описывает, как дополнительно установить [[PHP]] и [[MariaDB_(Русский)|MariaDB]] и интегрировать их с Apache.
 
[[Wikipedia:LAMP (software bundle)|LAMP]] - это комбинированная серверная технология, суть которой состоит в развертывании веб-сервера '''A'''pache, сервера баз данных '''M'''ySQL/'''M'''ariaDB  и интерпретатора '''P'''HP на '''L'''inux-системе.  Эта статья описывает, как установить HTTP-сервер Apache на Arch Linux. Также он описывает, как дополнительно установить [[PHP]] и [[MariaDB_(Русский)|MariaDB]] и интегрировать их с Apache.
  
Line 29: Line 30:
  
 
Установите пакеты {{Pkg|apache}}, {{Pkg|php}}, {{Pkg|php-apache}} и {{Pkg|mariadb}} из официальных репозиториев Arch Linux.
 
Установите пакеты {{Pkg|apache}}, {{Pkg|php}}, {{Pkg|php-apache}} и {{Pkg|mariadb}} из официальных репозиториев Arch Linux.
 
{{Note|Несмотря на то что Apache версии 2.4 появился почти два года назад (Фев. 2012), он все еще недоступен в официальных репозиториях. Вы можете получить его через [[AUR]] по имени {{AUR|apache24}}.}}
 
  
 
==Настройка==
 
==Настройка==

Revision as of 21:30, 5 April 2014

zh-CN:LAMP Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: This page may need update since last apache version since it still referenced apache24 as the "next apache" (Discuss in Talk:Apache HTTP Server (Русский)#)
LAMP - это комбинированная серверная технология, суть которой состоит в развертывании веб-сервера Apache, сервера баз данных MySQL/MariaDB и интерпретатора PHP на Linux-системе. Эта статья описывает, как установить HTTP-сервер Apache на Arch Linux. Также он описывает, как дополнительно установить PHP и MariaDB и интегрировать их с Apache.

Если вам нужен настроенный сервис для разработки и тестирования, то можете просто установить Xampp.

Установка пакетов

В статье предполагается, что вы будете устанавливать все разом: Apache, PHP и MariaDB. Впрочем, при желании, все это можно установить и по отдельности.

Установите пакеты apache, php, php-apache и mariadb из официальных репозиториев Arch Linux.

Настройка

Apache

По соображениям безопасности при запуске сервера Apache от имени суперпользователя (напрямую или через скрипт инициализации) происходит смена идентификаторов группы и пользователя, от имени которого сервер начинает работу. Значения идентификаторов берутся из конфигурационного файла /etc/httpd/conf/httpd.conf и по умолчанию равны http. Происходит передача управления работой сервера от пользователя root к пользователю http, не имеющего привилегированных полномочий в операционной системе.

Измените конфигурационные файлы httpd.conf и extra/httpd-default.conf по вашему усмотрению и запустите демон httpd, используя систему инициализации systemd.

После этих мероприятий Apache должен запуститься. Протестируйте его работоспособность, набрав в адресной строке браузера http://localhost/. Веб-сервер должен отправить вам простую тестовую страничку.

Пользовательские каталоги

  • По умолчанию доступ к пользовательским каталогам возможен по адресу http://localhost/~user/, который показывает содержимое директории ~/public_html (расположение этой директории можно изменить в конфигурационном файле /etc/httpd/conf/extra/httpd-userdir.conf).
  • Если вы не хотите, чтобы пользовательские каталоги были доступны через web, закомментируйте следующую строку в /etc/httpd/conf/httpd.conf:
Include conf/extra/httpd-userdir.conf
  • Обязательно убедитесь, что права доступа на вашу домашнюю директорию назначены корректно, чтобы Apache смог получить доступ к ней. Ваш домашний каталог и ~/public_html/ должны быть исполняемы для "остального мира":
$ chmod o+x ~
$ chmod o+x ~/public_html 
  • Однако с точки зрения безопасности вышеприведенное решение слишком фривольно. Правильнее поступить по-другому. Сначала добавьте пользователя http в группу, которой принадлежит ваша домашняя папка. Например, если ваша домашняя папка и все ее подкаталоги принадлежат группе piter, можно проделать следующее:
# usermod -aG piter http

или

# gpasswd -a http piter
  • После этого назначьте права на чтение и исполнение для каталогов ~/, ~/public_html и, рекурсивно, на остальные подкаталоги для ~/public_html для членов группы (в нашем примере для членов группы piter). Опираясь на нижеприведенный шаблон, осуществите эти мероприятия:
$ chmod g+xr-w /home/yourusername
$ chmod -R g+xr-w /home/yourusername/public_html
Note: Таким образом, только пользователь http и все потенциальные пользователи группы piter будут иметь разделяемый доступ к вашему домашнему каталогу.

Перезапустите httpd.

SSL

# cd /etc/httpd/conf
# openssl genrsa -out server.key 2048
# chmod 600 server.key
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  • Затем в /etc/httpd/conf/httpd.conf раскомментируйте строчку, содержащую:
 Include conf/extra/httpd-ssl.conf

после этого перезапустите httpd.

Виртуальные хосты

  • Ежели вы хотите, чтобы Apache обслуживал множество хостов, раскомментируйте следующую строку в файле в /etc/httpd/conf/httpd.conf:
Include conf/extra/httpd-vhosts.conf
  • В конфигурационном файле /etc/httpd/conf/extra/httpd-vhosts.conf настройте виртуальные хосты по нижеследующему примеру:
/etc/httpd/conf/extra/httpd-vhosts.conf
NameVirtualHost *:80 # используем виртуальные хосты, основанные на доменных именах

#this first virtualhost enables: http://127.0.0.1, or: http://localhost, 
#to still go to /srv/http/*index.html(otherwise it will 404_error).
#the reason for this: once you tell httpd.conf to include extra/httpd-vhosts.conf, 
#ALL vhosts are handled in httpd-vhosts.conf(including the default one),
# E.G. the default virtualhost in httpd.conf is not used and must be included here, 
#otherwise, only domainname1.dom & domainname2.dom will be accessible
#from your web browser and NOT http://127.0.0.1, or: http://localhost, etc.
#

<VirtualHost *:80>
    DocumentRoot "/srv/http"
    ServerAdmin root@localhost
    ErrorLog "/var/log/httpd/127.0.0.1-error_log"
    CustomLog "/var/log/httpd/127.0.0.1-access_log" common
    <Directory /srv/http/>
      DirectoryIndex index.htm index.html
      AddHandler cgi-script .cgi .pl
      Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
      AllowOverride None
      Order allow,deny
      Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin your@domainname1.dom
    DocumentRoot "/home/username/yoursites/domainname1.dom/www"
    ServerName domainname1.dom
    ServerAlias domainname1.dom
    <Directory /home/username/yoursites/domainname1.dom/www/>
      DirectoryIndex index.htm index.html
      AddHandler cgi-script .cgi .pl
      Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
      AllowOverride None
      Order allow,deny
      Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin your@domainname2.dom
    DocumentRoot "/home/username/yoursites/domainname2.dom/www"
    ServerName domainname2.dom
    ServerAlias domainname2.dom
    <Directory /home/username/yoursites/domainname2.dom/www/>
      DirectoryIndex index.htm index.html
      AddHandler cgi-script .cgi .pl
      Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
      AllowOverride None
      Order allow,deny
      Allow from all
</Directory>
</VirtualHost>
  • Теперь добавьте имена для виртуальных хостов в файл /etc/hosts (это не является обязательным мероприятием, если DNS-сервер уже настроен на обслуживание соответствующих доменов, хотя и не станет лишним):
127.0.0.1 domainname1.dom 
127.0.0.1 domainname2.dom

после этого перезапустите httpd.

  • Если вы установили виртуальные хосты внутри вашей пользовательской директории, в некоторых случаях это может конфликтовать с настройками Apache для Userdir. Для того чтобы эту проблему обойти, отключите Userdir, закомментировав строку:
# User home directories
#Include conf/extra/httpd-userdir.conf
  • Как было указано выше, убедитесь в правах доступа:
# chmod 0775 /home/yourusername/
  • Если Apache предназначен для обслуживания очень большого количества виртуальных хостов, можно настроить легкое и быстрое включение/отключение последних. Для этого рекомендуется создать по одному конфигурационному файлу на каждый хост и хранить их все в одной папке, например /etc/httpd/conf/vhosts.
  • Сперва создайте папку:
# mkdir /etc/httpd/conf/vhosts
  • Затем поместите отдельные конфигурационные файлы в нее:
# nano /etc/httpd/conf/vhosts/domainname1.dom
# nano /etc/httpd/conf/vhosts/domainname2.dom
  • Затем включите отдельные конфигурации в ваш /etc/httpd/conf/httpd.conf:
#Enabled Vhosts:
Include conf/vhosts/domainname1.dom
Include conf/vhosts/domainname2.dom
  • Теперь можно быстро включать/отключать требуемые виртуальные хосты путем простого раскомментирования/комментирования.

Расширенные параметры

Данные настройки в /etc/httpd/conf/httpd.conf носят опциональный характер и, быть может, окажутся интересными для вас.

# Listen 80
  • Это TCP-порт, через который Apache обменивается данными с внешним миром.

Если вы используете Apache для разработки и локального тестирования, то можно настроить доступ к нему только через localhost. Для этого поменяйте вышеозначенную строку на:

# Listen 127.0.0.1:80
  • Страница ошибки Apache может содержать почтовый адрес администратора веб-сервера. Измените адрес на свое усмотрение:
# ServerAdmin you@example.com
  • Корневой каталог Apache, где можно разместить ваши веб-страницы:
# DocumentRoot "/srv/http"

Смените его, если хотите, но не забудьте поменять

<Directory "/srv/http">

в противном случае получите 403 ошибку (недостаточно полномочий) при попытке получить доступ к новой корневой папке Apache. Также не забудьте изменить строку Deny from all, иначе опять получите 403 ошибку:

  • Следующая директива Apache относится к секции <Directory> и означает игнорирование файлов .htaccess.
# AllowOverride None
Note: Ежели у вас возникают проблемы с настройками Apache, то можно проверить их корректность с помощью команды: apachectl configtest
  • Смотрите дополнительные настройки Apache в /etc/httpd/conf/extra/httpd-default.conf
  • Для отключения сигнатуры вашего сервера используйте:
ServerSignature Off
  • Для сокрытия информации о версиях Apache и PHP используйте:
ServerTokens Prod

PHP

  • Для включения PHP добавьте нижеследующие строки в /etc/httpd/conf/httpd.conf:
Поместите нижеследующую строку в любом месте после строки LoadModule dir_module modules/mod_dir.so:
 LoadModule php5_module modules/libphp5.so
Разместите эту строку в конце списка Include:
 Include conf/extra/php5_module.conf
Убедитесь, что следующая строка раскомментирована в секции <IfModule mime_module>:
 TypesConfig conf/mime.types
Раскомментируйте следующую строку (опционально):
 MIMEMagicFile conf/magic
Добавьте нижеследующую строку в /etc/httpd/conf/mime.types:
 application/x-httpd-php       php    php5
Note: Если вы не обнаружите библиотеку libphp5.so в каталоге (/etc/httpd/modules), то вероятнее всего, что вы не установили php-apache.
  • Если ваш корневой каталог DocumentRoot не /srv/http, добавьте его в опцию open_basedir файла /etc/php/php.ini:
 open_basedir=/srv/http/:/home/:/tmp/:/usr/share/pear/:/path/to/documentroot
  • Для определения того, корректно ли настроен PHP, создайте файл test.php в директории DocumentRoot (то есть в /srv/http/ или ~/public_html) и поместите в него следующий код:
<?php phpinfo(); ?>
Проверьте работоспособность PHP, пройдя по ссылке http://localhost/test.php или http://localhost/~myname/test.php
Если PHP-код не исполняется, а на странице браузера вы увидите содержимое test.php, проверьте добавили ли вы Includes в строку Options для вашего корневого каталога в /etc/httpd/conf/httpd.conf. Кроме того, убедитесь, что TypesConfig conf/mime.types раскомментирован в секции <IfModule mime_module>. Также можно попробовать добавить нижеследующую строку в секцию <IfModule mime_module> файла httpd.conf:
AddHandler application/x-httpd-php .php

Расширенные параметры

date.timezone = Europe/Moscow
  • По желанию включите режим показа ошибок при отладке PHP-кода, для этого измените значение опции display_errors на On в файле /etc/php/php.ini:
display_errors=On
  • Ежели вы хотите использовать модуль libGD, установите php-gd и раскомментируйте extension=gd.so в /etc/php/php.ini:
Note: Пакет php-gd требует libpng, libjpeg-turbo и freetype2.
extension=gd.so
Note: Обратите внимание на то, какие расширения PHP вы раскомментируете. Подключайте только те расширения, которые необходимы и достаточны для работы.
  • Для использования модуля mcrypt установите php-mcrypt и раскомментируйте extension=mcrypt.so в /etc/php/php.ini:
extension=mcrypt.so
  • Не забудьте добавить индексные файлы /etc/httpd/conf/extra/php5_module.conf, если это необходимо:
DirectoryIndex index.php index.phtml index.html

PHP-модули apache2-mpm-worker и mod_fcgid

  • Раскомментируйте нижеследующую строку в /etc/conf.d/apache:
HTTPD=/usr/sbin/httpd.worker
  • Раскомментируйте нижеследующую строку в /etc/httpd/conf/httpd.conf:
Include conf/extra/httpd-mpm.conf
  • Создайте конфигурационный файл /etc/httpd/conf/extra/php5_fcgid.conf со следующим содержимым:
/etc/httpd/conf/extra/php5_fcgid.conf
# Required modules: fcgid_module

<IfModule fcgid_module>
	AddHandler php-fcgid .php
	AddType application/x-httpd-php .php
	Action php-fcgid /fcgid-bin/php-fcgid-wrapper
	ScriptAlias /fcgid-bin/ /srv/http/fcgid-bin/
	SocketPath /var/run/httpd/fcgidsock
	SharememPath /var/run/httpd/fcgid_shm
        # If you don't allow bigger requests many applications may fail (such as WordPress login)
        FcgidMaxRequestLen 536870912
        PHP_Fix_Pathinfo_Enable 1
        # Path to php.ini – defaults to /etc/phpX/cgi
        DefaultInitEnv PHPRC=/etc/php/
        # Number of PHP childs that will be launched. Leave undefined to let PHP decide.
        #DefaultInitEnv PHP_FCGI_CHILDREN 3
        # Maximum requests before a process is stopped and a new one is launched
        #DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
        <Location /fcgid-bin/>
		SetHandler fcgid-script
		Options +ExecCGI
	</Location>
</IfModule>
  • Создайте необходимый каталог для php-wrapper и симлинк на него:
# mkdir /srv/http/fcgid-bin
# ln -s /usr/bin/php-cgi /srv/http/fcgid-bin/php-fcgid-wrapper
  • Отредактируйте /etc/httpd/conf/httpd.conf:
#LoadModule php5_module modules/libphp5.so
LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/php5_fcgid.conf
  • Убедитесь, что в файле /etc/php/php.ini включена директива:
cgi.fix_pathinfo=1

перезапустите httpd.

Note: Так же как и в Apache 2.4 (пакет apache24AUR доступен через AUR) вы можете использовать mod_proxy_fcgi вместе с PHP-FPM. Посмотрите здесь пример конфигурации.

MariaDB

  • Сконфигурируйте MySQL/MariaDB так, как описано в MariaDB.
extension=pdo_mysql.so
extension=mysqli.so
extension=mysql.so
Tip: Если вы используете библиотеку mysqli.so, то необходимо раскомментировать как 'extension=mysqli.so', так и 'extension=mysql.so'.
Warning: Начиная с PHP версии 5.5, библиотека mysql.so получила статус устаревшей и ее использование не рекомендуется.
  • Вы можете добавить новых пользователей MySQL. Быть может вы захотите настроить доступ к серверу MySQL только с localhost. Для этого достаточно раскомментировать skip-networking в /etc/mysql/my.cnf. После этого необходим перезапуск MySQL для того, чтобы изменения вступили в силу.
Tip: Возможно вы захотите установить инструменты для разработки и сопровождения баз данных phpMyAdmin, Adminer или mysql-workbenchAUR.

Внешние ссылки