Сен 012012
 


У nginx основная задача отдачи статики, для разгрузки бекенда ( apache ) использовануя в качестве фронтендов.
Apache используем в качестве бэкенда для генерации динамического контента.
В итоге мы уменьшим время отклика и нагрузку на сервер, поставим между клиентами и Apache Nginx.
Он будет часть запросов перенаправлять к Apache, а часть — обслуживать сам.
Все проделанное делаем на freebsd
Приступим.
Устанавливаем apache.

# cd /usr/ports/www/apache2 && make install clean

Редактируем конфигурационный файл. В нем практически все по стандарту оставляем, кроме Listen 80 меняем его на Listen 88

# nano /usr/local/etc/apache2/httpd.conf

Установим Nginx.

# cd /usr/ports/www/nginx && make install clean

настроим nginx.

# nano /usr/local/etc/nginx/nginx.conf
# пользак и группа от которого запускаются процессы.
user  www www;

# Уменя 4-х ядреный сервер, так что ставим 4 рабочих процесса.
worker_processes  4;

# Логирование ошибок.
error_log  /var/log/nginx/error.log;
# пид файл.
pid /var/run/nginx.pid;

events {

    # максимум соединений
    worker_connections  1024;

    # Метод обработки соединений
    # У Linux использовать лучше use epoll;
    # kqueue — эффективный метод, используемый во FreeBSD.
    use kqueue;
}

http {
    # Ограничиваем число запросов для заданной сессии или для одного ip адреса.
    # Принцип прост, замедление слишком частых запросов или в полном отказе обслуживании этих запросов.
    # $binary_remote_addr - Наш ip который делает запросы.
    # zone=one:10m - Создаем зону в которой хранятся сессии и размер зоны.
    # rate=1r/s - Зададим частоту запросов, в данном случае 1 запрос в секунду. 
    # Есть возможность использовать значения в минутах.
    # rate=20r/m - Разрешаем 20 запросов в минуту.
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    # Таблицу mime.
    include /usr/local/etc/nginx/mime.types;

    # Лог действий.
    access_log  /var/log/nginx/access.log;

    # Mime-тип по умолчанию.
    default_type  application/octet-stream;

    # Timeout чтении заголовка запроса клиента.
    client_header_timeout  20;

    # Timeout при чтении тела запроса клиента.
    client_body_timeout    20;

    # Timeout при передаче ответа клиенту.
    send_timeout           10;

    # Timeout в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера.
    keepalive_timeout      30 15;

    # Разрешаем использовать sendfile()
    sendfile        on;

    # Разрешаем использовать опции tcp_nopush.
    tcp_nopush     on;

    # Разрешает или запрещает сжатие ответа методом gzip.
    gzip  on;

    # Конфигурации сервера, опции.
    include /usr/local/etc/nginx/conf.d/*.conf;
    include /usr/local/etc/nginx/sites-enabled/*;
}

Теперь настроим виртуал хост.

# nano /usr/local/etc/nginx/sites-available/default
    server {

        # Укажим какой порт слушать.
        listen       80;

        # Доменные имена.
        server_name  likeunix.ru www.likeunix.ru;

        # Лог доступа виртуального хоста.
        access_log  logs/liekunix.access.log  main;

        # Максимальный размер тела запроса клиента.
        client_max_body_size 10M;

                # Разруливаем статику и динамку, смотрите описание ниже в этой статье!
                # Расширения файлов которые отдаются напрямую. 
                location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|swf)$ {
                        root /var/www/likeunix.ru;
                # access_log задаёт путь, формат и размер буфера для буферизации записи в лог.
                        access_log off;
                }
                # htaccess и htpasswd не отдаем.
                location ~ /\.ht {
                        deny  all;
                }
               
                location / {
                        # Задаёт параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа.
                        # Она задаёт зону и максимально возможные всплески запросов. Если скорость запросов превышает заданную в предыдущей директиве, 
                        # то клиент замедляется так, чтобы обеспечить число запросов которое задано. Иными словами не даём превысить установленный лимит.
                        # Вообщем при превышени будет выходить ошибка 503. 
                        limit_req zone=one burst=5;
                        # Адрес бекенда.
                        proxy_pass http://127.0.0.1:81/;
                        # Дает возможность изменить в полях заголовка “Location” и “Refresh” в ответе проксируемого сервера.                        
                        # Запретим все proxy_redirect на данном уровне.
                        proxy_redirect off
                        # Строки заголовка запроса X-Real-IP и X-Forwarded-For понадобятся, если вы в своих скриптах используете информацию об IP-адресе посетителя  
                        # Заголовок Host.
                        proxy_set_header Host $host;
                        # Заголовок X-Real.
                        proxy_set_header X-Real-IP $remote_addr;
                        # Заголовок X-Forwarded-For.
                        proxy_set_header X-Forwarded-For $remote_addr;
                        # Устанавливаем timeout для соединения с проксированным сервером.
                        proxy_connect_timeout 75;
                        # Устанавливаем timeout при передаче запроса проксированному серверу, он устанавливается не на всю передачу ответа, только между двумя операциями чтения.
                        proxy_send_timeout    75;
                        # Устанавливаем timeout при чтении ответа проксированного сервера, он устанавливается не на всю передачу ответа, только между двумя операциями чтения.
                        proxy_read_timeout    85;
                }
}

  One Response to “Nginx frontend разгрузка Apache”

  1. Огромное спасибо вам за пояснение в статье, в интернете полно инструкции но нету пояснений к конфигурационным файлам,
    Спасибо.

 Leave a Reply

(required)

(required)

39 Запросов к базе. 0,405 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.198.108.19