nginx下HTTP跳轉HTTPS(阿里雲SLB)

首先我有一個域名:domain.com www.domain.com 解析到了阿里雲的SLB負載均衡的IP上(公網IP)html

其次,SLB的配置爲:前端

https 443  --> http 8080  //加密交給SLB後端

http 80 --> http 80  (這是常規配置,不多人會在瀏覽器上打上HTTPS訪問吧!)瀏覽器

而阿里雲的文檔服務器

https://help.aliyun.com/knowledge_detail/6563505.html?spm=0.0.0.0.UOtUEjsession

HTTP和HTTPS都能訪問到WEB內容,也就是說ROOT根目錄是一致的,負載均衡

那。。我但願訪問HTTP的時候跳轉到HTTPSdom

因此個人NGINX配置爲阿里雲

server {
    listen 80;
    server_name domain.com www.domain.com;
    rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
    access_log  logs/domain.com.80.log access;
}
server {
    listen 8080;
    server_name www.domain.com domain.com;
    if ($host != 'www.domain.com' ) 
     {
      rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
     }加密

 

還有一種方法,主要都是爲了不循環重定向的窘態-。-

SLB上:

HTTPS 443 --> HTTP 443

http 80 --> http 80  

NGINX配置

server {
    listen 80;
    server_name domain.com www.domain.com;
    rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
    access_log  logs/domain.com.80.log access;
}
server {
    listen 443;
    server_name www.domain.com domain.com;
    if ($host != 'www.domain.com' ) 
     {
      rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
     }

這下你們有點了解了不?若是按照阿里雲的SLB配置文檔

https://help.aliyun.com/knowledge_detail/6563505.html?spm=0.0.0.0.UOtUEj

配置成  https 443 --> http 80

             http 80 --> http 80 (這是必須的嘛!)

那就會反覆重定向了。。

另外,SLB前端協議若是是HTTPS,那隻須要把證書放到阿里雲上,ECS後端WEB就不須要配置證書相關信息了。反之,若是SLB前端協議是TCP,那就須要在ECS後端WEB配置SSL信息。

還有,前端是HTTP,後端是HTTPS,則會提示 The plain HTTP request was sent to HTTPS port 

這裏講一下,若是使用TCP該怎麼跳轉!

ECS作負載均衡須要用戶作額外的配置嗎?

對於添加到負載均衡實例後端的ECS,原則上不須要進行特別的配置。若是針對關聯到負載均衡4層(TCP協議)服務的Linux系統的ECS,若是發現沒法正常訪問,須要確保系統配置文件/etc/sysctl.conf的如下三項爲0:

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0

若是部署在同一內網網段下的ECS之間有通訊需求,且發現有沒法通訊的狀況存在,那麼須要檢查以下參數的配置是否正確:

net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.all.arp_announce =2

並使用sysctl –p更新配置。

咳咳,而後SLB配置:

TCP 80 --> TCP 80

TCP 443 --> TCP 443

NGINX配置:

server {
    listen 80;
    server_name domain.com www.domain.com;
    rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
    access_log  logs/domain.com.80.log access;
}
server {
    listen 443;
    server_name www.domain.com domain.com;
    if ($host != 'www.domain.com' ) 
     {
      rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
     }

        ssl                  on;
        ssl_certificate      ssl/domain.crt;
        ssl_certificate_key  ssl/domain.key;
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  10m;
        ssl_prefer_server_ciphers   on;
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers          HIGH:!aNULL:!MD5;
        keepalive_timeout    70;

完成!

最後,可能有的網友不會加證書。

一、建立證書,名字寫域名吧;證書類型服務器證書;證書區域對應

二、證書內容,就是你的CRT文件內容;有中間鏈的會有好幾個

-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

三、證書私鑰,須要注意觀察,若是你的文件內容是這樣的內容

-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----

須要轉換,由於阿里雲SLB須要的是這種格式

-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----

在KEY文件路徑下,把生成的PEM文件內容複製到私鑰的框框裏

openssl rsa -in domain.com.key -out domain.com.pem

最後的最後

若是咱們申請的SSL證書是標準版通配符  生成CSR的時候須要填寫*.domain.com;

GODADDY證書購買有必定期限去開通,開通才開始算時間。

相關文章
相關標籤/搜索