# 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 и ставим модуль
nginx
: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; } } } }
apache
: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 и так должен работать.