将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。