Я пытаюсь настроить обратный прокси-сервер на ec2, чтобы обеспечить безопасный доступ к моему приложению appengine через собственный домен с использованием nginx. Кажется, он работает нормально, за исключением случаев, когда страницы требуют обслуживания пользователей. Он перенаправляет на вход в учетную запись Google, а затем переходит в домен приложений вместо моего личного домена. Я знаю, что appengine тестирует ssl, но мне нужно решение, которое я могу использовать сейчас. Можно ли это побороть или мне нужно будет создавать своих пользователей?
Ниже приведена моя конфигурация:
server {
listen 443;
server_name <custom-domain>;
keepalive_timeout 70;
ssl on;
ssl_certificate /etc/nginx/cert/server.crt;
ssl_certificate_key /etc/nginx/cert/server.key;
ssl_session_timeout 30m;
location / {
proxy_redirect off;
proxy_pass https://<appid>.appspot.com;
proxy_set_header Host <appid>.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_intercept_errors off;
}
}
В моем домене есть CNAME, указывающий на ec2.
===
Я нашел обходной путь. Все еще надеюсь на более простой и был бы признателен за обратную связь.
1) Client hits https: //mydomain.com/blah which goes through EC2 proxy https://appid.appspot.com/blah
2) The client is redirected to the google login page, with continue set as /aa?continue=/blah
3) Client logs into Google Accounts and is then redirected to https: //appid.appspot.com/aa?continue=/blah
4) Client hits https: //appid.appspot.com/aa which serves a redirect to https://mydomain.com/sc?c=ACSID&continue=/blah where ACSID is the Google account session cookie read by the handler for /aa.
5) Client hits https: //mydomain.com/sc?c=ACSID&continue=/blah which sets the ACSID session cookie for the domain mydomain.com and redirects to https: //mydomain.com/blah based on a continue parameter in aa passed to sc
Ниже приведен мой web.xml
/ is publicly accessible
/aa is publicly accessible
/sc is publicly accessible
/* is restricted to logged in users
Ниже приводится ограничение в обработчиках (с некоторым хитрым экранированием URL):
/ --> if not logged in, redirect to login page continue=/aa
/aa --> if not logged in, redirect to login page continue=/aa
/sc --> if not logged in, redirect to login page continue=/aa
/* --> if not logged in, redirect to login page continue=/aa?continue=*
После этого пользовательский сервис, похоже, работает нормально даже при прохождении через прокси-сервер с SSL. Файл cookie ACSID теперь находится на mydomain.com и отправляется через прокси на appengine.
Домен appspot по-прежнему будет виден технически подкованным пользователям, но это не является моей главной заботой. Моя цель — обслуживать через https и сохранять свой пользовательский домен в строке URL-адреса, а также быть более безопасным с пользовательскими данными, поскольку они обслуживаются без SSL с использованием моего личного домена. Поскольку вся транзакция проходит через https, я не думаю, что это раскрывает файл cookie сеанса больше, чем использование mydomain.com без SSL. Любые другие межсайтовые атаки будут работать и без этой схемы.
Я все еще не уверен, почему mydomain.com/_ah/conflogin?state=blah не работает и требует этого обходного пути.