Quantcast
Channel: Nginx Forum - Nginx Mailing List - Russian
Viewing all 3102 articles
Browse latest View live

Re: nginx-1.5.7 (no replies)

$
0
0
>часть данных, полученных от бэкенда при
>небуферизированном проксировании, могла не отправляться клиенту
>сразу, если использовались директивы gzip или gunzip.

А это означает, что gzip или gunzip для клиента отключаются или же на
бэкэнд ложиться задача сжатия ответа, а nginx просто сразу отправляет
клиенту полученные с бэкэнда данные?
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

nginx-1.4.4 (no replies)

$
0
0
Изменения в nginx 1.4.4 19.11.2013

*) Безопасность: символ, следующий за незакодированным пробелом в строке
запроса, обрабатывался неправильно (CVE-2013-4547); ошибка появилась
в 0.8.41.
Спасибо Ivan Fratric из Google Security Team.


--
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

nginx-1.5.7 (no replies)

$
0
0
Изменения в nginx 1.5.7 19.11.2013

*) Безопасность: символ, следующий за незакодированным пробелом в строке
запроса, обрабатывался неправильно (CVE-2013-4547); ошибка появилась
в 0.8.41.
Спасибо Ivan Fratric из Google Security Team.

*) Изменение: уровень логгирования ошибок auth_basic об отсутствии
пароля понижен с уровня error до info.

*) Добавление: директивы proxy_cache_revalidate,
fastcgi_cache_revalidate, scgi_cache_revalidate и
uwsgi_cache_revalidate.

*) Добавление: директива ssl_session_ticket_key.
Спасибо Piotr Sikora.

*) Исправление: директива "add_header Cache-Control ''" добавляла строку
заголовка ответа "Cache-Control" с пустым значением.

*) Исправление: директива "satisfy any" могла вернуть ошибку 403 вместо
401 при использовании директив auth_request и auth_basic.
Спасибо Jan Marc Hoffmann.

*) Исправление: параметры accept_filter и deferred директивы listen
игнорировались для listen-сокетов, создаваемых в процессе обновления
исполняемого файла.
Спасибо Piotr Sikora.

*) Исправление: часть данных, полученных от бэкенда при
небуферизированном проксировании, могла не отправляться клиенту
сразу, если использовались директивы gzip или gunzip.
Спасибо Yichun Zhang.

*) Исправление: в обработке ошибок в модуле
ngx_http_gunzip_filter_module.

*) Исправление: ответы могли зависать если использовался модуль
ngx_http_spdy_module и директива auth_request.

*) Исправление: утечки памяти в nginx/Windows.


--
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Cache Revalidate (10 replies)

$
0
0
Есть досадные мелочи, которые хотелось бы исправить, при включении fastcgi_cache_revalidate on, параметр HTTP_IF_MODIFIED_SINCE, всегда отправляется на сервер, даже если кеша нет, бекенду будет отправлен параметр с пустым значением.

По стандартам HTTP при отсутствии кеша, клиент не должен отправлять заголовок If-Modified-Since.
Более правильно если Nginx так же как и браузеры, при отсутствии кеша не будет передавать в бекенд пустой хедер If-Modified-Since, т.е нет кеша нет хедера, сейчас приходится в конфиге писать
fastcgi_param HTTP_IF_MODIFIED_SINCE $upstream_cache_last_modified if_not_empty;
чтобы пустой хедер не приходил, как этого требует стандарт.

Настроить subsecond ревалидацию в Nginx по стандартам HTTP тоже невозможно.
Если бекенд отдает заголовок
Cache-Control: max-age=0 и/или Expires: -1
Nginx воспринимает их как указания не кешировать ответ, но по стандартам эти заголовки не запрещают кешировать они указывают клиенту что ответ сервера можно кешировать, но он сразу же устаревает и следущий запрос должен пройти ревалидацию, т.е клиент должен каждый запрос отправлять с хедерем If-Modified-Since.
Мы нашли способ, как заставить Nginx кешировать такие ответы, отправить ему хедер
X-Accel-Expires: @$time-1
Тогда Nginx ведет себя правильно, т.е. так же как браузеры, которым достаточно отправить Cache-Control: max-age=0
Если, есть более красивое решения вместо X-Accel-Expires: @$time-1, хотелось бы его узнать.

