4
将Amazon ELB后面的所有http请求重定向到https,而不使用if
目前,我有一个同时为http://www.example.org和https://www.example.org提供服务的ELB 。 我想进行设置,以便任何指向http://www.example.org的请求都重定向到https://www.example.org。 ELB将https请求作为http请求发送,因此使用: server { listen 80; server_name www.example.org; rewrite ^ https://$server_name$request_uri? permanent; } 将不会起作用,因为仍然会向nginx上的端口80 发出对https://www.example.org的请求。 我知道有可能将其重写为 server { listen 80; server_name www.example.org; if ($http_x_forwarded_proto != "https") { rewrite ^(.*)$ https://$server_name$1 permanent; } } 但是我读过的所有内容都表明,if应在nginx配置中不惜一切代价避免这种情况,这将针对每个单个请求。另外,这意味着我必须为运行状况检查设置一个特殊的单独配置(如此处所述:“ ...当您位于ELB后面时,ELB充当HTTPS终结点,并且仅向服务器发送HTTP流量,您中断对ELB所需的运行状况检查使用HTTP 200 OK响应进行响应的能力”)。 我正在考虑将登录名放在Web应用程序的代码中,而不是nginx配置中(出于这个问题的目的,我们假设它是基于Django的应用程序),但是我不确定这是否会比在if 配置中。