11 июл 2010
Установка, настройка и оптимизация веб-сервера на Debian
Dmitrius Категория: Web-Мастеру » Уроки
У нас вы можете скачать бесплатно Установка, настройка и оптимизация веб-сервера на Debian

Данный материал предоставлен сайтом Skripter.info исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Оптимизация apache

Прежде всего включаем следующие модули:
deflate, expires, headers, php5, rpaf (установить его если не настроен)

Затем настраиваем виртуальные хосты:

<Directory />
   Options FollowSymLinks
   AllowOverride All
   Order Allow,Deny
   Allow from all
</Directory>
NameVirtualHost *
Listen *:80
Include /etc/apache2/sites/


Затем для каждого сайта добавляем свои файлы в /etc/apache2/sites/ следующего формата:

<VirtualHost *>
    ServerName example.ru
    ServerAlias www.example.ru
    DocumentRoot /home/example.ru/docs/
    ErrorLog /home/example.ru/logs/error.log
    CustomLog /home/example.ru/logs/access.log combined
</VirtualHost>


Теперь перейдем к оптимизации. Добавляем файл /etc/apache2/conf.d/optimize (по рекомендациям webo.in):

# добавляем 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


Можно переходить дальше.

Оптимизация Nginx

Первым делом заставляем apache слушать локальный нестандартный порт:

Listen 127.0.0.1:8080


И правим файл /etc/nginx/nginx.conf примерно так:

user www-data;
worker_processes  2;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

https {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] $status '
                      '"$request" $body_bytes_sent "$https_referer" '
                    '"$https_user_agent" "https_x_forwarded_for"';
    access_log   /var/log/nginx/access.log;

    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay on;
    keepalive_timeout  30;

    gzip  on;

    server {
   listen 80;
    
        location / {
           proxy_pass https://127.0.0.1:8080/;
           proxy_redirect off;
       log_not_found off;
  
       proxy_set_header   Host             $host;
           proxy_set_header   X-Real-IP        $remote_addr;
           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

       client_max_body_size       10m;
           client_body_buffer_size    128k;
          
           proxy_connect_timeout      40;
           proxy_send_timeout         90;
           proxy_read_timeout         40;
                                                                                
           proxy_buffer_size          4k;
           proxy_buffers              4 32k;
           proxy_busy_buffers_size    64k;
       proxy_temp_file_write_size 64k;
        }
    }
}


Перезагружаем apache и nginx. Наблюдаем за уже значительным увеличением производительности.

Оптимизация PHP

После установки PHP, также устанавливаем eaccelerator. Затем правим php.ini

max_execution_time = 30
Сколько CPU-секунд может потремат скрипт

max_input_time = 60
Как долго (в секундах) скрипт может ждать входных данных

memory_limit = 32M
Какое количество памяти (в байтах) может расходовать скрипт, прежде чем он будет убит. Для неслабых приложений следует устанавливать этот лимит больше 64M

output_buffering = 4096
Какое количество данных (в байтах) накапливается в буфере, прежде чем они будут отправлены клиенту


Размер этих значений обычно зависит от приложения. Если вы принимаете от пользователей большие файлы, max_input_time может быть увеличен или в php.ini, или путем его переопределения в коде. Подобным образом, для программ, потребляющих большое количество CPU или памяти могут потребоваться более высокие значения. Цель состоит в том, чтобы уменьшить воздействие "прожорливой" программы, поэтому глобальная отмена этих настроек не рекомендуется. Другое замечание относительно max_execution_time: это относится ко времени, затраченному CPU на процесс, а не к абсолютному времени. Таким образом, программа, совершающая большое количество вводов/выводов и небольшое количество вычислений, может выполняться намного дольше, чем max_execution_time. max_input_time также может быть больше, чем max_execution_time.

Количество записей, которые может сделать PHP, может настраиваться. В промышленной эксплуатации экономят место на диске, отменяя все журналы, кроме самых критических. Если журналы необходимы для диагностики проблем, вы можете вернуть то журналирование, которое необходимо. error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR включает журналирование, достаточное для выявления проблем, но удаляет из скриптов лишнюю информацию.

Оптимизация MySQL

Первым делом используем скрипты:
MySQLtuner.sh и tuning-primer.sh. Следуя появляющимся инструкциям настраиваем my.cnf.

Для правильной работы в кодировке utf8 в файле /etc/mysql/my.cnd настраиваем следующее (в соответствующих секциях):

[client]
port = 3306
socket = mysql
default-character-set=utf8

[mysqld]
port = 3306
socket = mysql
skip-locking
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server = utf8
collation-server = utf8_general_ci
[mysql]
default-character-set=utf8
key_buffer = 1M
max_allowed_packet = 2M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
query_cache_limit = 256K
query_cache_size = 4M


Проверять переменные можно этими запросами:

show variables like "%character%";
show variables like "%collation%";


Чтобы задать кодироку по-умолчанию (напр. если была latin1):
1. Для все БД:

alter database DBNAME default character set utf8 collate utf8_general_ci


Для таблицы:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;


Кстати, Разница между utf8_general_ci и utf8_unicode_ci, в том, что utf8_unicode_ci поддерживает expansions, то есть сопоставление одного символа нескольким (например - в Германии ß = ss ). Т.е. применять utf8_unicode_ci нужно например для немецкого или китайского языков. Если на сайте будет только русский или английский, то достаточно utf8_general_ci, которая будет работать гораздо быстрее.









Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
gedvix | 19 июля 2010 22:04
  • Группа: Посетители |
  • Комментарий: 1 (ссылка)

СПС!

mak-shherbin | 25 октября 2010 23:17
  • Группа: Посетители |
  • Комментарий: 2 (ссылка)

СПС!Буду очень благодарен!

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.