Решил немного разгрузить веб-сервер, для чего в виде 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;
}
}