私のAPIのv1.2(およびそのドキュメント)を中国のユーザーに公開したいと考えています。親サイトmysite.mycompany.com
はブロックされていますが、1.2.3.4
はそうではないので、私のサービスへのアクセスに使用できるそのアドレスでリバースプロキシを構築しています。
Nginxをリバースプロキシに設定しましたhttp://mysite.mycompany.com
からhttp://1.2.3.4
プロキシはFirefoxとIEでは適切に機能しますが、Chromeでは機能しません。ログインはCookieを使用して管理されますが、Chromeはログイン中にプロキシから送信されたSet-Cookieヘッダーを無視します。理由がわかりません。これにより、Chrome =ユーザーはログインできません。
ログイン要求に対する親サイトの応答ヘッダー(Set-Cookieが成功し、ログインが成功した場合)は
HTTP/1.1 302 Found
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
Content-Type: text/html; charset=UTF-8
Date: Tue, 12 Aug 2014 18:16:57 GMT
ETag: "1407867417"
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Tue, 12 Aug 2014 18:16:57 +0000
Location: http://mysite.mycompany.com/user/me/apps
Server: Apache
X-Powered-By: PHP/5.3.15
Content-Length: 0
Connection: Keep-Alive
Set-Cookie: SESS25fe1d0b3b7239f403e22223da0614cf=Oo-PXr4XYQCFUKYUyZgX3UJpWADAhF_q7Xf-8gko3BU; expires=Thu, 04-Sep-2014 21:50:17 GMT; path=/; domain=.mysite.mycompany.com; HttpOnly
一方、プロキシサイト(Set-Cookieが失敗し、ログインが成功しない)には、次の応答ヘッダーがあります。
HTTP/1.1 302 Found
Server: nginx/1.4.7
Date: Tue, 12 Aug 2014 18:57:42 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Location: http://1.2.3.4/user/me/apps
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
ETag: "1407869862"
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Tue, 12 Aug 2014 18:57:42 +0000
X-Powered-By: PHP/5.3.15
Connection: Keep-Alive
Set-Cookie: SESS25fe1d0b3b7239f403e22223da0614cf=DrY_4Y1NUPdIv9MsXPMjCr7Bzkq7DjyOmQPcNhetKXU; expires=Thu, 04-Sep-2014 22:31:02 GMT; path=/; domain=.1.2.3.4; HttpOnly
私のnginx設定の興味深い部分は
http {
# Ngnix defaults up to here then
proxy_cache_path /var/spool/nginx keys_zone=CACHE:20m levels=1:2 inactive=6h max_size=1g;
server {
listen 80;
location /v1.2/ {
proxy_pass http://api.mysite.mycompany.com/v1.2/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Host $Host;
}
location / {
proxy_pass http://mysite.mycompany.com;
# Required to prevent the Host serving gzipped pages that can't be modified with sub_filter
proxy_set_header Accept-Encoding '';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Host $Host;
proxy_cookie_domain mysite.mycompany.com 1.2.3.4;
sub_filter "mysite.mycompany.com" "1.2.3.4";
sub_filter_once off;
proxy_cache CACHE;
}
}
}
キャッシュ要素をオフにして試してみましたが、何も変更されていないようです。
Chrome=がプロキシのCookieの設定を拒否しているのはなぜですか?
Nginx confの問題ではないことがわかりました-それは問題ありませんでした。
この問題は、ChromeはIPアドレスではなく、完全修飾ドメイン名からのCookieの設定のみを許可するためです。
https://code.google.com/p/chromium/issues/detail?id=56211
ドメイン名を購入してサーバーに適用したところ、うまくいきました。 nginx設定に1つの変更が必要でした。これは、私が最初に行ったはずですが、これらの2つの行を置き換えることです。
proxy_cookie_domain mysite.mycompany.com $Host;
sub_filter "mysite.mycompany.com" $Host;