Во всем остальном ревалидация работает отлично, ждем с нетерпением реализацию If-None-Match :)
С наличием ETag, будет все очень классно и правильно!

output_buffers по дефолту (3 replies)

$
0
0
Здравствуйте!
Ни в документации
нив вики не нашел, по дефолту чему равно output_buffers, работает ли
директива без aio и directio для линукс?

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Модификация кэшированной страницы (no replies)

$
0
0
Здравствуйте! Возможно ли добавить в кэшируемую страницу (в контент) произвольный текст, например, ссылку на дополнительный файл стилей CSS в секции <header>?

Сайтов много, а один элементов дизайна общий для всех, но разный для каждого браузера. Хотелось бы переложить задачу на Nginx, который бы определял тип браузера и подключал тот или иной файл стилей.

Проблема с загрузкой изображений при использовании limit_req. Как побороть? (no replies)

$
0
0
Здравствуйте, господа. Установлена связка nginx + php-fpm. Возникла проблема с загрузкой изображений при использовании limit_req.

В секции http прописал:
limit_req_zone $binary_remote_addr zone=reqPerSec1:1m rate=1r/s;

Далее, определены следующие локэйшены:

location / {
#try_files $uri $uri/ /index.php$uri$is_args$args;
limit_req zone=reqPerSec1 burst=5 nodelay;
}

location ~ [4-5][0-9][0-9].html {
internal;
}

location /favicon.ico {
access_log off;
log_not_found off;
expires 1y;

#empty_gif;
return 204;
}

location ~ ^.+\.php(?:/.*)?$ {
limit_req zone=reqPerSec1 burst=5 nodelay;
include conf.d/php.conf;
}

location ~* ^.+\.(jpg|jpeg|gif|png|css|js|swf)$ {
access_log off;
log_not_found off;
expires 1y;
}

location ~ (?:/\..*|~)$ {
access_log off;
log_not_found off;
deny all;
}

В результате получается, что при загрузке html-странички, css и картинки грузятся исправно, даже если часто понажимать F5, а вот при вызове phpinfo, логотипы пропадают после первого же обновления странички. В чём может быть проблема и каким образом её можно побороть? К обработке html-страничек вопросов никаких, но хотелось бы, чтоб и с php limit_req функционировал исправно.

С уважением, Геннадий.

Re: Проблема с загрузкой изображений при использовании limit req. Как побороть? (no replies)

$
0
0
On 11/28/13 23:47, Sferg wrote:
>
> location ~ ^.+\.php(?:/.*)?$ {
> limit_req zone=reqPerSec1 burst=5 nodelay;
> include conf.d/php.conf;
> }

> В результате получается, что при загрузке html-странички, css и картинки
> грузятся исправно, даже если часто понажимать F5, а вот при вызове phpinfo,
> логотипы пропадают после первого же обновления странички.

Потому что логотипы для phpinfo генерятся тем же самым php.

Не поленитесь посмотреть через Firebug или аналогичные инструменты других бразуеров.
Ну и логи nginx смотреть то же бывает полезно.

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Странное кешрование в nginx (3 replies)

$
0
0
Добрый день
подскажите плз, что это может быть за кеширование и кто за него отвечает
создаю файл
1.php
кладу в него ЛЮБОЙ контент, допустим "12345"
открываю в браузере, и вижу 12345
попытка изменить файл не приводит к измеению отдачи
в логах так же не меняется размер
перезагрузка nginx так же ничего не дает

/usr/local/etc/nginx # nginx -v
nginx version: nginx/1.4.3

вот конфиг

user www www;
worker_processes 2;
worker_rlimit_nofile 32768;
pid /var/run/nginx.pid;
error_log /dev/null;

events {
worker_connections 32768;
use kqueue;
}

http {

fastcgi_cache off;
fastcgi_store off;

default_type application/octet-stream;
client_header_timeout 600;
client_body_timeout 600;
send_timeout 1200;
proxy_read_timeout 180;
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_buffer_size 8k;
proxy_buffers 4 32k;
proxy_buffering off;
proxy_cache off;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 256k;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/css text/php text/x-php
application/php application/x-php application/x-httpd-php
application/x-httpd-php-source;
client_max_body_size 50m;
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
output_buffers 1 32k;
postpone_output 1460;
lingering_time 30;
lingering_timeout 6;
reset_timedout_connection on;
keepalive_timeout 5;
optimize_server_names on;
server_names_hash_bucket_size 64;
include mime.types;
server {
listen *:80;
server_name stat;
root /home/client/staе;
auth_basic "Restricted";
auth_basic_user_file /home/client/stat/.htpasswd;

location / {

fastcgi_pass unix:/home/client/run/socket;
fastcgi_index index.php;
fastcgi_param PHPRC "/home/client/php";
fastcgi_param SCRIPT_FILENAME /home/client/stat$fastcgi_script_name;
include fastcgi_params;

}
error_log /home/client/logs/stat-error.log;
access_log /home/client/logs/stat-access.log;

}


}
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Балансировка обращений к сервисам (no replies)

