По мере роста любого сайта Администраторам приходится сталкиваться с
проблемами производительности своих сервисов на достаточно слабых
серверах. На сегодняшний день CentOS как и остальные Linux подобные
системы для меня являются достаточно черным ящиком, но упершись в
пределы производительности сервера пришлось искать решение.
По сути оптимизация это очень тонкая вещь. При неправильной настройке на мощном сервере приложения будут работать медленно или же на малых ресурсах все будет работать достаточно хорошо.
Почитав в интернете соответствующие статьи я пришел к выводу, что оптимизация будет идти по двум направлениям:
Для увеличения производительности необходимо построить двухуровневую систему. В качестве Frontend будет выступать Nginx (обработка статического содержимого), а в качестве Buckend будет выступать Apache2 в качестве генератора динамического контента. То есть запросы принимает Nginx, анализирует их. Если содержимое статическое, то выдает его по настроенному пути. А если содержимое динамическое то по внутреннему порту он передает запрос Apache. получив ответ помещает его в кеш и затем отдает клиенту.
1.Подключаем репозитарий epel.
Примечание: для упрощения себе дальнейшей жизни nginx я сделал так, что nginx запускается из под той же учетной записи что и apache
Далее переходим к настройке виртуальных хостов ngix.
Файлы конфигураций лежат по пути /etc/nginx/conf.d и имеют расширение .conf
Создаем файл конфигурации например командой vi /etc/nginx/conf.d/site1.conf и прописываем в нем следующее содержимое
4.Прописываем nginx в автозапуск
Вот пожалуй и все.
Про мой личный опыт оптимизации в следующей статье.
По сути оптимизация это очень тонкая вещь. При неправильной настройке на мощном сервере приложения будут работать медленно или же на малых ресурсах все будет работать достаточно хорошо.
Почитав в интернете соответствующие статьи я пришел к выводу, что оптимизация будет идти по двум направлениям:
- Оптимизация Web сервиса Apache путем замены на связку Nginx+Apache.
- Оптимизация Apache и MySQL.
Для увеличения производительности необходимо построить двухуровневую систему. В качестве Frontend будет выступать Nginx (обработка статического содержимого), а в качестве Buckend будет выступать Apache2 в качестве генератора динамического контента. То есть запросы принимает Nginx, анализирует их. Если содержимое статическое, то выдает его по настроенному пути. А если содержимое динамическое то по внутреннему порту он передает запрос Apache. получив ответ помещает его в кеш и затем отдает клиенту.
1.Подключаем репозитарий epel.
# для 32-битных ОС
rpm -ihv http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# для 64-битных ОС
rpm -ihv http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
2. Устанавливаем nginxyum install nginx3. Открываем конфигурационный файл nginx на редактирование
vi /etc/nginx/nginx.confИ заменяем следующим содержимым
Примечание: для упрощения себе дальнейшей жизни nginx я сделал так, что nginx запускается из под той же учетной записи что и apache
user apache;Вот тут хотелось бы обратить внимание вот на что. При установке nginx создает одноименного пользователя и права на папку логов и кеша выдает то же на него. При запуске nginx можно получить неработающую связку. Поэтому необходимо права на папку кеша и логов поменять в моем случае на пользователя apache.
worker_processes auto; разрешаем серверу выбирать количество процессов!
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
# Журналирование будет индивидуальное для всех сайтов:
# access_log /var/log/nginx/access.log main;
sendfile on;
client_max_body_size 24M;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
# Минимальная длина ответа, при которой модуль будет жать, в байтах
gzip_min_length 1100;
# Разрешить сжатие для всех проксированных запросов
gzip_proxied any;
# Запрещает сжатие ответа методом gzip для IE6
gzip_disable “msie6”;
# Уровень gzip-компрессии
gzip_comp_level 8;
# 1) MIME-типы которые необходимо жать
#gzip_types text/plain text/html text/xml application/xml application/x-javascript text/javascript text/css text/json;
# 2) Если у вас появляются предупреждения, типа “duplicate MIME type text/html”, то стоит исключить text/html
gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
# Хватаемся за соломинку:
#gzip_types text/html text/xml text/css application/x-javascript text/javascript;
include /etc/nginx/conf.d/*.conf;
}
chmod 0777 -R /var/log/nginx
chown apache:apache -R /var/log/nginx
chmod 0777 -R /var/lib/nginx
chown apache:apache -R /var/lib/nginx
Далее переходим к настройке виртуальных хостов ngix.
Файлы конфигураций лежат по пути /etc/nginx/conf.d и имеют расширение .conf
Создаем файл конфигурации например командой vi /etc/nginx/conf.d/site1.conf и прописываем в нем следующее содержимое
# A virtual host site1.tst
server {
# listen site1.tst:80;
listen 80;
server_name site1.tst;
# Ведём журнал доступа:
access_log /var/log/nginx/site1_access.log;
# Разделяем статику и динамку, статику храним в кэше 7 дней:
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|doc|docx|pdf|xls|xlsx|rar|zip|tbz|7z|exe)$ {
root /var/www/html/site1/;
expires 7d;
}
# htaccess и htpasswd не отдаем:
location ~ /\.ht {
deny all;
}
# Мы хотим видеть статистику при обращении к папке /stat
location = /stat {
stub_status on;
access_log off;
# allow xx.xx.xx.xx;
# deny all;
}
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
log_not_found off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Если сайтов несколько создаем каждому свой файл конфигурации4.Прописываем nginx в автозапуск
chkconfig nginx on5. теперь необходимо немного изменить основной конфигурационный файл apache.
vi /etc/httpd/httpd.confМеняем следующие параметры
NameVirtualHost *:8080Теперь создаем конфигурационные файлы сайтов для apache и заполняем его например так:
UseCanonicalName On
<VirtualHost *:8080>Теперь осталось дать две команды.
ServerName site1.tst
ServerAlias site1.tst
DocumentRoot “/var/www/html/site1”
<Directory “/var/www/html/site1”>
Options Indexes +FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
service httpd restart
service nginx start
Вот пожалуй и все.
Про мой личный опыт оптимизации в следующей статье.
Комментариев нет:
Отправить комментарий