iT邦幫忙

1

EC2 ALB轉址https問題

AWS 已經架好了ALB環境和https
https://www.abc.com 是可以成功加密的
可是使用者輸入http://www.abc.com
還是可以進入未加密網頁
找了網上一些資料用apache 的設定檔內加入
RewriteEngine去做轉換反而連不進去

因為AWS的SSL憑證是架構在ALB上面
Web Server沒有安裝過憑證
所以如果在Server上直接轉成https
照理說也無法直接轉換成https,會出現錯誤

那在ALB的環境下
要怎麽做http自動轉https的功能?
如果把listener 80砍了 這樣不就連輸入http都進不去了
希望有經驗的大大分享經驗

黃彥儒 iT邦高手 1 級 ‧ 2017-11-02 14:42:22 檢舉
我還在想ALB是啥,一般不都叫ELB嘛....
hsiang11 iT邦好手 1 級 ‧ 2017-11-02 14:51:42 檢舉
Application Load Balancer ,是ELB裡面的其中一項啦XD

2 個回答

1
黃彥儒
iT邦高手 1 級 ‧ 2017-11-02 14:19:13
最佳解答

http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html

HTTP 标头:应用程序负载均衡器和传统负载均衡器均支持 X-Forwarded-For、X-Forwarded-Proto 和 X-Forwarded-Port 标头。

其中,X-Forwarded-Proto會寫明是Http還是Https,後端應用程式以此為據來判斷是否要要求使用者轉址即可

阿帕奇的教學請參照這篇,同時若是有幫到您,請不吝給我最佳解答
https://stackoverflow.com/questions/26620670/apache-httpx-forwarded-proto-in-htaccess-is-causing-redirect-loop-in-dev-envir

看更多先前的回應...收起先前的回應...
hsiang11 iT邦好手 1 級 ‧ 2017-11-02 14:56:10 檢舉

大大真的強,能說明一下X-Forwarded-Proto的原理嗎?

目前我輸入ELB的DNS端點,已經可以成功切入https,網頁也正常
在網路上找了一堆RewriteEngine全部沒法用
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
一進入https不是拒絕連線就是重導向過多,還搞不清為什麼

黃彥儒 iT邦高手 1 級 ‧ 2017-11-02 15:16:52 檢舉

你想想使用者、反向代理(在這裡是ELB)與伺服器所面對的對象與視角,還有他們的工作。
回答看看~

hsiang11 iT邦好手 1 級 ‧ 2017-11-02 15:47:22 檢舉

使用者以http;https協定連線至ELB,ELB會分配流量到Server,這架構應該就這樣
因為https憑證架設在ELB上,Server沒有憑證
使用者使用http連線被導到Server之後發現沒有憑證
所以要重導向回ELB重新以https連線,取得https憑證,再載入整個網站,不知道我猜的正確嗎?

黃彥儒 iT邦高手 1 級 ‧ 2017-11-02 15:49:25 檢舉

不對~晚上下課再詳細講吧(目前大二

黃彥儒 iT邦高手 1 級 ‧ 2017-11-02 18:11:35 檢舉

https://ithelp.ithome.com.tw/upload/images/20171102/20088395CcXbddTXN7.jpg

hsiang11 iT邦好手 1 級 ‧ 2017-11-03 10:37:54 檢舉

原本的Rewrite寫法會造成重導向過多的問題可以理解了,原來在前面就被解密了
那為什麼X-Forwarded-Proto的寫法會運作正常?

黃彥儒 iT邦高手 1 級 ‧ 2017-11-03 10:58:09 檢舉

因為經過ELB後,會加上X-Forwarded-For、X-Forwarded-Proto 和 X-Forwarded-Port 标头呀

黃彥儒 iT邦高手 1 級 ‧ 2017-11-03 10:59:21 檢舉

那你的後端只在X-Forwarded-Proto為http時才要求轉址

hsiang11 iT邦好手 1 級 ‧ 2017-11-03 17:27:47 檢舉

順便問個問題 target group註冊的目標主機都顯示Health checks failed with these codes: [403]
狀態不健康問題是在哪裡? 我都按照預設值也沒設定
可是網站運作又正常

介面顯示
这些可用区中没有一个包含正常目标。正在将请求路由至所有目标。
怕以後會有問題阿

1
wordsmith
iT邦高手 1 級 ‧ 2017-11-02 09:58:51

我自己在 LBS 和 EC2 做 https 的方法如下,給你參考:

  • LBS 聽 80 port 和 443
  • EC2 也上 SSL 憑證
  • EC2 的 Nginx 設定 http 導向 https

這樣連 http 和 https 都通得到,但是 http 會被強制導向 https

看更多先前的回應...收起先前的回應...
hsiang11 iT邦好手 1 級 ‧ 2017-11-02 10:09:49 檢舉

可是我公司未買SSL憑證,單純匯入ACM的憑證到ALB服務上
這樣EC2有辦法匯入AWS的憑證嗎?
另外就是用的是apache,Nginx沒有用過

wordsmith iT邦高手 1 級 ‧ 2017-11-02 14:08:58 檢舉

我是沒有這樣做過,不過如果 ACM 的憑證可以匯出,我想也許一樣可以,畢竟 web server 就是載入憑證和key。

如果上面那條路行不通,ssl 憑證也有便宜的,可以考慮看看。如果不想花錢,也可以參考這裡申請免費的憑證以及後續的更新,做一次工,之後就省事了: https://letsencrypt.tw/

Apache 和 Nginx 差不多,一樣在 web server 的設定檔上設定,將來 80 port 的流量通通導去 https 即可,下面這個網址有兩種作法,你可以參考看看: https://www.phpini.com/apache/apache-http-to-https-redirect

黃彥儒 iT邦高手 1 級 ‧ 2017-11-02 14:41:39 檢舉

wordsmith 您可以參考一下這篇,省一筆憑證費用,也簡化系統架構(有吧?

wordsmith iT邦高手 1 級 ‧ 2017-11-03 11:59:15 檢舉

謝謝提供資訊,觀念上有學到東西

/images/emoticon/emoticon41.gif

我要發表回答

立即登入回答