$
0
0
Есть MVC приложение, в котором указан ServiceReference на сервисы.
В коде на С# есть обращения к этим сервисам. Сервисы установлены на двух серверах. Требуется балансировать нагрузку на сервисы по этим серверам.

Для балансировки использую nginx с модулем nginx-sticky-module. Он, как известно, привязывает запрос по куки route. Но в этом случае я так понимаю не работает эта привязка, наверное нужные куки не создаются. До того как что-то отобразиться в браузере происходит 3 запроса к сервису.
Судя по логам, сначала к одному серверу, потом в к другому. Хотя при привязке по куки route они должны уходить на один сервер. Вопрос. Почему привязка по куки не работают?

Мой конфиг:

#user nobody;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

worker_processes 1;
worker_rlimit_nofile 20240;
events {
worker_connections 20240;
}

http {
log_format upstream 'Request: "$request" [$time_local] BI_SERVER_IP: $upstream_addr STATUS: $status' $upstream_cache_status - $upstream_status - $upstream_response_time - $upstream_http_host - $upstream_http_content_type - $upstream_http_content_length - $upstream_http_location;
#sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
#gzip on;

upstream backend {
sticky;
server 10.0.7.99;
server 10.0.6.140;
}

server {
listen 555;
server_name localhost;

access_log logs/nginx_upstream_access.log upstream;

location /MyService{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:555;

proxy_connect_timeout 10m;
proxy_send_timeout 10m;
proxy_read_timeout 8m;
proxy_next_upstream off;

proxy_pass http://backend/MyService;
}

}
}

#$upstream_http_host

Nginx и веб-приложение на одной и той же машине. ОС Windows.

debug_points abort, что делать с корками (no replies)

$
0
0
Их как-то неприлично много развелось в последние дни

gdb показывает вот такое:

Program terminated with signal 6, Aborted.
#0 0x00007f694d6a41b5 in raise () from /lib/libc.so.6
(gdb) bt
#0 0x00007f694d6a41b5 in raise () from /lib/libc.so.6
#1 0x00007f694d6a6fc0 in abort () from /lib/libc.so.6
#2 0x0000000000424527 in ngx_debug_point () at src/os/unix/ngx_process.c:608
#3 0x000000000040c460 in ngx_output_chain (ctx=0x2483430, in=0x0) at src/core/ngx_output_chain.c:114
#4 0x000000000044e21a in ngx_http_upstream_send_request (r=0x5afdbc0, u=0x24833a0) at src/http/ngx_http_upstream.c:1499
#5 0x0000000000450b2e in ngx_http_upstream_send_request_handler (r=0x5afdbc0, u=0x24833a0) at src/http/ngx_http_upstream.c:1588
#6 0x000000000044c432 in ngx_http_upstream_handler (ev=0x7f694a7e6080) at src/http/ngx_http_upstream.c:972
#7 0x000000000041f6c9 in ngx_event_process_posted (cycle=0x2468c90, posted=0x6cd4c0) at src/event/ngx_event_posted.c:40
#8 0x000000000041f4f7 in ngx_process_events_and_timers (cycle=0x2468c90) at src/event/ngx_event.c:276
#9 0x00000000004263d5 in ngx_worker_process_cycle (cycle=0x2468c90, data=<value optimized out>) at src/os/unix/ngx_process_cycle.c:816
#10 0x0000000000424aec in ngx_spawn_process (cycle=0x2468c90, proc=0x4262df <ngx_worker_process_cycle>, data=<value optimized out>, name=0x49783b "worker process", respawn=0) at src/os/unix/ngx_process.c:198
#11 0x0000000000426e5e in ngx_reap_children (cycle=0x2468c90) at src/os/unix/ngx_process_cycle.c:627
#12 ngx_master_process_cycle (cycle=0x2468c90) at src/os/unix/ngx_process_cycle.c:180
#13 0x000000000040969a in main (argc=<value optimized out>, argv=<value optimized out>) at src/core/nginx.c:407


