将http的EC2 elb从httpredirect到https
我想将所有http请求redirect到elb上的https请求。 我有2个EC2实例。 我正在使用nginx的服务器。 我已经尝试重写nginx的conf文件没有任何成功。 我会喜欢它的一些build议。
ELB设置X-Forwarded-Proto
头,你可以使用它来检测原始请求是否是HTTP,然后redirect到HTTPS。
你可以在你的server
conf里试试这个:
if ($http_x_forwarded_proto = 'http') { return 301 https://yourdomain.com$request_uri; }
看看ELB文档 。
我有同样的问题,在我的情况HTTPS完全由ELB处理,我不知道我的源域提前,所以我最终做了这样的事情:
server { listen 81; return 301 https://$host$request_uri; } server { listen 80; # regular server rules ... }
然后当然将ELB的“https”指向实例端口80,然后指向实例端口81的“http”路由。
Amazon Elastic Load Balancer(ELB)支持名为X-FORWARDED-PROTO的HTTP标头。 所有通过ELB的HTTPS请求将具有等于“HTTPS”的X-FORWARDED-PROTO的值。 对于HTTP请求,您可以通过添加以下简单的重写规则来强制使用HTTPS。 对我来说,它工作正常!
阿帕奇
您可以在.htaccess文件中添加以下行:
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
或者,如果您使用vhost.conf来pipe理同一个EC2 Web服务器中的多个域,那么您可以将以下内容添加到vhost.conf(将其添加到要为其使用https的域中):
<VirtualHost *:80> ... RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} ... </VirtualHost>
IIS
安装IIS Url-Rewrite模块,使用configurationGUI添加这些设置:
<rewrite xdt:Transform="Insert"> <rules> <rule name="HTTPS rewrite behind ELB rule" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions> <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" /> </conditions> <action type="Redirect" redirectType="Found" url="https://{SERVER_NAME}{URL}" /> </rule> </rules> </rewrite>
在这里阅读更多
这可能不是您可能需要的解决scheme,但另一种select是使用AWS CloudFront和ELB。 CloudFront允许将所有传入的HTTP通信redirect到HTTPS。
我有nginx和ELBconfiguration奇怪的问题。 我的设置在ELB后面的一个nginx里包含了3个不同的服务。 而我的内容混合问题是:当你对ELB的请求是https,但是在ELB http内部,而服务器使用http创build相对静态的path时,浏览器因为混合内容问题而失败。 我必须为http / https工作创build解决scheme,无需任何redirect。
这里是位于nginx/conf.d/
文件夹中的configuration:
# Required for http/https switching map $http_x_forwarded_port $switch { default off; "80" off; "443" on; }
这意味着我们将知道真正的客户端协议是什么。 正如你所看到的,我们将它在$switch
var中。 在这一刻,你可以在你需要的地方使用它:
location ~ /softwareapi/index.php { fastcgi_param HTTPS $switch; .. other settings here .. }
使用HTTPS设置PHP应用程序将自动检测正确的协议,并认真build立相对path,以防止混合内容问题。
最好的祝福。
使用以下内容创build文件.ebextensions/00_forward_http_to_https.config
:
files: /tmp/deployment/http_redirect.sh: mode: "000755" content: | APP_URL=`/opt/elasticbeanstalk/bin/get-config environment --output yaml | grep -oP 'APP_URL: \K([^\s)\"](?!ttp:))+'` sed -ie 's@$proxy_add_x_forwarded_for;@$proxy_add_x_forwarded_for;\n if ($http_x_forwarded_proto = 'http') { return 301 https://'"$APP_URL"'$request_uri; }@' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf container_commands: http_redirect: command: "/tmp/deployment/http_redirect.sh"
请务必事先从AWSpipe理控制台设置APP_URL环境variables。