On 1/24/07, Alexey Polyakov <alexey.polyakov@xxxxxxxxx> wrote:
Вроде нельзя так. if ($http_x_accel_redirect) это по смыслу означает
проверку заголовка X-Accel-Redirect в запросе клиента. Ему там
неоткуда взяться.
А зачем вообще так извращаться? Есть же стандартный способ с internal.
Да вроде его я и описывал... откуда у человека выстроилась такая
жуткая схема - не представляю. :-(
Я nginx настраиваю второй раз, в общей сложности четвертый день.
Первый раз коробочного конфига хватило для одного сайта. Сейчас сложнее.
Может потому родился этот шедевр. :)
ТЗ сейчас в общем такое.
Построить бесплатный хостинг.
Спереди нгинкс отдает всю статику.
Пхп кидает на апач.
Хтмл отдается с прилепкой банера через add_after_body
Мп3-шки и прочая статическая лабуда должна пройти как на народе раньше:
Сначала страничка с банером и надписью "Вы хотите скачать файл...."
Потом переброс на файл и позволить его скачать.
Схему с интерналами я смотрел, но так понял что там ей нормально можно
воспользоваться если точно в какой папке файл и описать под него локейшн
с интерналом.
А тут задание 1000вирт. хостов и файл может быть где угодно.
Поэтому кроме как по расширению не придумал.
Сейчас весь конфиг выглядит так:
worker_processes 2;
events {
worker_connections 1024;
debug_connection ххх.ххх.ххх.ххх ;
}
http {
include conf/mime.types;
default_type application/octet-stream;
#spisok domenov
map $http_host $domen {
hostnames ;
include conf/conf_domen/spisok.conf;
}
# spisok klientov
map $http_host $root {
hostnames ;
include conf/conf_domen/test.com.conf;
}
#spisok subdomenov
map $http_host $sub {
hostnames ;
include conf/conf_subdomen/test.com.conf;
}
server {
listen 80;
server_name _ *;
#igratsa s tonkoy nastroykoy posle zapuska. Ne zabit
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
client_header_buffer_size 1k;
large_client_header_buffers 4 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;
# send_lowat 12000;
keepalive_timeout 75 20;
# probros na apache
location ~ \.php$ {
proxy_pass http://127.0.0.1:81;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#dla podstanovki bannera dla htmlek
location /footer.html{
root /usr/local/nginx/html/banner;
}
#perehvat i zavorot failov s raswireniem htm na podstanovku banera
location ~* ^.+\.(html|htm)$ {
root /home/$domen/$root/www/$sub;
add_after_body /footer.html;
}
#vse ostalnie faili lovim kotorie v prediduwih ne slovilis
location ~* ^.+\.(.*)$ {
##############################################
#obrabativaem vsyu stati4nuyu labudu
#stavim peremennuyu chtob otpravit na baner
set $t 0;
#esli eto uje ottuda vernulsa s hederom, to otme4aem eto
if ($http_x_accel_redirect){
set $t 1;
}
#esli net otmetki, to eto noviy i rewraitim ego na script
if ($t != 1){
#poka dlya testov tolko pod odno raswirenie. Ne zabit popravit
rewrite ^(.*)\.(gz)$ /down.php?path=$1.$2 last;
}
##############################################
root /home/$domen/$root/www/$sub;
index index.html index.htm;
autoindex on;
}
#Ne zabit pomenyat format loga. Etot dlya debuga
Пока вот такой имею. Реализация mod_vhost конечно кривоватая, можно было
просто $http_host реврайтом разбирать, но мне нужна возможность
выборочно блокировать определенные поддомены чтобы они шли на дефаулт
плюс парковка.
Потому так.
Если кто скажет что и как поправит и оптимизировать, тому большое
спасибо, но ногами то не пинайте. Недавно я этим занялся, потому детских
ляпов может быть много
./nginx -V
nginx version: nginx/0.5.7
built by gcc 4.1.1 20061011 (Red Hat 4.1.1-30)