nginx и Apache2
Решил немного разгрузить веб-сервер, для чего в виде 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 =========== <VirtualHost *:88> 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 </VirtualHost> ##==========================domain2.in.ua =========== <VirtualHost *:88> 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 </VirtualHost> ......... |
После чего можно проверить работу 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; } } |