в логах при этом примерно такое:
2013/11/28 17:30:39 [alert] 22491#0: *94121469 zero size buf in output t:1 r:0 f:0 0000000005C98C53 0000000005C98C53-0000000005C98C53 0000000000000000 0-0 while sending request to upstream, client: 62.151.197.187, server: peeteevee.com, request: "POST /is_login_json.php HTTP/1.1", upstream: "http://127.0.0.1:80/is_login_json.php", host: "www.xxxxxx.com", referrer: "http://www.xxxxxx.com/albums/video/zzzzzzzz/"


что с этим делать?

Re: debug points abort, что делать с корками (no replies)

$
0
0
Hello!

On Fri, Nov 29, 2013 at 02:44:10PM -0500, proforg wrote:

> Их как-то неприлично много развелось в последние дни
>
> gdb показывает вот такое:
>
> Program terminated with signal 6, Aborted.
> #0 0x00007f694d6a41b5 in raise () from /lib/libc.so.6
> (gdb) bt
> #0 0x00007f694d6a41b5 in raise () from /lib/libc.so.6
> #1 0x00007f694d6a6fc0 in abort () from /lib/libc.so.6
> #2 0x0000000000424527 in ngx_debug_point () at
> src/os/unix/ngx_process.c:608
> #3 0x000000000040c460 in ngx_output_chain (ctx=0x2483430, in=0x0) at
> src/core/ngx_output_chain.c:114
> #4 0x000000000044e21a in ngx_http_upstream_send_request (r=0x5afdbc0,
> u=0x24833a0) at src/http/ngx_http_upstream.c:1499
> #5 0x0000000000450b2e in ngx_http_upstream_send_request_handler
> (r=0x5afdbc0, u=0x24833a0) at src/http/ngx_http_upstream.c:1588
> #6 0x000000000044c432 in ngx_http_upstream_handler (ev=0x7f694a7e6080) at
> src/http/ngx_http_upstream.c:972
> #7 0x000000000041f6c9 in ngx_event_process_posted (cycle=0x2468c90,
> posted=0x6cd4c0) at src/event/ngx_event_posted.c:40
> #8 0x000000000041f4f7 in ngx_process_events_and_timers (cycle=0x2468c90) at
> src/event/ngx_event.c:276
> #9 0x00000000004263d5 in ngx_worker_process_cycle (cycle=0x2468c90,
> data=<value optimized out>) at src/os/unix/ngx_process_cycle.c:816
> #10 0x0000000000424aec in ngx_spawn_process (cycle=0x2468c90, proc=0x4262df
> <ngx_worker_process_cycle>, data=<value optimized out>, name=0x49783b
> "worker process", respawn=0) at src/os/unix/ngx_process.c:198
> #11 0x0000000000426e5e in ngx_reap_children (cycle=0x2468c90) at
> src/os/unix/ngx_process_cycle.c:627
> #12 ngx_master_process_cycle (cycle=0x2468c90) at
> src/os/unix/ngx_process_cycle.c:180
> #13 0x000000000040969a in main (argc=<value optimized out>, argv=<value
> optimized out>) at src/core/nginx.c:407
>
>
> в логах при этом примерно такое:
> 2013/11/28 17:30:39 [alert] 22491#0: *94121469 zero size buf in output t:1
> r:0 f:0 0000000005C98C53 0000000005C98C53-0000000005C98C53 0000000000000000
> 0-0 while sending request to upstream, client: 62.151.197.187, server:
> peeteevee.com, request: "POST /is_login_json.php HTTP/1.1", upstream:
> "http://127.0.0.1:80/is_login_json.php", host: "www.xxxxxx.com", referrer:
> "http://www.xxxxxx.com/albums/video/zzzzzzzz/"
>
>
> что с этим делать?

nginx -V, конфиг, debug log?

http://wiki.nginx.org/Debugging

--
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Непонятные строчки в access.log... (1 reply)

$
0
0
Здравствуйте. Обратил внимание, что время от времени в access.log наряду с обычными строчками вида:

