Настройка web-сервера

Материал из RSU WiKi
Перейти к: навигация, поиск
Pen.pngЭта статья находится в процессе написания.
Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Содержание

Задача

Создать ... с поддержкой MySQL и PHP

Описываемая система работает на базе операционной системы SLES9 SP3 (ppc64) [1] в логическом разделе LPAR [2] на сервере IBM pSeries [3]. Используется 64х-битная ppc-сборка Apache 2.0.49

Установка

Nginx

Основная статья: Nginx

mod_rpaf

Качаем src.rpm, компилируем при помощи rpmbuild --rebuild и ставим или подключаем репозиторий mod_rpaf для SuSE и ставим через zypper.

Создаем файл: /etc/apache2/conf.d/mod_rpaf.conf

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP

mod_security

Качаем src.rpm с сервера software.opensuse.org, собираем:

rpmbuild --rebuild mod_security2.src.rpm

Ставим из /usr/src/packages/

Лезем в /etc/apache2 и редактируем httpd.conf:

### Global Environment ######################################################
#
# The directives in this section affect the overall operation of Apache,
# such as the number of concurrent requests.
 
<b># Load libxml2
LoadFile /usr/lib/libxml2.so</b>
 
# Mod_security policy file
Include /etc/apache2/mod_security.conf

Лезем в /etc/sysconfig/apache2 и добавляем модули в APACHE_MODULES:

uniqe_id security2

MySQL

Основная статья: MySQL

Настройка

Nginx

mod_security

Apache

Подключение модулей

Подключение модулей производится в файле

/etc/sysconfig/apache2

В параметре APACHE_MODULES. Он может выглядеть и так:

APACHE_MODULES="authz_host actions alias auth_basic authz_groupfile authn_file authz_user autoindex
cgi dir include log_config mime negotiation setenvif status userdir asis imagemap php5 perl security2
rpaf authz_defau lt daflate headers expires deflate env rewrite unique_id"

HTTP-авторизация для доступа к папке на сервере

Что бы прекратить публичный доступ к какому-либо web-ресурсу или его подкаталогу воспользуемся возможностями файла .htaccess:

AuthType Basic
AuthName Secure
AuthUserFile <passwdfile>
 
require valid-user

где <passwdfile> может быть вида:

  1. /srv/www/vhosts/www.example.com.pass
  2. /srv/www/vhosts/www.example.com_subdir.pass
  3. /srv/www/vhosts/www.example.com/subdir/.htpasswd

Варианты 1 и 2 более предпочтительны, так как файлы с паролями находятся за пределами дерева каталогов, отдаваемых веб-сервером в интернет. Вариант 3 используется в случае, когда нет доступа к таким каталогам. Защита файла от прямого доступа осуществляется по имени, веб-сервер apache настроен по умолчанию таким образом, чтобы не отдавать файлы, начинающиеся с ".ht"

Для создания и редактирования файла с парами логин:пароль следует воспользоваться командой htpasswd2:

htpasswd2 <passwdfile> <username>

Юникод как кодировка по-умолчанию вместо ISO-8859-1

Для SLES 9 и 10, в файле /etc/apache2/mod_mime-defaults.conf:

AddDefaultCharset UTF-8

Сжатие на стороне сервера и другая оптимизация вывода

Правим файл /etc/sysconfig/apache2. Добавляем (если нет) в строку APACHE_MODULES модули deflate, headers и expires

Добавляем в каталог /etc/apache2/conf.d/ файл optimize.conf следующего содержания:

# добавляем Content-Type для всех файлов с расширением .gz                      
AddEncoding gzip .gz                                                            
# включаем сжатие для HTML- и XML-файлов                                        
AddOutputFilterByType DEFLATE text/html                                         
AddOutputFilterByType DEFLATE text/xml                                          
# и для иконок (об этом чуть ниже)                                              
AddOutputFilterByType DEFLATE image/x-icon                                      
# также для CSS- и JavaScript-файлов                                            
AddOutputFilterByType DEFLATE text/css                                          
AddOutputFilterByType DEFLATE text/javascript                                   
AddOutputFilterByType DEFLATE application/x-javascript                          
# выставляем максимальную степень сжатия (если возникнут проблемы с             
# серверной производительностью, следует уменьшить до 7 или 1)                  
DeflateCompressionLevel 9                                                       
# и максимальный размер окна для архивирования                                  
DeflateWindowSize 15                                                            
# отключаем архивирование для «проблемных» браузеров                            
BrowserMatch ^Mozilla/4 gzip-only-text/html                                     
BrowserMatch ^Mozilla/4\.0[678] no-gzip                                         
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html                               
# добавляем заголовок Vary для корректного распознавания браузеров,             
# находящихся за локальными прокси-серверами
Header append Vary User-Agent                                                   
# запрещаем кэширование на уровне прокси-сервера для всех файлов,               
# для которых у нас выставлено сжатие,                                          
<FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$>                             
    Header append Cache-Control: private                                        
