上游服務器的設置
server { #監聽的IP及端口 listen 127.0.0.1:8080; #虛擬主機對硬解析的主機名 #server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #所有的此虛擬主機匹配的請求都到chenxi此網頁目錄下 location / { alias chenxi/; #set $limit_rate 1; #autoindex on; # index index.html index.htm; }
代理服務服務器的設置
upstream cx { server 127.0.0.1:8080; 定義上游服務器組 } server { listen 80; #server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_set_header Host $host; 向上游服務器傳變量 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-F $proxy_add_x_forwarded_for; #proxy_cache my_cache; #proxy_cache_key $host$uri$is_args$args; #proxy_cache_valid 200 304 302 1d; proxy_pass http://cx; 代理后端服務器 }
啟動兩個nginx服務
../sbin/nginx 代理啟動 nginx -s reload
緩存的配置
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; #server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-F $proxy_add_x_forwarded_for; proxy_cache my_cache; 緩存共享內存 proxy_cache_key $host$uri$is_args$args; 用戶傳瀏覽器傳來的單獨key和一些參數定義 proxy_cache_valid 200 304 302 1d; proxy_pass http://cx; } ../sbin/nginx -s reload
圖解ssl加密流程
工作與tcp/IP 七層模型的網絡層
加密套件
對稱加密算法與非對稱加密算法
對稱加密算法
具體實現
非對稱加密
證書的公信如何得到保障
證書組成部分
證書鏈
ssl 通信過程
HTTPS采用混合加密算法,即共享秘鑰加密(對稱加密)和公開秘鑰加密(非對稱加密)。
通信前准備工作:
A、數字證書認證機構的公開秘鑰(CA公鑰)已事先植入到瀏覽器里;
B、數字證書認證機構用自己的私有密鑰對服務器的公開秘鑰做數字簽名,生成公鑰證書,並頒發給服務器。
1、client hello
握手第一步是客戶端向服務端發送 Client Hello 消息,這個消息里包含了一個客戶端生成的隨機數 Random1、客戶端支持的加密套件(Support Ciphers)和 SSL Version 等信息。
2、server hello
服務端向客戶端發送 Server Hello 消息,這個消息會從 Client Hello 傳過來的 Support Ciphers 里確定一份加密套件,這個套件決定了后續加密和生成摘要時具體使用哪些算法,另外還會生成一份隨機數 Random2。注意,至此客戶端和服務端都擁有了兩個隨機數(Random1+ Random2),這兩個隨機數會在后續生成對稱秘鑰時用到。
3、Certificate
這一步是服務端將自己的公鑰證書下發給客戶端。
4、Server Hello Done
Server Hello Done 通知客戶端 Server Hello 過程結束。
5、Certificate Verify
客戶端收到服務端傳來的公鑰證書后,先從 CA 驗證該證書的合法性(CA公鑰去解密公鑰證書),驗證通過后取出證書中的服務端公鑰,再生成一個隨機數 Random3,再用服務端公鑰非對稱加密 Random3生成 PreMaster Key。
6、Client Key Exchange
上面客戶端根據服務器傳來的公鑰生成了 PreMaster Key,Client Key Exchange 就是將這個 key 傳給服務端,服務端再用自己的私鑰解出這個 PreMaster Key 得到客戶端生成的 Random3。至此,客戶端和服務端都擁有 Random1 + Random2 + Random3,兩邊再根據同樣的算法就可以生成一份秘鑰,握手結束后的應用層數據都是使用這個秘鑰進行對稱加密。為什么要使用三個隨機數呢?這是因為 SSL/TLS 握手過程的數據都是明文傳輸的,並且多個隨機數種子來生成秘鑰不容易被破解出來。
nginx傳輸小文考研的是非對稱加密性能;處理大文件時考慮的是對稱加密算法的性能
構建https站點
在openResty中填加lua代碼
location /cx { default_type text/html; content_by_lua ' ngx.say("Usre-Agent: ", ngx.req.get_headers()["User-Agent"]) ';# 表示取出客戶端瀏覽類型內核,在構建http響應報文時添加到響應頭里,返回給用戶 } [root@nginx conf]# ../sbin/nginx -t nginx: the configuration file /home/openresty/nginx/conf/nginx.conf syntax is ok nginx: configuration file /home/openresty/nginx/conf/nginx.conf test is successful ../sbin/nginx -s reload