[30/Nov/2013:22:52:33 +0400] 192.168.0.31 "GET / HTTP/1.1" 200 1240 "-" "Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.16" "-" "-"

пишутся ещё строчки вида:

[30/Nov/2013:22:48:29 +0400] 37.110.44.240 - "Q\x9E+\x95i\xD4a\xCCry\xC2\x1Bw\xA6\xAB\x15a\xBD\x9C\x7F\xCE\x16\xAD\xAA\xA0\xB0\x8C\xD1iF9\xC2\xC5{(m\xE1h\xEB\x9A|\x8B7\x977>\x01R\xCA\xC1" 400 310 "-" "-" "-" "-"

Собственно, вопросы:

1. Из-за чего эти непонятные строчки появляются? Некорректные настройки Nginx или особенности ботов?
2. Как отшить\фильтровать\заблокировать этих буржуев, которые столь красивый лог портят?

С уважением.

Как избавиться от GET-параметров при редиректе? (1 reply)

$
0
0
Доброго времени суток!

Перевел сайт на другой движок, теперь нужно проставить редиректы со страниц вида
/index.php?category_id=102&Itemid=238

к страницам
/catalog/izdelie_takoe_to/

При этом, данные по соответствию страниц есть. Нужно только жестко прописать сотню правил для редиректа...

Сначала пришло в голову только прописать в .htaccess:
RewriteCond %{QUERY_STRING} ^category_id=102&Itemid=238
RewriteRule ^index\.php\?$ /catalog/izdelie_takoe_to/ [R=301,L]

Редирект работает, однако в строке запроса остается гет-запрос и происходит перенаправление на /catalog/izdelie_takoe_to/?category_id=102&Itemid=238
Что, на самом деле, не очень устраивает.
Дальше начал копать в сторону аналогичных правил для nginx. Но с помощью rewrite смог добиться ровно тех же результатов. Редирект есть, но get-параметры при перенаправлении сохраняются.

Подскажите, как можно, если можно, организовать 301й редирект с /index.php?category_id=102&Itemid=238 на /catalog/izdelie_takoe_to/, избавившись от get-параметров?

Proxy auth в nginx (no replies)

$
0
0
Пытаюсь использовать nginx в качестве прямого прокси сервера. Все
устраивает, все работает, но мне необходим прокси с авторизацией. Basic
http авторизация не подходит, так как передаются другие заголовки,
возвращаются другие коды ответа. Нет ли специального модуля для прокси
авторизации?
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Проксирование https-сайта (no replies)

$
0
0
Есть сайт работающий на связке nginx+apache. Схема тривиальная, nginx стоит перед апачем, поднимает ssl, раздает статику, остальное проксирует на апач. На сайте есть личный кабинет работающий на субдомене на отдельном ip, с шифрованием, сертификат доверенный.
Задача - сделать зеркало этого сайта.
Единственный нормальный мануал найденный по этой теме - с хабра http://habrahabr.ru/post/158393/
Делал все согласно этой статье. В итоге все что работает на http - работает прекрасно. При уходе на https - ERR_SSL_PROTOCOL_ERROR.
В статье про https почти ничего не сказано и даже 443 порт не прослушивается. Я дела 2 вариант, редирект трафика с 443 на 80 и отдельный виртуальный сервер с аналогичной конфигурацией который слушает 443 порт.
Собственно, главный вопрос - как запроксить https? и можно ли это вообще сделать?

Re: Проблема с загрузкой изображений при использовании limit req. Как побороть? (no replies)

$
0
0
в ключ добавьте uri и, возможно, параметры

