nginx и Apache2

Автор | 27.06.2010

Решил немного разгрузить веб-сервер, для чего в виде Frontend’a прикрутил Nginx.
Субьективно: скорость отображения страниц выросла.
Итак, приступим…
Допустим у вас уже есть веб-сервер с Apache и виртуальными хостами
Начинаем ставить софт

emerge www-apache/mod_rpaf
USE="status realip addition" emerge -av nginx


Так как у нас появился Frontend сервер, то теперь в $remote_addr у нас не пользовательский IP, а IP-адрес Frontend-сервера (на котором расположен Nginx). Для изменения $remote_addr нужно использовать mod_rpaf, который формирует $remote_addr на основе X-Forwarded-For

Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP
Начинаем править Апач с добавления mod_rpaf:

#$cat /etc/apache2/httpd.conf
...........
LoadModule rpaf_module        modules/mod_rpaf.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 8.8.8.8 127.0.0.1
RPAFheader X-Forwarded-For
...........

Теперь заставляем Апач слушать не на 80-м порту, а допустим на 88-м:

#$cat /etc/apache2/vhosts.d/00_default_vhost.conf
..............
Listen 88
# Use name-based virtual hosting.
NameVirtualHost *:88
##==========================domain1.in.ua ===========

Include /etc/apache2/vhosts.d/default_vhost.include
DocumentRoot /var/www/domain1.in.ua/
ServerName domain1.in.ua
ServerAlias www.domain1.in.ua
ErrorLog /var/log/apache2/domain1.in.ua.error_log
CustomLog /var/log/apache2/domain1-access_log common

##==========================domain2.in.ua ===========

Include /etc/apache2/vhosts.d/default_vhost.include
DocumentRoot /var/www/domain2.in.ua
ServerName domain2.in.ua
ServerAlias www.domain2.in.ua
ErrorLog /var/log/apache2/domain2-error_log
CustomLog /var/log/apache2/domain2.access_log common

.........

После чего можно проверить работу Apache на 88-м порту набрав http://domain1.in.ua:88
Если все гуд, приступаем к настройке Nginx

#cat nginx.conf
user nginx nginx;
worker_processes 1;
error_log /var/log/nginx/error_log info;
events {
	worker_connections  8192;
	use epoll;
}

http {
	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	log_format main
		'$remote_addr - $remote_user [$time_local] '
		'"$request" $status $bytes_sent '
		'"$http_referer" "$http_user_agent" '
		'"$gzip_ratio"';

	client_header_timeout 10m;
	client_body_timeout 10m;
	send_timeout 10m;
	connection_pool_size 256;
	client_header_buffer_size 1k;
	large_client_header_buffers 4 2k;
	request_pool_size 4k;
	gzip on;
	gzip_min_length 1100;
	gzip_buffers 4 8k;
	gzip_types text/plain;

	output_buffers 1 32k;
	postpone_output 1460;

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;

	keepalive_timeout 75 20;
	ignore_invalid_headers on;
	index index.html;

	upstream backend {
		server 127.0.0.1:88;
	}
#======================domain1
	server {
                listen       80;
		server_name  domain1.in.ua www.domain1.in.ua;
		client_max_body_size 101M;
		            location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
		            root /var/www/domain1.in.ua;
		        }

		        location ~ /\.ht {
		            deny  all;
		        }

		        location / {
		            proxy_pass http://backend/;
		            proxy_set_header Host $host;
		            proxy_set_header X-Real-IP $remote_addr;
		            proxy_set_header X-Forwarded-For $remote_addr;
			 proxy_connect_timeout 120;
                         proxy_send_timeout    120;
                         proxy_read_timeout    180;
                        }
		access_log /var/log/nginx/domain1.in.ua.access_log main;
		error_log /var/log/nginx/domain1.in.ua.error info;
		root /var/www/domain1.in.ua;
	}

#======================domain2
	server {
                listen       80;
		server_name  domain2.in.ua www.domain2.in.ua;
		client_max_body_size 101M;
		            location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
		            root /var/www/domain2.in.ua;
		        }

		        location ~ /\.ht {
		            deny  all;
		        }

		        location / {
		            proxy_pass http://backend/;
		            proxy_set_header Host $host;
		            proxy_set_header X-Real-IP $remote_addr;
		            proxy_set_header X-Forwarded-For $remote_addr;
			 proxy_connect_timeout 120;
                         proxy_send_timeout    120;
                         proxy_read_timeout    180;
                        }
		access_log /var/log/nginx/domain2.in.ua.access_log main;
		error_log /var/log/nginx/domain2.in.ua.error_log info;
		root /var/www/domain2.in.ua;
	}
}

Залишити відповідь