Nginx для статики, Apache для динамики
12 декабря 2011 Nginx 12470 просмотров
Как известно, Nginx славится тем, что хорошо справляется с отдачей статических файлов (css, js, изображения). Делается это за счет какого-то хитрого кэширования. Но с обработкой динамического содержания лучше работает Apache. Имеем: сайт на PHP, Apache. Нужно настроить сервер так, чтобы Nginx отдавал статику, а остальным занимался Apache.

Предположим, что Nginx уже установлен. Делается это просто. Для Ubuntu или Debian.
aptitude install nginx
Так как Nginx и Apache установлены на одном сервере (одинаковый IP), то сделаем так, чтобы они "висели" на разных портах. Начнем с Apache. Установим для него порт 8080.
NameVirtualHost *:8080
Listen 8080
Nginx будет работать с портом 80 (порт по умолчанию). Кроме того, все запросы на статический контент Nginx будет обрабатывать сам, а остальное будет пересылать через proxy на Apache. Статические файлы в нашем проекте находятся в папках css, js, img (отночительно корня сайта).
user www-data;
worker_processes  4;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
	worker_connections  1024;
}

http {
	types              {}
	default_type       application/octet-stream;
	access_log         /var/log/nginx/access.log;
	sendfile           off;
	#tcp_nopush        on;
	#keepalive_timeout 0;
	keepalive_timeout  65;
	tcp_nodelay        on;
	gzip               on;

	server {
		listen 80;
		location ^~ /(css|js|img) {
			access_log off;
			expires 30d;
			root /var/www/public/;
		}
		location / {
			proxy_pass         http://127.0.0.1:8080/;
			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_temp_file_write_size 64k;
		}
	}
}