29 ноября 2013 г., 1:47 пользователь Sferg <nginx-forum@nginx.us> написал:
> Здравствуйте, господа. Установлена связка nginx + php-fpm. Возникла проблема
> с загрузкой изображений при использовании limit_req.
>
> В секции http прописал:
> limit_req_zone $binary_remote_addr zone=reqPerSec1:1m rate=1r/s;
>
> Далее, определены следующие локэйшены:
>
> location / {
> #try_files $uri $uri/ /index.php$uri$is_args$args;
> limit_req zone=reqPerSec1 burst=5 nodelay;
> }
>
> location ~ [4-5][0-9][0-9].html {
> internal;
> }
>
> location /favicon.ico {
> access_log off;
> log_not_found off;
> expires 1y;
>
> #empty_gif;
> return 204;
> }
>
> location ~ ^.+\.php(?:/.*)?$ {
> limit_req zone=reqPerSec1 burst=5 nodelay;
> include conf.d/php.conf;
> }
>
> location ~* ^.+\.(jpg|jpeg|gif|png|css|js|swf)$ {
> access_log off;
> log_not_found off;
> expires 1y;
> }
>
> location ~ (?:/\..*|~)$ {
> access_log off;
> log_not_found off;
> deny all;
> }
>
> В результате получается, что при загрузке html-странички, css и картинки
> грузятся исправно, даже если часто понажимать F5, а вот при вызове phpinfo,
> логотипы пропадают после первого же обновления странички. В чём может быть
> проблема и каким образом её можно побороть? К обработке html-страничек
> вопросов никаких, но хотелось бы, чтоб и с php limit_req функционировал
> исправно.
>
> С уважением, Геннадий.
>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?21,245058,245058#msg-245058
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Проблема с загрузкой изображений при использовании limit req. Как побороть? (no replies)

$
0
0
с картинками есть особенность, в MSIE6, если у вас, например, на
странице несколько скрытых div-ов, в каждом из которых есть одна и та
же картинка (например, фон), добавленный через javascript, то MSIE6
будет ее загружать столько раз, сколько она встречается. более
современные MSIE - понимают, что картинка все таки одна (независимо от
способа, которым она добавляется на страницу).

с картинками и limit_req надо осторожно.

29 ноября 2013 г., 1:47 пользователь Sferg <nginx-forum@nginx.us> написал:
> Здравствуйте, господа. Установлена связка nginx + php-fpm. Возникла проблема
> с загрузкой изображений при использовании limit_req.
>
> В секции http прописал:
> limit_req_zone $binary_remote_addr zone=reqPerSec1:1m rate=1r/s;
>
> Далее, определены следующие локэйшены:
>
> location / {
> #try_files $uri $uri/ /index.php$uri$is_args$args;
> limit_req zone=reqPerSec1 burst=5 nodelay;
> }
>
> location ~ [4-5][0-9][0-9].html {
> internal;
> }
>
> location /favicon.ico {
> access_log off;
> log_not_found off;
> expires 1y;
>
> #empty_gif;
> return 204;
> }
>
> location ~ ^.+\.php(?:/.*)?$ {
> limit_req zone=reqPerSec1 burst=5 nodelay;
> include conf.d/php.conf;
> }
>
> location ~* ^.+\.(jpg|jpeg|gif|png|css|js|swf)$ {
> access_log off;
> log_not_found off;
> expires 1y;
> }
>
> location ~ (?:/\..*|~)$ {
> access_log off;
> log_not_found off;
> deny all;
> }
>
> В результате получается, что при загрузке html-странички, css и картинки
> грузятся исправно, даже если часто понажимать F5, а вот при вызове phpinfo,
> логотипы пропадают после первого же обновления странички. В чём может быть
> проблема и каким образом её можно побороть? К обработке html-страничек
> вопросов никаких, но хотелось бы, чтоб и с php limit_req функционировал
> исправно.
>
> С уважением, Геннадий.
>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?21,245058,245058#msg-245058
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Как удержать проксирование в пределах поддиректории сайта (proxy_redirect не срабатывает) ? (no replies)

$
0
0
Здесь в конференции неоднократно поднималась проблема перескока проксирования за пределы location, в которой оно производится:
http://forum.nginx.org/read.php?21,240642,240642#msg-240642
http://forum.nginx.org/read.php?11,239231,239231#msg-239231
http://forum.nginx.org/read.php?21,242647,242671#msg-242671

Просьба к светочам нашей жизни внести ясность по данному поводу.
Возможно, можно что-то придумать с корректировкой заголовков (через subs_filter?) или с реврайтами.
Пожалуйста, помогите разобраться!

Предложение с перечислением поддиректорий - "location ~ ^(/supervision|/nagios)" - никак не выход для подобных ситуаций. Кроме того, это выдаёт ошибку:
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /usr/local/etc/nginx/sites/test.conf:50

В моём случае используется nginx-1.4.1,1
Общие установки проксирования nginx (имеющие отношение к делу):
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


Конфигурация тестовой location:
------------------
1-й вариант.
------------------
location /online {
rewrite ^/online/?(.*)?$ /$1 break;
rewrite_log on;
proxy_pass https://10.22.33.44:83;
proxy_redirect https://10.22.33.44:83 /online;
}


