У меня есть приложение Perl HTTPS, которое работает за Elastic Load Balancer (ELB). HTTPS завершается ELB, который затем перенаправляет запросы как HTTP на мои экземпляры.
Проблема в том, что, поскольку доступ к самому экземпляру осуществляется через HTTP, когда я использую модуль CGI для создания самоссылающихся URL-адресов, они неправильно используют HTTP вместо HTTPS, поэтому формировать POST не удается.
Запрос GET в порядке, потому что он перенаправлен, но все, что использует POST, не работает.
Если я проверю свои переменные среды CGI, у меня будет следующее...
HTTP_X_FORWARDED_PORT = 443
HTTP_X_FORWARDED_PROTO = https
REQUEST_SCHEME = http
SERVER_PROTOCOL = HTTP/1.1
Модуль CGI предположительно использует REQUEST_SCHEME
или SERVER_PROTOCOL
, чтобы определить, что URL-адреса должны использовать http://
.
Можно ли каким-то образом изменить переменные среды на уровне Apache или NGINX, чтобы убедить CGI в том, что сайт на самом деле является HTTPS?
SERVER_PROTOCOL
. metacpan.org/source/LEEJO/CGI-4.32/lib/ CGI.pm#L3157 — если это всегда работает в мире https, вы можете просто подкласс CGI или обезьянью-патч эту функцию, чтобы всегда возвращатьhttps
. - person simbabque   schedule 16.08.2016