Re: Вопрос по тексту ошибки
Gena Makhomed
gmm at csdoc.com
Thu Jan 17 16:46:57 UTC 2013
On 17.01.2013 16:21, Михаил Монашёв wrote:
> location ~* "^/(?<phost>[a-z0-9\-\.]+)/(?<puri>.*)" {
> proxy_pass http://$phost:80/$puri;
> proxy_set_header Host $1;
> proxy_set_header Referer "http://$phost/";
> в логе вот такая ошибка:
> 2013/01/17 17:47:58 [error] 3963#0: *8162 kevent() reported that connect() failed (60: Operation timed out) while connecting to upstream, client: 80.239.243.119, server: i99.beon.ru, request: "GET /ishop.top-kniga.ru/data/m_ishc/1084/1084845.jpg HTTP/1.1", upstream: "http://91.206.106.43:80/data/m_ishc/1084/1084845.jpg", host: "i99.beon.ru", referrer: "http://tanitakokyto.beon.ru/24898-872-tema-dlja-raznyh-anket.zhtml"
>
> По идее nginx должен был отрезолвить ishop.top-kniga.ru , соединится
> с полученным ip и запросить http://ishop.top-kniga.ru/data/m_ishc/1084/1084845.jpg
> Текст ошибки меня удивил. Его я его понял так: не удалось соединиться
> с ip, в который отрезолвился ishop.top-kniga.ru. Но при это
> показываются странные данные про апстрим:
> upstream: "http://91.206.106.43:80/data/m_ishc/1084/1084845.jpg"
> Хотя мне видится, что он должен быть таким:
> http://ishop.top-kniga.ru/data/m_ishc/1084/1084845.jpg , ведь в
> конфиге написано:
> proxy_pass http://$phost:80/$puri;
> , где $phost - это домен, а не ip.
>
> Как получилось http://91.206.106.43:80/data/m_ishc/1084/1084845.jpg
> понятно. Вопрос в том, правильно ли это?
судя по описанию
http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass -
да, так и должно быть.
ведь доменное имя ishop.top-kniga.ru в общем случае может ресолвиться
в несколько разных IP, и если скрывать адрес апстрима, с которым не
удалось соединиться - толку от такого декоративного лога будет мало.
особенно, если апстрим будет задан отдельным блоком upstream { ... }
====================================================================
Имя сервера, его порт и передаваемый URI можно также полностью задать с
помощью переменных:
proxy_pass http://$host$uri;
или даже так:
proxy_pass $request;
В этом случае имя сервера ищется среди описанных групп серверов и если
не найдено, то определяется с помощью resolver’а.
====================================================================
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru