Настройка Nginx в качестве front-end к Apache

Nginx - HTTP сервер, основным преимуществом которого является быстрое обслуживание статических запросов.
В связке с Apache, качестве front-end-а и обратного прокси-сервера, позволяет разделить обработку запросов на статические (Nginx) и динамические (Apache), что существенно снижает нагрузку на сервер.

Конфигурируем Apache:
/etc/apache2/ports.conf
Изменяем порт и IP адрес на локальный:

NameVirtualHost 127.0.0.1:8080
Listen 8080

В виртуальных хостах Apache /etc/apache2/sites-available/ меняем адрес и порт.
Теперь Apache будет слушать 8080 порт, Nginx - 80

<VirtualHost *:8080>
AssignUserID username username
DocumentRoot /var/www
ServerName mysite.com.com
<Directory "/var/www">
allow from all
Options +Indexes
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerAlias www.mysite.com
</VirtualHost>

Перезапускаем Apache:
/etc/init.d/apache2 restart

Установка Nginx:

apt-get install nginx

Если необходимо правим /etc/nginx/nginx.conf

user username username; # пользователь, от которого запускается процесс
worker_processes  1; # кол-во рабочих процессов. Обычно выставляется по количеству ядер системы
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
    # multi_accept on;
}
http {
    include       /etc/nginx/mime.types;
    access_log /var/log/nginx/access.log;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;
    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
# mail {
#     # See sample authentication script at:
#     # http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript
#
#     # auth_http localhost/auth.php;
#     # pop3_capabilities "TOP" "USER";
#     # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#     server {
#         listen     localhost:110;
#         protocol   pop3;
#         proxy      on;
#     }
#
#     server {
#         listen     localhost:143;
#         protocol   imap;
#         proxy      on;
#     }
# }

Создаем файл конфигурации proxy.conf:
/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;
# Защита от killapache.pl
proxy_set_header Range "";
proxy_set_header Request-Range "";
# Размер буферов
proxy_buffers 32 8k; # 256K * 4096 = ~1G
proxy_buffering on;
# Кеширование
#proxy_cache off;
#proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
#proxy_cache_key $scheme$proxy_host$uri$is_args$args;
#proxy_cache_lock off;
#proxy_cache_lock_timeout 5s;
#proxy_cache_min_uses 1;
#proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
# // error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off ...;
#proxy_cache_use_stale off;
proxy_ignore_client_abort off;
proxy_intercept_errors off;
proxy_read_timeout 320s;
client_max_body_size    10m;
#client_body_buffer_size 128k;
#proxy_connect_timeout   90;
#proxy_send_timeout      90;
#proxy_read_timeout      90;
#proxy_buffers           32 4k;

Создаем виртуальный хост в Nginx:
/etc/nginx/sites-available/mysite.com

server {
  listen   12.34.567.89:80;
  server_name   mysite.com
                www.mysite.com
  # настраиваем лог ошибок, не пишем туда про не найденные файлы
  log_not_found off;
  # Перенаправление всех не найденных файлов в апач
  error_page 404 403 = @apache;
  location ~ \.php$ {
    proxy_pass  http://127.0.0.1:8080;
    include     /etc/nginx/proxy.conf;
  }
  # Корень сайта
  root /var/www/;
  location @apache {
    proxy_pass  http://127.0.0.1:8080;
    include     /etc/nginx/proxy.conf;
  }
  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  location ~ /\.ht {
    deny  all;
  }
}

Активируем хост путем установки символьной ссылки:
ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com

Перезапускаем Nginx:

/etc/init.d/nginx restart

Так же при установке Nginx в качестве фронтэнда к Apache появляется небольшая проблема заключающаяся в том, что Nginx передает Apache не реальный IP клинта подключающегося к серверу, но внутренний IP самого сервера - 127.0.0.1

Для того чтоб Apache "видел" реальный IP необходимо установить модуль Apache - mod_rpaf

apt-get install libapache2-mod-rpaf

Открываем /etc/apache2/mods-enabled/rpaf.conf

Находим строку:

RPAFproxy_ips 127.0.0.1

И заменяем внутренний IP на IP адрес своего сервера.

Перезагружаем Apache:
/etc/init.d/apache2 restart

Комментарии

В конфиге так:

"NameVirtualHost *:8080
Listen 8080"

Путь к xcache.ini может быть таким:
/etc/php5/mods-available/xcache.ini