среда, 8 февраля 2017 г.

Nginx+Apache. Часть 1. Установка.

По мере роста любого сайта Администраторам приходится сталкиваться с проблемами производительности своих сервисов на достаточно слабых серверах. На сегодняшний день CentOS  как и остальные Linux подобные системы для меня являются достаточно черным ящиком, но упершись в пределы производительности сервера пришлось искать решение.


По сути оптимизация это очень тонкая вещь. При неправильной настройке на мощном сервере приложения будут работать медленно или же на малых ресурсах все будет работать достаточно хорошо.
Почитав в интернете соответствующие статьи я пришел к выводу, что оптимизация будет идти по двум направлениям:
  1. Оптимизация Web сервиса Apache путем замены на связку Nginx+Apache.
  2. Оптимизация Apache и MySQL.
Шаг первый. Nginx+Apache.
Для увеличения производительности необходимо построить двухуровневую систему. В качестве 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. Устанавливаем nginx
yum install nginx
3. Открываем конфигурационный файл nginx на редактирование
vi /etc/nginx/nginx.conf
И заменяем следующим содержимым
Примечание: для упрощения себе дальнейшей жизни nginx я сделал так, что nginx запускается из под той же учетной записи что и apache
user 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;
}
Вот тут хотелось бы обратить внимание вот на что. При установке nginx создает одноименного пользователя и права на папку логов и кеша выдает то же на него. При запуске nginx можно получить неработающую связку. Поэтому необходимо права на папку кеша и логов поменять в моем случае на пользователя apache.
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 on
5. теперь необходимо немного изменить основной конфигурационный файл apache.
vi /etc/httpd/httpd.conf
Меняем следующие параметры
NameVirtualHost *:8080
UseCanonicalName On
Теперь создаем конфигурационные файлы сайтов для apache и заполняем его например так:
<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

Вот пожалуй и все.
Про мой личный опыт оптимизации в следующей статье.

Комментариев нет:

Отправить комментарий

При обновлении VCenter 6.7 до VCenter 7.0 ошибка Host not found

 Всем доброго времени суток! При обновлении VCenter 6.7 до версии 7.0 пришлось столкнуться со следующей ошибкой при обновлении , точнее в пр...