8月份要把處事遷移到青云上,認(rèn)真搭建 HTTPS 處事的Daniel苦惱兩天有余,設(shè)置 HTTPS 時一直陳訴下述問題:
400 Bad Request
The plain HTTP request was sent to HTTPS port
這個問題是我們實驗在云處事上搭建 HTTPS 時呈現(xiàn)的,要清楚復(fù)述這個問題有點巨大,列位直接移步看 stackoverflow 上的 Dealing with nginx 400 “The plain HTTP request was sent to HTTPS port” error 這個例子吧,相信你會有許多收獲。
以下這段會輔佐你領(lǐng)略其實質(zhì):
The error says it all actually. Your configuration tells Nginx
to listen on port 80 (HTTP) and use SSL. When you point your
browser to http://localhost, it tries to connect via HTTP. Since
Nginx expects SSL, it complains with the error.
HTTPS: HTTP over TLS, HTTP over SSL, and HTTP Secure.
簡樸地說,HTTPS 就是在一條由 SSL/TLS 加密的毗連(connection)上傳輸HTTP數(shù)據(jù),目標(biāo)是防備HTTP內(nèi)容被偷聽和改動。
換言之,HTTPS在一個不安詳?shù)木W(wǎng)絡(luò)上建設(shè)了一個安詳通道。
HTTP數(shù)據(jù)有一個加密息爭密的進(jìn)程。領(lǐng)略了這一點你就領(lǐng)略了在云上設(shè)置的兩種方案。
無他,就是為了防備內(nèi)容被改動。
必然要熟悉nginx的設(shè)置,不然,你會處處亂搜辦理要領(lǐng),不是猜疑這兒配錯了,就是猜疑那兒配錯了。
有兩個方案可以實現(xiàn)HTTPS處事。方案一就是由負(fù)載平衡器(LB = Load Balancer)來實現(xiàn),方案二由后端WebServer來實現(xiàn)。
方案一:LB實現(xiàn)
請憑據(jù)青云的 搭建 HTTPS 協(xié)議的負(fù)載平衡器指南 的要求舉辦 HTTPS 協(xié)議搭建。因為我們利用路由器,環(huán)境有些許差異,要點:
LB設(shè)置HTTPS
將你的處事器證書的“證書內(nèi)容” 和 “私鑰”配好,監(jiān)聽HTTPS協(xié)議,443端口。
路由器設(shè)置
在路由器大將443映射到后端的80端口(HTTP)。
后端nginx設(shè)置
這里只需要設(shè)置HTTP處事即可,因為解密數(shù)據(jù)的任務(wù)由LB包袱了,這里自然不需要設(shè)置HTTPS了。
注:Daniel就是折在這里了,,他在路由器里將443映射到后端的443 ssl,路由器過來的數(shù)據(jù)已經(jīng)解密了,已經(jīng)是plain HTTP request,還要發(fā)送到HTTPS port(443)上,雖然就會 complain with the error了。
青云HTTPS處事的兩種設(shè)置方案
方案二:后端WebServer實現(xiàn)
LB設(shè)置TCP
監(jiān)聽TCP協(xié)議,443端口。
路由器設(shè)置
在路由器大將443映射到后端的443端口(HTTPS)。
后端nginx設(shè)置
憑據(jù)尺度的HTTPS處事舉辦設(shè)置。如下:
server {
listen 80;
listen 443 ssl;
server_name c.example.com;
ssl_certificate /usr/local/nginx/conf/app/example/example.crt;
ssl_certificate_key /usr/local/nginx/conf/app/example/example.key;
root /home/app/c.example.com/;
location ~ \\.(htm|html)$ {
add_header Cache-Control no-store;
expires -1;
}
location / {
index index.html;
}
access_log /home/logs/c.example.com/access.log access;
error_log /home/logs/c.example.com/error.log info;
}
相對付“原始的nginx設(shè)置”的改造:
80和443在一個 server 內(nèi)里即可(保持簡樸性、一致性)。
index里的index.php刪除,因為網(wǎng)站基礎(chǔ)不提供php處事。(不應(yīng)有的對象一點都不要有,保持簡樸、簡捷)
順序調(diào)解(加強可領(lǐng)略性)。
附:原始的nginx設(shè)置
原始的nginx設(shè)置
請記著盡大概利用谷歌搜索處事。
優(yōu)先查閱以下網(wǎng)站:
我們利用https的初心是防備HTTP內(nèi)容被改動,因為做正常CPS業(yè)務(wù)的導(dǎo)航網(wǎng)站常碰著被混混推廣者強行改動內(nèi)容從而挾制流量舉辦跳轉(zhuǎn)的環(huán)境。
跳轉(zhuǎn)地點:http://c.example.com => https://c.example.com。
協(xié)議切換
zz
js 認(rèn)真跳轉(zhuǎn),js 文件中雷同語句https://c.example.com/shopid.html?uid=,個中https即指明利用https協(xié)議。
js文件位于www網(wǎng)站/$version/toolbar/js/toolbar.js。當(dāng)前3.7和3.9版本在正常維護(hù)。
sm
由軟件提供跳轉(zhuǎn),需要修改設(shè)置文件 unionmap.xml,軟件重啟后會下載該設(shè)置文件的 zip 包(2015-09-07)。
該設(shè)置文件在 http://click.example.com/admin 靠山的商城打點下生成,當(dāng)下僅點擊生成新的商城同盟映射表即可,其他無需操縱。