</FilesMatch>                                                                   
 
# Устанавливаем Expires                                                         
<IfModule mod_expires.c>                                                        
    ExpiresActive On                                                            
    ExpiresDefault "access plus 1 week"                                         
</IfModule>                                                                     
 
# Устанавливаем ETag                                                            
FileETag MTime Size </pre>

Virtual Hosts

Домашние страницы пользователей

Оптимизация

Открываем /etc/apache2/server-tuning.conf и правим значения:

KeepAlive Off

эту функцию берет на себя Nginx

ServerLimit XX
MaxClients XX

где XX - это 1/2 размера ОЗУ, деленная на 20 [4].

Это позволит серверу в случае лавинообразного роста нагрузки не уйти в глухой своп не обслуживая вообще ни каких клиентов, а nginx'у честно отплевываться 502ми ошибками.

Subversion (SVN)

Основная статья: Subversion

MySQL

Основная статья: MySQL

Юникод в БД

DROP DATABASE www;
CREATE DATABASE www CHARACTER SET utf8 COLLATE utf8_general_ci;
USE www;
set CHARACTER SET utf8;

PHP

eAccelerator

Берем src.rpm с сайта software.opensuse.org, компилируем при помощи

rpmbuild --rebuild --target=ppc

и ставим.

eAccelerator кладет apache2 в segfault, использовать его в production нельзя.

xcache

Берем src.rpm с сайта software.opensuse.org, компилируем при помощи

rpmbuild --rebuild --target=ppc

и ставим.

В конфигурационном файле apache2 в служебном виртуалхосте добавляем:

Alias /xcache-admin/ "/usr/share/php5/xcache/admin/"   
<Directory "/usr/share/php5/xcache/admin/">
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Логин и пароль для доступа указываются в конфигурационном файле xcache: /etc/php5/conf.d/xcache.ini

Тюнинг

Параметры /etc/php5/conf.d/xcache.ini.

  • xcache.count = 2

Несмотря на то, что авторы xcache рекомендуют установить этот параметр равным числу ядер процессора

cat /proc/cpuinfo |grep -c processor

мы ставим не больше 1/2, чтобы хватало и на другие задачи.

  • xcache.size = 256M
  • xcache.ttl = 7200
  • xcache.gc_interval = 300

Подбираем эмпирическим путем таким образом, чтобы свести к минимуму число "OOMs" в статистике работы xcache и не израсходовать на кэш всю оперативную память.

Ruby on Rails

Скачиваем с сайта Novell SDK для SLES и подключаем его. Затем устанавливаем ruby, rails и fastcgi. Подключаем в апаче fcgi модуль в /etc/sysconfig/apache2, выполняем

SuSEconfig 

и

rcapache2 restart

Проблемы

mime-type для документов OpenOffice

По-умолчанию в поставке nginx и apache2 отсутствуют mime-types для документов OOo. В случае использования браузера Internet Explorer это приводит к тому, что все файлы OOo сохраняются как zip-папки.

В директории /etc/apache2/conf.d/ создаем файл OOo_mimes.conf и помещаем туда следующее содержимое:

