LAMP (Русский)
| Описание |
|---|
| Эта статья посвящена установке и базовой настройке LAMP-сервера. |
| Полезные ссылки |
| MariaDB |
| PhpMyAdmin |
| Adminer |
| Xampp |
| mod_perl |
LAMP - это комбинированная серверная технология, которая предназначена для развертывания веб-сервера Apache на Linux-системе, использует сервер MySQL/MariaDB для хранения данных, а интерпретатор PHP для обработки данных на стороне сервера. Эта статья описывает, как установить HTTP-сервер Apache на Arch Linux. Также он описывает, как дополнительно установить PHP и MariaDB и интегрировать их с Apache.
Если вам нужен настроенный сервис для разработки и тестирования, то можете просто установить Xampp.
Contents |
Установка пакетов
В статье предполагается, что вы будете устанавливать все разом: 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на ваше усмотрение. - Запустить веб-сервер Apache, путем запуска демона httpd.
- После этих мероприятий Apache должен запуститься. Протестируйте его работоспособность, набрав в адресной строке браузера
http://localhost/. Если получите 403 ошибку, то закомментируйте следующую строчку в/etc/httpd/conf/httpd.conf:
Include conf/extra/httpd-userdir.conf
Пользовательские каталоги
- По умолчанию доступ к пользовательским каталогам возможен по адресу
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
- В таком случае вы должны назначить права на чтение и исполнение для каталогов
~/,~/public_htmlи, рекурсивно, на остальные подкаталоги для~/public_htmlдля членов группы (в нашем примере для членов группы piter). Опираясь на приведенный ниже шаблон, осуществите эти мероприятия:
$ chmod g+xr-w /home/yourusername $ chmod -R g+xr-w /home/yourusername/public_html
- Также можно повысить безопасность веб-сервера за счет acl.
Перезапустите httpd.
SSL
- Создайте самозаверенный сертификат (вы можете настроить длину ключа и срок его действия):
# cd /etc/httpd/conf # openssl genrsa -des3 -out server.key 1024 # openssl req -new -key server.key -out server.csr # cp server.key server.key.org # openssl rsa -in server.key.org -out server.key # 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 поддерживал много хостов, убедитесь в наличии строки:
# Virtual hosts Include conf/extra/httpd-vhosts.conf
в /etc/httpd/conf/httpd.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>
- Проверьте содержимое этого конфигурационного файла на предмет синтаксической корректности, для этого выполните в терминале команду:
$ apachectl -S
- Теперь добавьте имена для виртуальных хостов в файл
/etc/hosts(это не является обязательным мероприятием, если DNS-сервер BIND уже настроен на обслуживание соответствующих доменов, хотя и не станет лишним):
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/domainname1.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
- Смотрите дополнительные настройки Apache в
/etc/httpd/conf/httpd.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
- Если ваш корневой каталог
DocumentRootне/srv/http, добавьте его в опциюopen_basedirфайла/etc/php/php.ini:
open_basedir=/srv/http/:/home/:/tmp/:/usr/share/pear/:/path/to/documentroot
- Перезапустите httpd-демона.
- Для определения того, корректно ли настроен 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
Расширенные параметры
- Рекомендуется правильно настроить вашу временную зону (список временных зон) в
/etc/php/php.iniпо примеру:
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:
extension=gd.so
- Для использования модуля
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
- Установите пакеты mod_fcgid и php-cgi из официальных репозиториев.
- Создайте конфигурационный файл
/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.
MariaDB
- Сконфигурируйте MySQL/MariaDB так, как описано в MariaDB.
- Раскомментируйте по меньшей мере одну из нижеприведенных строчек в
/etc/php/php.ini:
extension=pdo_mysql.so extension=mysqli.so extension=mysql.so
- Вы можете добавить новых пользователей MySQL. Быть может вы захотите настроить доступ к серверу MySQL только с localhost. Для этого достаточно раскомментировать
skip-networkingв/etc/mysql/my.cnf. После этого необходим перезапуск MySQL для того, чтобы произведенные изменения вступили в силу.
- Перезапустите демона httpd.