------------------
2-й вариант. (По одному необычному интернетовскому примеру.)
------------------
location /online {
rewrite ^/online/?(.*)?$ /__online__/$1 last;
rewrite_log on;
}

location /__online__ {
internal;
proxy_pass https://10.22.33.44:83;
break;
}
------------------


Оба варианта одинаковым образом не срабатывают.
Очень странно, что proxy_redirect (в первом варианте) почему-то не отрабатывает.
Это видно по логу:
10.xxx - - [03/Dec/2013:13:23:32 +0400] "GET /online HTTP/1.1" 302 137 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
Здесь прокси даёт редирект на свою локальную директорию: /logon

Пользовательский браузер получает этот редирект именно как /logon, а не как /online/logon
10.xxx - - [03/Dec/2013:13:23:32 +0400] "GET /logon HTTP/1.1" 301 236 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
В результате происходит этот самый перескок за пределы проксируемой location.

При этом "curl -v -k" выдаёт:
> GET /online HTTP/1.1
> User-Agent: curl/7.31.0
> Host: 10.xxx
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: nginx
< Date: Tue, 03 Dec 2013 09:41:52 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 137
< Connection: keep-alive
< Keep-Alive: timeout=10
< Cache-Control: private
< Location: /logon
<
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/logon?ReturnUrl=%2f">here</a>.</h2>
</body></html>


Попутный вопрос. Я прописал реврайт, чтобы из location на проксируемый бакэнд уходили запросы не "GET /online", а "GET /".
rewrite ^/online/(.*) /$1 break;
Однако есть альтеренативный вариант реврайта:
rewrite ^/online/?(.*)?$ /$1 break;

По логам, они отрабатывают одинаково правильно:
2013/12/03 12:40:15 [notice] 71288#0: *12543662 "^/online/?(.*)?$" matches "/online", client: 10.xxx, server: testserver.ru, request: "GET /online HTTP/1.1", host: "testserver.ru"
2013/12/03 12:40:15 [notice] 71288#0: *12543662 rewritten data: "/", args: "", client: 10.xxx, server: testserver.ru, request: "GET /online HTTP/1.1", host: "testserver.ru"

Но из-за перескока последующих запросов за пределы проксируемой location не видно правильно ли всё работает в конечном счёте.
Какой вариант будет лучше?

Re: Как удержать проксирование в пределах поддиректории сайта (proxy redirect не срабатывает) ? (no replies)

$
0
0
Hello!

On Tue, Dec 03, 2013 at 07:09:40AM -0500, Dmitriy_K wrote:

> Здесь в конференции неоднократно поднималась проблема перескока
> проксирования за пределы location, в которой оно производится:
> http://forum.nginx.org/read.php?21,240642,240642#msg-240642
> http://forum.nginx.org/read.php?11,239231,239231#msg-239231
> http://forum.nginx.org/read.php?21,242647,242671#msg-242671
>
> Просьба к светочам нашей жизни внести ясность по данному поводу.
> Возможно, можно что-то придумать с корректировкой заголовков (через
> subs_filter?) или с реврайтами.
> Пожалуйста, помогите разобраться!

В общем случае - если бекенд не знает, по какому адресу на себя
ссылаться, и при этом ссылается - то проксирование невозможно.
Пример: бекенд возвращает swf и/или любой другой бинарный файл
неизвестной структуры, в котором зашит неправильный адрес.

В более частных случаях - работают решения, предусматривающие
минимальное вмешательство в ответы бекенда, такие как
proxy_redirect (+ proxy_cookie_*). В этом случае ответ меняется
на уровне заголовков.

Если в вашем случае proxy_redirect не хватает, то можно пытаться
ходить в сторону замены адресов в возвращаемом ответе (sub_filter
и т.п.). Но единственное гарантированно работающее решение -
пойти на бекенд и объяснить ему, как на себя следует ссылаться.

Я лично крайне не рекомендую пытаться делать замены в ответах.
Либо надо сводить задачу к решаемой с помощью замен в заголовках
(обычно для этого бывает достаточно отказаться от изменения пути
при проксировании - либо использовав отдельный домен, либо
использовав нужный префикс на бекенде), либо объяснять бекенду,
как правильно на себя ссылаться.

[...]

--
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Viewing all 3102 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>