nginx подменяет заголовок Location: в проксированом ответе
Vladimir Rusinov
vladimir на greenmice.info
Пт Фев 26 14:04:13 MSK 2010
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Приветствую!
Либо это фича, либо баг - не понимаю.
Есть конфиг примерно такого вида:
<...>
proxy_set_header Host $host:$proxy_port;
server_name_in_redirect off;
<...>
upstream wrike {
ip_hash;
server 10.10.0.31:80 max_fails=3 fail_timeout=120s;
server 10.10.0.18:80 max_fails=3 fail_timeout=120s;
}
<...>
server {
listen 10.10.0.30:80;
server_name www.wrike.com;
server_name 10.10.0.30;
root /bla-bla-bla/
location / {
proxy_pass http://wrike;
}
<...>
}
<...>
Бакент поддерживает oauth: принимает post запрос (c логином-паролем) и
отдает редирект с key. Вот как это работает без проксирования через nginx:
$ wget --post-file post.txt http://10.10.0.31/rest/auth/authorize
- --server-response -O -
- --2010-02-26 02:55:42-- http://10.10.0.31/rest/auth/authorize
Connecting to 10.10.0.31:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Set-Cookie: <...>
P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID ADMa OUR NOR STA"
Location: http://wrikerobot.appspot.com/callback.html?oauth_token=XXX
Content-Type: text/html;charset=UTF-8
Content-Length: 915
Date: Fri, 26 Feb 2010 10:55:42 GMT
Connection: keep-alive
Location: http://wrikerobot.appspot.com/callback.html?oauth_token=XXX
[following]
- --2010-02-26 02:55:42--
http://wrikerobot.appspot.com/callback.html?oauth_token=XXX
Resolving wrikerobot.appspot.com... 74.125.127.141
Connecting to wrikerobot.appspot.com|74.125.127.141|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.0 200 OK
<дальше уже ответ стороннего сервера>
Вот как работает это через nginx с указаной выше конфигурацией:
$ wget --post-file post.txt http://10.10.0.30/rest/auth/authorize
- --server-response -O -
- --2010-02-26 02:36:41-- http://10.10.0.30/rest/auth/authorize
Connecting to 10.10.0.30:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 26 Feb 2010 10:36:41 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
Set-Cookie: <...>
P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID ADMa OUR NOR STA"
Location: robot.appspot.com/callback.html?oauth_token=XXX
Content-Length: 915
Location: robot.appspot.com/callback.html?oauth_token=XXX [following]
- --2010-02-26 02:36:41--
http://10.10.0.30/rest/auth/robot.appspot.com/callback.html?oauth_token=XXX
Reusing existing connection to 10.10.0.30:80.
HTTP request sent, awaiting response...
HTTP/1.1 404 Not Found
Как видно, вместо Location: http://wrikerobot.appspot.com/ отдается
Location: robot.appspot.com.
С помощью шестого чувства попробовал поменять upstream wrike и
proxy_pass http://wrike на upstream jboss и proxy_pass http://jboss.
После этого location стал отдаваться правильно.
nginx 0.7.63
- --
Vladimir Rusinov
Twitter: http://twitter.com/vrusinov (crossposts only)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iJwEAQECAAYFAkuHqq0ACgkQSdCkhAKeJ0wN+AQA0nMT4Bsr6bll4XvLjOFsjCYu
PBu/dtjYHYyT4A6g9ITwrHhbf6zCf5RJjx2M7cvOFD8m25hWBXISPg7DVldT9y7o
NOgdPzwpuiYxNckLZuVr/nNta3R5m5Mhlcu6hQOZ62LXnLEy65bY4i0ymysLJPIs
4fKjIlhssCoTuZMxhX4=
=j9CR
-----END PGP SIGNATURE-----
Подробная информация о списке рассылки nginx-ru