Table of Contents

, , , ,

Проксирование apache через nginx

# cd /opt/src/ && wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.5.tar.gz http://maloletka.ru/patches/rpaf-0.5.patch
# tar xvf mod_rpaf-0.5.tar.gz
# cd mod_rpaf-0.5 && cat ../rpaf-0.5.patch | patch -p0 mod_rpaf-2.0.c
# less README и ставим модуль
user nobody nogroup;
worker_processes 4;
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 off;
  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;
  server {
      listen      80;
      server_name domain.com www.domain;
      root /home/clients/vasiliy_pupkinson/domains/domain.com/html;
      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;
          proxy_max_temp_file_size  0;
          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_busy_buffers_size    64k;
          proxy_temp_file_write_size 64k;
      }
      location ~* ^.+.(jpg|gif|png|avi|mpg|zip|exe)$ {
        root /home/clients/vasiliy_pupkinson/domains/domain.com/html;
        valid_referers none blocked server_names;
        if ($invalid_referer) {
          return   403;
        }
      }
   }
}
LoadModule rpaf_module        libexec/mod_rpaf.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 APACHE_IPS
Listen 127.0.0.1:8080
ServerName localhost
NameVirtualHost 127.0.0.1:8080
<VirtualHost 127.0.0.1:8080>
      ServerName domain.com
      ServerAlias domain.com
      ServerAlias www.domain.com
      DocumentRoot /home/clients/vasiliy_pupkin/domains/domain.com/html
      CustomLog  /home/clients/vasiliy_pupkin/domains/domain.com/logs/access_log combined
      ErrorLog  /home/clients/vasiliy_pupkin/domains/domain.com/logs/error_log
      ScriptAlias /cgi-bin/ " /home/clients/vasiliy_pupkin/domains/domain.com/html/cgi-bin/ "
      <Directory "/cgi-bin/">
              Options None +FollowSymLinks
      </Directory>
      <Directory />
              Options All -Indexes
              AllowOverride All
      </Directory>
</VirtualHost>

В итоге имеем: nginx на 80 порту ловит все входящие соединения и отдает юзеру все файлы, что попадают под регексп. Я туда еще добавил хотлинк-протект для пущего гламуру.
В регексп успешно можно пихать html, css и т.п.
Все, что не попадает под паттерн, передается apache, который слушает на 127.0.0.1:8080.
Без модуля mod_rpaf апач в логи будет писать src ip 127.0.0.1, так что ставим его обязательно.
Основной недостаток - это необходимость переписывать правила из .htaccess под nginx, что, в принципе, не очень сложно.
А простой redirect и так должен работать.