Настройка web-сервера Apache на работу с HTML+PHP5 файлами сетевой файловой системы (NFS)
В четвертом уроке цикла статей о настройке стека web-приложений мы поговорим о сервере Apache.
Web-сервер Apache отвечает за предоставление доступа к динамическому контенту по HTTP или HTTPS протоколу. В этом примере мы установим и будем использовать web-сервер Apache2 + php5, а так же установим DocumentRoot на vm05:/exports/html, смонтировав его в /var/www/html. Для этого мы введем следующие команды на нашем виртуальном сервере vm02 с IP-адресом 192.168.1.11.
Настройка NFS- клиента
С помощью yum-менеджера установим пакеты NFS-клиента:
# yum groupinstall "Network file system client"
Или чуть проще:
# yum install nfs-utils nfs4-acl-tools
Включим службы NFSv4-клиента:
# chkconfig rpcbind on
# chkconfig rpcidmapd on
# chkconfig nfslock on
/etc/idmapd.conf настройки nfs-клиента
Отредактируем файл конфигурации nfs-клиента
# vi /etc/idmapd.conf
Убедитесь, что параметры выставлены в соответствии с доменным именем NFS-сервера:
Domain = cyberciti.biz
[Mapping]
Nobody-User = nobody
Nobody-Group = nobody
Сохраните и закройте файл. Запустим все службы NFS-клиента:
# /sbin/service rpcbind start
# /sbin/service rpcidmapd start
# /sbin/service nfslock start
Монтирование файловой системы
Введите следующую команду
# showmout -e vm05
Или:
# showmout -e 192.168.1.14
Пример вывода команды:
Export list for v.txvip1:
/exports/html 192.168.1.10,192.168.1.11
/exports/static 192.168.1.10,192.168.1.11
Смонтируем /exports/html файловую систему в /var/www/html, введя следующую команду:
# /bin/mount -t nfs4 -orsize=32768,wsize=32768,intr,hard,proto=tcp,sync vm05:/exports/html /var/www/html/
Или:
# /bin/mount -t nfs4 -orsize=32768,wsize=32768,intr,hard,proto=tcp,sync 192.168.1.14:/exports/html /var/www/html/
Монтирование файловой системы через /etc/fstab
Отредактируем /etc/fstab:
# vi /etc/fstab
Добавим следующую строку:
vm05:/exports/html /var/www/html nfs4 orsize=32768,wsize=32768,intr,hard,proto=tcp,sync
Сохраним и закроем файл. Убедимся, что netfs-служба включена:
# chkconfig netfs on
Убедимся, что пользователь apache видит наши файлы
# su - apache
$ ls /var/www/html/
$ exit
#
Обратите внимание, что root-пользователь или любой другой пользователь не видит /var/www/html из-за установленной нами политики безопасности. Только apache-пользователь должен получить доступ к DocumentRoot. Это наши настройки по умолчанию.
Установка программного обеспечения Apache
Установим пакеты Apache2 через yum-менеджер:
# yum install httpd
Установка php5 и необходимые модули
Введите следующие команды, что бы установить php5, модули, предоставляющие доступ к mysql, модули работы с графическими файлами и все остальные, необходимы в работе вашего приложения модули:
# yum install -y php-pear php-common php-bcmath php-mbstring php-cli php-pdo php-php-gettext php-mcrypt php-gd php-xml php-pecl-apc php php-mysql php-xmlrpc
Установка поддержки memcached для php5
Для того чтобы получить доступ к memcached-серверу, установленному на vm03 необходимо установить php кэш- сервер:
# yum install -y php-pecl-memcache
Настройка Apache
Отредактируем файл конфигурации сервера Apache /etc/httpd/conf/httpd.conf:
# vi /etc/httpd/conf/httpd.conf
Добавьте или отредактируйте следующие настройки (DocumentRoot должен указывать на nfs-раздел, смонтированный в /var/www/html):
# Разрешить прокси-серверу коммуникации по локальной сети
Listen 192.168.1.11:80
# Безопасности по умолчанию во избежание утечки информации
ServerTokens Prod
ServerSignature Off
# Установка DocumentRoot
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Сохраните и закройте файл.
Конфигурирование PHP5
PHP is a widely used server-side scripting language («Москва, столица нашей родины» прим.пер.)
Отредактируем файл /etc/httpd/conf.d/php.conf следующей командой:
# cat /etc/httpd/conf.d/php.conf
Приблизительный вывод команды:
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.<br />
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
# Присобачиваем PHP-интерпретатор к файлам с расширением .php
AddHandler php5-script .php
AddType text/html .php
# Add index.php to the list of files that will be served as directory
# indexes.
DirectoryIndex index.php
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
Смотрите и читайте о том, как защитить и оптимизировать PHP5 в дополнительной статье по теме (или просите перевод, — прим.пер.)
Извлечение реальных IP для перенаправленных HTTP-запросов
Установим пакет mod_extract_forwarded, чтобы получить реальный IP источника направленного HTTP-запроса (подключаем EPEL-репозиторий):
# yum -y install mod_extract_forwarded package
Редактируем /etc/httpd/conf.d/mod_extract_forwarded.conf:
# vi /etc/httpd/conf.d/mod_extract_forwarded.conf
Добавим или изменим настройку следующим образом:
## Accept real ip from our nginx reverse proxy at 192.168.1.1 ##
MEFaccept 192.168.1.1
Сохраним/закроем файл и перезапустим web-сервер:
# service httpd reload
Настройка iptables для доступа к web-серверу
Отредактируйте файл /etc/sysconfig/Iptables, добавив следующие параметры (убедитесь, что они прописаны до окончательных LOG и DROP настроек INPUT-цепочки):
## разрешить доступ только из локальной сети ##
-A INPUT -m state --state NEW -p tcp -s 192.168.1.0/24 --dport 80 -j ACCEPT
Сохраняем, закрываем. Перезапускаем iptables:
# /sbin/service iptables restart
# /sbin/iptables -L -v -n
Включаем Apache
Запускам Apache2 web-сервер следующей командой:
# chkconfig httpd on
# service httpd start
Врубаем браузер и ломимся на наш сервер:
http://192.168.1.11/
Применчание к MySQL и Memcached серверу
Если вам нужно использовать mysql в вашем приложении – IP-адрес 192.168.1.13 и tcp-порт 3306:
/* Пример php-конфигурации приложения */
/* Имя БД для WordPress */
define('DB_NAME', 'foo');
/* MySQL database username */
define('DB_USER', 'bar');
/* MySQL database password */
define('DB_PASSWORD', 'mypassword');
/* MySQL hostname */
define('DB_HOST', '192.168.1.13');
Если вам нужен memcached-сервер – IP-адрес 192.168.1.12 и tcp-порт 11211:
/* пример php-кода */
if ( isset($memcached_servers) )
$buckets = $memcached_servers;
else
$buckets = array('default' => array('192.168.1.12:11211'));
Или:
$config['Datastore']['class'] = 'myApp_MemCached;
$i = 0;
$i++;
$config['Misc']['memcacheserver'][$i] = '192.168.1.12';
$config['Misc']['memcacheport'][$i] = 11211;
$config['Misc']['memcachepersistent'][$i] = true;
$config['Misc']['memcacheweight'][$i] = 1;
$config['Misc']['memcachetimeout'][$i] = 1;
$config['Misc']['memcacheretry_interval'][$i] = 15;
- Вводная часть
- Шаг №1: Настройка / Установка: NFS файловый сервер
- Шаг №2: Настройка / установка: сервер баз данных MySQL
- Шаг №3: Настройка / Установка: Memcached сервера кэширования
- Шаг №4: Настройка / Установка: Apache + php5 приложение веб-сервера
- Шаг №5: Настройка / Установка: веб-сервер Lighttpd для статических активов
- Шаг №6: Настройка / Установка: Nginx обратный (reverse) прокси-сервер
Автор: danielnewman