超文本傳輸協議(HTTP)是用於傳輸諸如HTML的超媒體文檔的應用層協議。javascript
它被設計用於Web瀏覽器和Web服務器之間的通訊,但它也能夠用於其餘目的。 HTTP遵循經典的客戶端-服務端模型,客戶端打開一個鏈接以發出請求,而後等待它收到服務器端響應。 HTTP是無狀態協議,意味着服務器不會在兩個請求之間保留任何數據(狀態)。該協議雖然一般基於TCP / IP層,但能夠在任何可靠的傳輸層上使用;也就是說,一個不會像UDP協議那樣靜默丟失消息的協議。RUDP做爲UDP的可靠的升級版本,是一種合適的替代選擇。php
超文本傳輸安全協議(HyperText Transfer Protocol Secure,縮寫:HTTPS;常稱爲HTTP over TLS、HTTP over SSL或HTTP Secure)是一種經過計算機網絡進行安全通訊的傳輸協議。css
HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密數據包。HTTPS開發的主要目的,是提供對網站服務器的身份認證,保護交換數據的隱私與完整性。這個協議由網景公司(Netscape)在1994年首次提出,隨後擴展到互聯網上。html
歷史上,HTTPS鏈接常常用於萬維網上的交易支付和企業信息系統中敏感信息的傳輸。在2000年代末至2010年代初,HTTPS開始普遍使用,以確保各種型的網頁真實,保護帳戶和保持用戶通訊,身份和網絡瀏覽的私密性。vue
另外,還有一種安全超文本傳輸協議(S-HTTP)的HTTP安全傳輸實現,可是HTTPS的普遍應用而成爲事實上的HTTP安全傳輸實現,S-HTTP並無獲得普遍支持。java
HTTPS的主要做用是在不安全的網絡上建立一個安全信道,並可在使用適當的加密包和服務器證書可被驗證且可被信任時,對竊聽和中間人攻擊提供合理的防禦。node
HTTPS的信任基於預先安裝在操做系統中的證書頒發機構(CA)。所以,到一個網站的HTTPS鏈接僅在這些狀況下可被信任:nginx
超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,若是攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就能夠直接讀懂其中的信息,所以HTTP協議不適合傳輸一些敏感信息,好比信用卡號、密碼等。 爲了解決HTTP協議的這一缺陷,須要使用另外一種協議:安全套接字層超文本傳輸協議HTTPS。爲了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密。 HTTPS和HTTP的區別主要爲如下四點:git
HTTP 在傳輸層之上,是依靠於 TCP 鏈接的。也就是說先創建起 TCP 鏈接,創建好鏈接以後雙方之間才能傳輸數據。也就是說,想按照規定的格式傳輸數據,就須要先創建 TCP 鏈接。那 TCP 鏈接是怎麼創建起來的呢。github
TCP 鏈接的三次握手:
向對方發送一個創建鏈接的請求。咱們在瀏覽器上輸入了要訪問的網站地址以後,瀏覽器會向 DNS 服務器請求這個域名對應的 IP 地址,拿到 IP 地址就至關於知道了對方的位置。咱們就能夠向他發送一個創建鏈接的請求,同時本身也作好了要創建鏈接的「準備」。
回覆客戶端的請求。對方機器一直在等待着其餘人跟本身創建鏈接,等啊等,忽然收到了你要創建鏈接的請求,興奮不已,馬上回復你,說:我收到了你要創建鏈接的請求啦,我也準備好要創建鏈接啦。
你收到這個消息以後必定要回復它,說:好的,我知道你也作好了創建鏈接的準備啦,我們開始發送數據吧。
爲何必定要回復他呢,由於他不肯定你是否收到了他的確認請求,若是你不回覆,他會覺得你這個創建請求的消息是假的,是過時了的,就不會創建鏈接。當他收到你的回覆以後,就明確的知道了你確實要創建鏈接,也知道了你準備好了鏈接的創建,再以後就能夠按照 HTTP 的格式傳輸數據了。在這個過程當中的第三步時,就是你發送確認消息的那個數據包中,能夠將須要傳輸的數據一併塞進去的。在重複一次,你先發一個創建鏈接的請求,他接收後回覆一個收到,創建吧,你收到他的回覆,在向他回覆一個知道啦。這時,大家之間 TCP 鏈接就已經創建好了。接下來,你就能夠按照 HTTP 向他發送請求,好比說要某一個圖片,他收到請求後就會給你發過來一個圖片,固然,大家之間是明文傳輸的。
那 HTTPS 是如何創建鏈接的呢,怎麼商量好加密密碼的呢?HTTPS 同 HTTP 同樣,首先創建起 TCP 鏈接,可是創建好以後並非當即發出請求,索要具體的資源,而是先和對方商量加密的密碼。商量的加密密碼的過程就是創建 TSL 鏈接的過程。其實並無創建真實的鏈接,只是在剛剛創建好的 TCP 鏈接上,包裹上一層加密協議而已。可是也被形象的稱做鏈接創建。
具體創建方式以下:
個人nginx版本是:nginx version: nginx/1.10.3 (Ubuntu)
個人nginx目錄結構,nginx安裝
feihong@iZuf69ng9hibpqjrdkb660Z:/etc/nginx$ ls
cert fastcgi_params mime.types scgi_params snippets
conf.d koi-utf nginx.conf sites-available uwsgi_params
fastcgi.conf koi-win proxy_params sites-enabled win-utf
複製代碼
個人服務器是阿里雲的,那就從阿里雲的雲盾中得到SSL證書
點擊購買證書
選擇免費型DV SSL
點擊當即購買
返回控制檯能夠看見一個未簽發的證書,申請簽發
填寫申請和驗證信息(申請經過要等一會時間)
經過後,證書已簽發
下載證書
兩個證書分別是*.pem和*.key
打開兩個證書後,發現裏面都是密鑰
*.key: 證書的私鑰文件
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAi1M5kieXbIDTCJwyWWif8g/JCEpwOv2m2nyHPa32j4GtQgAV
2Vc7osTG/rx2UFkmin2RWT8Lb13UQe3vKEvZi0HcXH1ef8MVymyR/M1H8+D9mQ5q
……
rtClNTkCgYB18MoPDYFFp8lcMFL4joIcmQTgRlZN7ZYwj0TEa+e2UemqkrxN8XyO
P5xniOvmacFt3SxoDLjQoVOmmS1B0QdXP24y+b1+vIfG8ZQ3grNU0Nq2PyXRe7TR
CaGaIY+5DXwoPjzPvfbWKIuMwthyAeyddW4XzO9/9c2Ugrr0s6AWkQ==
-----END RSA PRIVATE KEY-----
~
複製代碼
*.pem:是證書文件
-----BEGIN CERTIFICATE-----
MIIFnTCCBIWgAwIBAgIQBLNEzXnEO46h+mG3ixM+AzANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
……
1/MtB1NyBlHxBrJQJVKxOLiS/4rzjV3UsQvOz5maM5gBzd3/NPIIU/gBIeK4vgSk
1w==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
……
sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy
rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg==
複製代碼
登陸阿里雲,找到安全組,添加規則,給443端口開放對外訪問權限(不要像我是的,最後出現問題的根源就是這個)。
在/etc/nginx/cert/
中放置下載來的兩個證書文件
從nginx.conf中咱們能夠發現其導入了/etc/nginx/conf.d/*.conf
和/etc/nginx/sites-enabled/*
這說明須要在這兩處將server寫進去,固然分開最好,避免耦合
在/etc/nginx/conf.d/
文件夾中的default.conf文件,就是寫一些http的服務
在/etc/nginx/sites-enabled/
的文件夾下寫一些https的服務
# nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
複製代碼
在sites-available中添加qiufeihong.top文件
ssl_certificate和ssl_certificate_key將兩個證書文件導入
前者服務是https
後者是http,重定向會https
# qiufeihong.top
server {
listen 443 ssl;
server_name www.qiufeihong.top;
ssl on;
ssl_certificate /etc/nginx/cert/2476067_www.qiufeihong.top.pem;
ssl_certificate_key /etc/nginx/cert/2476067_www.qiufeihong.top.key;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:7777;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
}
}
server {
listen 80;
server_name www.qiufeihong.top;
rewrite ^(.*)$ https://$host$1 permanent;
}
複製代碼
而且,須要將conf.d
文件夾中的default.conf
中的關於博客的配置的代碼將其刪除,不然nginx重啓配置時,會報兩個同名服務的錯誤。
server
{
listen 80;
server_name www.qiufeihong.top;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:7777;
}
}
複製代碼
創建軟連接
sudo ln sites-available/qiufeihong.top sites-enabled/qiufeihong.top
複製代碼
在sites-enabled中就能看到qiufeihong.top
sudo nginx -t
sudo nginx -s reload
複製代碼
登陸網站出現了一把關閉的鎖
最後,別忘了給這個項目點一個star哦,謝謝支持。
一個學習編程技術的公衆號。天天推送高質量的優秀博文、開源項目、實用工具、面試技巧、編程學習資源等等。目標是作到我的技術與公衆號一塊兒成長。歡迎你們關注,一塊兒進步,走向全棧大佬的修煉之路