AddType application/vnd.stardivision.chart .sds 
AddType application/vnd.stardivision.calc .sdc 
AddType application/vnd.stardivision.writer .sdw 
AddType application/vnd.stardivision.writer-global .sgl 
AddType application/vnd.stardivision.draw .sda 
AddType application/vnd.stardivision.impress .sdd 
AddType application/vnd.stardivision.math .sdf 
AddType application/vnd.sun.xml.writer .sxw 
AddType application/vnd.sun.xml.writer.template .stw
AddType application/vnd.sun.xml.writer.global .sxg 
AddType application/vnd.sun.xml.calc .sxc 
AddType application/vnd.sun.xml.calc.template .stc 
AddType application/vnd.sun.xml.impress .sxi 
AddType application/vnd.sun.xml.impress.template .sti
AddType application/vnd.sun.xml.draw .sxd 
AddType application/vnd.sun.xml.draw.template .std
AddType application/vnd.sun.xml.math .sxm
AddType application/vnd.oasis.opendocument.text .odt
AddType application/vnd.oasis.opendocument.text-template .ott
AddType application/vnd.oasis.opendocument.text-web .oth
AddType application/vnd.oasis.opendocument.text-master .odm
AddType application/vnd.oasis.opendocument.graphics .odg
AddType application/vnd.oasis.opendocument.graphics-template .otg
AddType application/vnd.oasis.opendocument.presentation .odp
AddType application/vnd.oasis.opendocument.presentation-template .otp
AddType application/vnd.oasis.opendocument.spreadsheet .ods
AddType application/vnd.oasis.opendocument.spreadsheet-template .ots
AddType application/vnd.oasis.opendocument.chart .odc
AddType application/vnd.oasis.opendocument.formula .odf
AddType application/vnd.oasis.opendocument.database .odb
AddType application/vnd.oasis.opendocument.image .odi

В конец файла /etc/nginx/mime.conf добавляем:

    application/vnd.stardivision.chart                       sds;
    application/vnd.stardivision.calc                        sdc;
    application/vnd.stardivision.writer                      sdw;
    application/vnd.stardivision.writer-global               sgl;
    application/vnd.stardivision.draw                        sda;
    application/vnd.stardivision.impress                     sdd;
    application/vnd.stardivision.math                        sdf;
    application/vnd.sun.xml.writer                           sxw;
    application/vnd.sun.xml.writer.template                  stw;
    application/vnd.sun.xml.writer.global                    sxg;
    application/vnd.sun.xml.calc                             sxc;
    application/vnd.sun.xml.calc.template                    stc;
    application/vnd.sun.xml.impress                          sxi;
    application/vnd.sun.xml.impress.template                 sti;
    application/vnd.sun.xml.draw                             sxd;
    application/vnd.sun.xml.draw.template                    std;
    application/vnd.sun.xml.math                             sxm;
    application/vnd.oasis.opendocument.text                  odt;
    application/vnd.oasis.opendocument.text-template         ott;
    application/vnd.oasis.opendocument.text-web              oth;
    application/vnd.oasis.opendocument.text-master           odm;
    application/vnd.oasis.opendocument.graphics              odg;
    application/vnd.oasis.opendocument.graphics-template     otg;
    application/vnd.oasis.opendocument.presentation          odp;
    application/vnd.oasis.opendocument.presentation-template otp;
    application/vnd.oasis.opendocument.spreadsheet           ods;
    application/vnd.oasis.opendocument.spreadsheet-template  ots;
    application/vnd.oasis.opendocument.chart                 odc;
    application/vnd.oasis.opendocument.formula               odf;
    application/vnd.oasis.opendocument.database              odb;
    application/vnd.oasis.opendocument.image                 odi;

mime-type для документов Microsoft Office 2007/2010

По-умолчанию в поставке nginx и apache2 отсутствуют mime-types для документов MS Office 2007. Иногда это приводит к тому, что все файлы сохраняются как zip-папки.

В директории /etc/apache2/conf.d/ создаем файл MSOx_mimes.conf и помещаем туда следующее содержимое:

AddType  application/vnd.openxmlformats  .docx .pptx .xlsx

Логи

В SuSE лог-файлы apache2 расположены по следующему пути:

/var/log/apache2

По-умолчанию сообщения об ошибках сохраняются в файле error_log.

AWStats

Основная статья: AWStats

Как собрать все User-agent'ы из логов для дальнейшего анализа

Кладем в /var/log/apache2 следующий скрипт:

#!/bin/bash                                                                     
 
date > useragents.txt                                                           
echo "------------------" >> useragents.txt                                     
 
echo "" >> useragents.txt.tmp                                                   
 
echo "Думаю:"                                                                   
 
for i in `ls *-access_log-*.gz`                                                 
 do                                                                             
  echo -n "."                                                                   
  gunzip -d -c $i | awk 'split ($0, a, "\"") {print a[6]}' | sort | uniq >> user
 done                                                                           
 
cat useragents.txt.tmp | sort | uniq >> useragents.txt                          
rm useragents.txt.tmp
 
echo "Сделано! Уникальных строк User-agent:"                                    
cat useragents.txt | wc -l

Настройка клиентских приложений

См. также

Ссылки

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты