Hello!
On Tue, Oct 30, 2012 at 03:17:24AM -0400, ak84 wrote:
Максим, добрый день.
Сторонние модули пробовал отключать в версии 0.8.54 , ситуация повторялась,
сейчас отключить header_more не могу.
Just a side note: судя по трейсу, который вы приводили - виноват в
падениях именно headers more модуль. Ибо протит список входящих
заголовков.
Его автору я неоднократно объяснял, что изменять список входящих
заголовков запроса - это идеологически неправильно, и вместо этого
надо пользоваться инструментами, которые позволяют с этим списком
при необходимости выборочно работать, e.g. proxy_set_header. Он,
однако, продолжает эту функциональность предлагать пользователям,
наступая то на одни, то на другие грабли.
Может быть как-то можно без header_more реализовать следующую схему ( для
ip, не из доверенного списка очищать определённые хедеры):
имеем в конфиге:
geo trustip {
default 0;
192.168.1.0/24 1;
192.168.2.0/24 1;
etc.
}
upstream backend {
server 192.168.0.10:80;
server 192.168.0.11:80;
}
server {
listen ip:80;
server_name hostname.ru;
if ( $trustip = "1" )
{
access_log /var/log/nginx/access_from_trust.log main;
}
if ( $trustip != "1")
{
access_log /var/log/nginx/access_from_not_trust.log main;
more_clear_input_headers 'x-nokia-test:';
}
Правильно делать так:
map $trustedip $nokia {
default "";
1 $http_x_nokia_test;
}
proxy_set_header X-Nokia-Test "$nokia";
При этом map{} нужно задать на уровне http{}, а proxy_set_header -
вместе с другими заголовками proxy_set_header.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_intercept_errors on;
include mpro_special.conf;
include short_urls.conf;
proxy_pass http://backend;
proxy_next_upstream error timeout invalid_header http_500
http_502;
}
}
На всякий случай, документацию берут тут:
http://nginx.org/r/map
http://nginx.org/r/proxy_set_header