Повышение производительности веб-сервера: ставим nginx перед apache

В одной из заметок мы описали как настроить nginx + php-fpm. Но nginx можно использовать и немного по другому. Например, если нету желания полностью отказываться от apache, но ускорить работу веб сервера хочется. (Возможно, у вас реализована сложная система редиректов, которую не хотите портировать на nginx).

В таком случае возможное решение - использовать nginx только для отдачи статики (картинок, css, js и т.д. файлов). Остальные же запросы (к php движку, к примеру) перенаправим по прежнему к apache (подразумевается, что у вас уже настроен сайт для работы с последним). Для этого настроим nginx для отдачи статики, все остальные запросы по прежнему проксируем к apache. (В таком случае можно обойтись без php-fpm).Приблизительный конфиг nginx (только для http):

# /etc/nginx/sites-enabled/site.com.conf

server {
    listen   80;
    server_name www.site.com site.com;

    access_log /var/log/nginx/site_access.log;
    error_log /var/log/nginx/site_error.log;

    location / {
        proxy_pass  http://backend;
        proxy_set_header            Host $host;
        proxy_set_header            X-Real-IP $remote_addr;
        proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_busy_buffers_size     64k;
        proxy_temp_file_write_size  64k;
    }

    location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|woff)$ {
        root /var/www/site.com;
        # Время жизни кеша ассетов
        expires 30d;
    }
}

http://backend - конфигурация вынесена в отдельный файл:

# /etc/nginx/conf.d/backend.conf

upstream backend {
  server 127.0.0.1:8080;
}

Для apache никаких особенных настроек не требуется, кроме переведения хостов на порт, отличный от дефолтного: 

<VirtualHost 127.0.0.1:8080>

Вместо 8080 можно использовать любой свободный порт, главное заменить дефолтный 80, на котором будет слушать nginx.

После конфигурации не забудьте релоаднуть nginx и apache =)

Если у вас system.d:

systemctl reload apache2 nginx