23 окт 2010
Установка nginx как front-end к apache в Debian / Ubuntu
Dmitrius Категория: Web-Мастеру » Уроки
У нас вы можете скачать бесплатно Установка nginx как front-end к apache в Debian / Ubuntu

Данный материал предоставлен сайтом Skripter.info исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Установка nginx как front-end к apache в Debian / Ubuntu


Рано или поздно перед администратором встает задача разгрузить back-end, которым как правило, является apache. Одной из альтернатив для front-end является легкий web сервер Nginx. Данная конфигурация дает особенно большой выигрыш при наличии подключений по медленным каналам связи (модем), так как ресурсы системы начинают использоваться для дела, а не ждать, пока будет получен запрос или отдан ответ клиенту.

Преимущества архитектуры front-end/back-end


В случае использования только apache, при наличии медленных подключений, последний бОльшую часть времени просто ждет, либо пока будет полностью получен запрос, либо пока будет полностью передан ответ клиенту. При этом под каждое соединение будет выделено определенное количество памяти, и, как не трудно догадаться, общее количество одновременных подключений будет прямо пропорционально доступному объему памяти.

В случае же front-end/back-end конфигурации ситуация немного иная: front-end ( в нашем случае, nginx) полностью обрабатывает входящий запрос, используя при этом минимум системных ресурсов. Передает запрос back-end'у (apache), быстро получает ответ и начинает передачу ответа клиенту. Таким образом, ресурсы, занятые под apache, были использованы только для того, чтобы сгенерировать запрошенный контент, и были сразу возвращены системе после завершения работы. А с клиентом общается лишь легкий и не требовательный к ресурсам front-end nginx.


Общий вид схемы front-end/back-end

В общем виде, https-соединение будет проделывать следующий путь:

https Client  ---->  Front-End (nginx)  ---->  Back-End (apache)
-----------  <----  -----------------  <----  -----------------
1.2.3.4:80          192.168.0.1:80            192.168.0.1:8080


В данном случае, fron-end и back-end располагаются на одной машине. В общем же случае, при необходимости они могут работать на разных машинах.

Установка и настройка Nginx


Установка Nginx


Установка Nginx тривиальна, начиная с Lenny (5.0). До этого, чтобы поставить nginx версии 0.6 и выше, необходимо было собирать пакет вручную.

apt-get install nginx


Запускаем nginx:

sudo /etc/init.d/nginx start


Набираем в браузере: "https://ip_servera" (IP той машины, где был установлен nginx). Должно появиться приглашение nginx: "Welcome to nginx!".

Настройка проксирования в Nginx


Отключаем сайт по умолчанию:
sudo rm /etc/nginx/sites-enabled/default


Корректируем конфигурационный файл:

sudo nano /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;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  2;
    tcp_nodelay        on;

    gzip  on;
    gzip_comp_level 3;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


Останавливаем nginx:

sudo /etc/init.d/nginx stop


Создаем файл конфигурации proxy.conf:

sudo nano /etc/nginx/proxy.conf


Должен иметь следующий вид:

proxy_redirect              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       90;
proxy_send_timeout          90;
proxy_read_timeout          90;
proxy_buffer_size           4k;
proxy_buffers               4 32k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;


Настройка виртуального хоста в Nginx


Создаем файл виртуального хоста:

sudo nano /etc/nginx/sites-available/skripter.info


Файл следующего вида:

upstream backend {
  # Адрес back-end'a здесь укажите ваш ip сервера
  server ip_servera:8080;  
}

server {
    listen   80;
    server_name www.skripter.info skripter.info;

    access_log /var/www/nginx_access.log;
    error_log /var/www/logs/nginx_error.log;

    # Перенаправление на back-end
    location / {
        proxy_pass  https://backend;
        include     /etc/nginx/proxy.conf;
    }

    # Статическиое наполнение отдает сам nginx
    # back-end этим заниматься не должен
    location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
        root /var/www/;
    }
}


Включаем новый хост:

sudo ln -s /etc/nginx/sites-available/skripter.info /etc/nginx/sites-enabled/skripter.info


Установка и настройка Apache


Установка Apache


Установка проста:

apt-get install apache2 libapache2-mod-auth-mysql


Настройка Apache


Корректируем конфигурационный файл:

sudo nano /etc/apache2/apache2.conf


Необходимо найти и скорректировать следующие строки (при отсутствии добавить):

# Таймаут 90 секунд
Timeout 90

# Выключаем KeepAlive
KeepAlive Off

# Имя сервера
ServerName skripter.info


Перезагружаем apache:

sudo apache2ctl graceful


Проверяем корректную настройку apache, открываю в браузере: "https://IP_SERVERA" (IP той машины, где был установлен apache). Должно появиться "It works!".


Настраиваем apache на работу с портом 8080, а не 80:

sudo nano /etc/apache2/ports.conf


Должен иметь вид:

NameVirtualHost *:8080
Listen 8080


Перезагружаем apache, nginx:

sudo apache2ctl graceful
sudo /etc/init.d/nginx start


Настройка mod_rpaf


Теперь, если посмотреть в логи apache, то там все запросы будут идти с адреса front-end'a. Чтобы это исправить, необходимо установить модуль mod_rpaf:

apt-get install libapache2-mod-rpaf


И настроить его:

sudo nano /etc/apache2/mods-enabled/rpaf.conf


Должен выглядеть примерно так:

<IfModule mod_rpaf.c>
    # Включаем модуль
    RPAFenable On

    # Приводит в порядок X-Host
    RPAFsethostname On

    # Адрес фронтенда (nginx)      
    RPAFproxy_ips 127.0.0.1 IP_SERVERA # здесь ваш  ip
</IfModule>


Перезагружаем apache:

sudo /etc/init.d/apache2 force-reload


Настройка виртуального хоста в Apache


Редактируем файл виртуального хоста:

sudo nano /etc/apache2/sites-available/default


Приблизительно следующего содержания:

<VirtualHost *:8080>
   ServerAdmin webmaster@localhost
    
   DocumentRoot /var/www/
   <Directory />
      Options FollowSymLinks
      AllowOverride all
   </Directory>
   <Directory /var/www/>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride all
      Order allow,deny
      allow from all
   </Directory>

   ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
   <Directory "/usr/lib/cgi-bin">
      AllowOverride All
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Order allow,deny
      Allow from all
   </Directory>

   ErrorLog /var/log/apache2/error.log

   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride all
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>


Перезапускаем apache2

sudo /etc/init.d/apache2 reload


На этом все всем удачи!!!!!!!!!









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