簡體   English   中英

通過AWS EC2負載均衡器強制HTTP到HTTPS

[英]Force HTTP to HTTPS through an AWS EC2 load-balancer

我們有一個AWS EC2負載均衡器,它上面安裝了SSL證書。 但是池中的服務器仍然在端口80和非SSL協議上運行。

問題是我無法訪問負載均衡器,但我仍然需要將非SSL流量路由到安全HTTPS。 我嘗試在htaccess添加以下內容,但它無法正常工作,因為服務器仍在HTTP上運行。

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

我在PHP代碼中嘗試了同樣的事情,但也沒有用。

if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") {
        $url = "https://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
        redirect($url);
        exit;
    }

所以,我得知服務器仍在HTTP上運行,證書僅應用於負載均衡器。 在這種情況下,對於此類重定向,最佳解決方案是什么? 我能想到的一個解決方案是在代碼中解析URL以查看其中是否有http://並重定向。 這可能有用,但我真的不認為它是一個干凈和最終的解決方案。 AWS EC2是否可以通過這種方式重定向? 我不熟悉AWS EC2。

此外,是否有任何服務器參數可能表明服務器正在端口80上運行但HTTPS仍然on

我在這里找到了AWS docs的解決方案。

它表示AWS負載均衡器會將服務器變量轉發到池中。

X-Forwarded-Proto specifies the protocol (“http” or “https”) of the original request made to the Elastic Load Balancer.
X-Forwarded-Port specifies the port of the original request.

因此,由於我們使用的是AWS EC2,它可以解決問題,但是如果您使用其他環境,請小心使用,因為它們可能不存在。

完整的代碼是:

if(isset($_SERVER['HTTP_X_FORWARDED_PROTO'])){

        if ($_SERVER['HTTP_X_FORWARDED_PROTO']=="http") {
            $url = "https://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
            redirect($url);
            exit;
        }

    }

使用以下規則:

 RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

https://stackoverflow.com/questions/5106313/redirecting-from-http-to-https-with-php

所以,從上面的鏈接,我在header.php文件中使用了所有其他文件調用的PHP代碼:

<?php
if (!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || 
   $_SERVER['HTTPS'] == 1) ||  
   isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&   
   $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
{
   $redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   header('HTTP/1.1 301 Moved Permanently');
   header('Location: ' . $redirect);
   exit();
}
?>

這改變了對HTTPS的所有請求,似乎涵蓋了所有基礎

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM