Если имеется такая конструкция в конфиге
location / {
root
/web1/users/mds_rudn/www/download.mds.rudn.info/htdocs/;
proxy_pass http://127.0.0.1:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NGX-Request NGX;
proxy_set_header Host $http_host;
index index.html index.htm;
}
И бекенд выдает X-Accel-Redirect - редирект идет снова через proxy_pass
хост? Как этого избежать, т.е. что бы nginx выдавал файл сам по uri
взятому из X-Accel-Redirect с корнем сайта root.
Возможно ли настроить nginx так, чтобы в случае если нет заголовка
Last-Modified в ответе от бакенда, nginx сам подставлял текущее время в
этот заголовок.
--
Zherdev Anatoly.
Изменения в nginx 0.3.12 26.11.2005
*) Безопасность: если nginx был собран с модулем
ngx_http_realip_module, то при использовании директивы "satisfy_any
on" директивы доступа и аутентификации не работали. Модуль
ngx_http_realip_module не собирался и не собирается по умолчанию.
*) Изменение: имя переменной "$time_gmt" изменено на "$time_local".
*) Изменение: директивы proxy_header_buffer_size и
fastcgi_header_buffer_size переименованы соответственно в
proxy_buffer_size и fastcgi_buffer_size.
*) Добавление: модуль ngx_http_memcached_module.
*) Добавление: директива proxy_buffering.
*) Исправление: изменение в работе с accept mutex при использовании
метода rtsig; ошибка появилась в 0.3.0.
*) Исправление: если клиент передал строку "Transfer-Encoding: chunked"
в заголоовке запроса, то nginx теперь выдаёт ошибку 411.
*) Исправление: при наследовании директивы auth_basic с уровня http в
строке "WWW-Authenticate" заголовка ответа выводился realm без
текста "Basic realm".
*) Исправление: если в директиве access_log был явно указан формат
combined, то в лог записывались пустые строки; ошибка появилась в
0.3.8.
*) Исправление: nginx не работал на платформе sparc под любыми OS,
кроме Solaris.
*) Исправление: в директиве if теперь не нужно разделять пробелом
строку в кавычках и закрывающую скобку.
Игорь Сысоев
http://sysoev.ru
Изменения в nginx 0.1.38 08.07.2005
*) Добавление: директива limit_rate поддерживается в режиме прокси и
FastCGI.
*) Добавление: в режиме прокси и FastCGI поддерживается строка
заголовка "X-Accel-Limit-Rate" в ответе бэкенда.
*) Добавление: директива break.
*) Добавление: директива log_not_found.
*) Исправление: при перенаправлении запроса с помощью строки заголовка
"X-Accel-Redirect" не изменялся код ответа.
*) Исправление: переменные, установленные директивой set не могли
использоваться в SSI.
*) Исправление: при включении в SSI более одного удалённого подзапроса
мог произойти segmentation fault.
*) Исправление: если статусная строка в ответе бэкенда передавалась в
двух пакетах, то nginx считал ответ неверным; ошибка появилась в
0.1.29.
*) Добавление: директива ssi_types.
*) Добавление: директива autoindex_exact_size.
*) Исправление: модуль ngx_http_autoindex_module не поддерживал длинные
имена файлов в UTF-8.
*) Добавление: IMAP/POP3 прокси.
Игорь Сысоев
http://sysoev.ru
Добрый день!
Игорь, мне кажется что при использовании X-Accel-Redirect имеет смысл
использовать Content-Type, полученный от бэкенда (если он был получен),
а не определять заново силами nginx'а.
По крайней мере для виртуального хостинга это намного удобнее.
Для себя я проблему решил, в аттаче патч.
Возможно это не только мне пригодится.
С уважением,
--
Ivan Albetkov
AGAVA Software (http://www.agava.com)
--- src/http/ngx_http_core_module.c Thu Sep 8 11:41:55 2005
+++ src/http/ngx_http_core_module.c Tue Jan 24 14:42:44 2006
@@ -810,6 +810,11 @@
ngx_http_type_t *type;
ngx_http_core_loc_conf_t *clcf;
+ if(r->upstream->headers_in.x_accel_redirect && r->upstream->headers_in.content_type) {
+ r->headers_out.content_type = r->upstream->headers_in.content_type->value;
+ return NGX_OK;
+ }
+
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
if (r->exten.len) {
Здравствуйте nginx-ru,
Раньше работала конструкция типа:
server {
listen 10.2.19.254:80;
server_name site.ru www.site.ru;
location / {
proxy_pass http://xxx.xxx.xxx.xxx:80/;
}
}
server {
listen 10.2.19.254:80;
server_name *.site.ru;
location / {
proxy_pass http://xxx.xxx.xxx.xxx:80/;
}
}
а сейчас ругается:
first server name "*.site.ru" must not be wildcard in ...
Как тогда переписать конфиг?
С уважением,
Михаил Монашёв, SoftSearch.ru
Member of Independent Software Developers Forum (ISDEF)
mailto:postmaster@softsearch.ru
ICQ# 166233339
http://softsearch.ru/
Без бэкапа по жизни.
Добрый день!
Заметил следующую особенность.
Так случилось, что мне нужно писать довольно в большое число
лог-файлов с буферизацией.
Сразу после запуска nginx выделяет себе порядка 45 мегабайт памяти под
буферы (т. е. с выключенной буферизацией размер каждого воркера
показывается на 45 меньше). После того как я первый раз делаю HUP -
размер памяти скачкообразно вырастает примерно в два раза, и далее
плавно растет (по 100-150 килобайт) после каждого HUP.
Если для всех этих логов выключить буферы - то столько памяти сразу не
расходуется, однако прирост по 100-150 кб после HUP все равно
присутствует.
Случилось это у меня на Linux с ядром 2.6, однако проверил - на
FreeBSD 6 - примерно так же утекает память.
--
Alexey Polyakov
Добрый день,
Опять пишу к Игорю, но, для потомков, через лист :-)
Итак, всплыли такие проблемы:
1) В одном из самописных модулей используется некое подобие "базы
данных" - бинарный файл, загружаемый в момент инициализации в память...
Делается это так:
ngx_http_banner_conf_t *bcf;
...
bcf = ngx_palloc(cf->pool, sizeof(ngx_http_banner_conf_t));
bcf->girls = ngx_palloc(cf->pool, file_info.st_size);
...
... read(db_handle, bcf->girls, file_info.st_size) ...
И, в том же модуле, используется MindMax GeoIP (City)... он тоже
инициализируется при инициализации модуля:
bcf->gi = GeoIP_open_type(GEOIP_CITY_EDITION_REV1, GEOIP_STANDARD);
Проблема: сервер очень часто дергается через HUP для обновления конфига
с виртхостами (которых сейчас около 10000)... после каждого обновления
конфигов всех процессы nginxа вырастают в памяти на 1-2 мб....
2) Возможно, в связи с проблемой номер 1, через некоторое время рабочие
процессы начинают умирать...
Анализ core показывает:
Core was generated by `nginx: worker process'.
Program terminated with signal 11, Segmentation fault.
#0 0x0804d087 in ngx_chain_update_chains (free=0xe83c2d8, busy=0xe83c2dc,
out=0xbffff9c8, tag=0x8080940) at src/core/ngx_buf.c:200
200 if (ngx_buf_size((*busy)->buf) != 0) {
(gdb) bt
#0 0x0804d087 in ngx_chain_update_chains (free=0xe83c2d8, busy=0xe83c2dc,
out=0xbffff9c8, tag=0x8080940) at src/core/ngx_buf.c:200
#1 0x0804d220 in ngx_output_chain (ctx=0xe83c2d0, in=0x35)
at src/core/ngx_output_chain.c:223
#2 0x0806ee83 in ngx_http_range_body_filter (r=0xb579408, in=0xe83c390)
at src/http/modules/ngx_http_range_filter_module.c:587
#3 0x0805eb81 in ngx_http_output_filter (r=0xb579408, in=0xbffff838)
at src/http/ngx_http_core_module.c:979
#4 0x08062f96 in ngx_http_finalize_request (r=0xb579408, rc=400)
at src/http/ngx_http_request.c:1436
#5 0x08061ea5 in ngx_http_process_request_line (rev=0x405c4c5c)
at src/http/ngx_http_request.c:721
#6 0x08055989 in ngx_event_process_posted (cycle=0x11e8b028,
posted=0x8085718)
at src/event/ngx_event_posted.c:39
#7 0x0805490e in ngx_process_events_and_timers (cycle=0x11e8b028)
at src/event/ngx_event.c:272
#8 0x0805a7df in ngx_worker_process_cycle (cycle=0x11e8b028, data=0x0)
at src/os/unix/ngx_process_cycle.c:728
#9 0x08058cec in ngx_spawn_process (cycle=0x11e8b028,
proc=0x805a799 <ngx_worker_process_cycle>, data=0x0,
name=0x8078b57 "worker process", respawn=-3)
at src/os/unix/ngx_process.c:187
#10 0x0805a1c6 in ngx_start_worker_processes (cycle=0x11e8b028, n=4,
type=-3)
---Type <return> to continue, or q <return> to quit---
at src/os/unix/ngx_process_cycle.c:327
#11 0x08059c8f in ngx_master_process_cycle (cycle=0x11e8b028)
at src/os/unix/ngx_process_cycle.c:219
#12 0x0804a526 in main (argc=29, argv=0xbffff838) at src/core/nginx.c:306
После смерти всех процессов nginx продолжает принимать соединения
(насколько я понял), но все они уже ничего отдать не могут....
P.S. Насчет geoip... а как мне можно освобождать память, которую он
выделяет (только сейчас в голову пришло, что он тоже вполне имеет право
на это)?
--
/Scoundrel [http://kovyrin.info]
Ситуация следующая.
Я сейчас исследую возможность для того что-бы заменить процедуру
скачивания файлов с апача через скрипт на внутренний редирект с этого-же
скрипта на nginx.
Т.к. у меня обрабатываются логи апача для сбора статистики по
залогиненным юзерам, теперь мне ее надо будет собирать по логам nginx.
Но я обнаружил что при Accel-Redirect в nginx не передается информация
об авторизации (т.е. в логе нет имени юзера).
Подскажите, плиз, что можно сделать что-бы юзер и в логе nginx
присуствовал? Я так думаю, что какие-то хидеры вместе с
X-Accell-Redirect нужно передавать?