12.17-12.20 Nginx負載均衡,ssl原理,生成ssl密鑰對,Nginx配置ssl


12.17 Nginx負載均衡

12.18 ssl原理

12.19 生成ssl密鑰對

12.20 Nginx配置ssl


擴展 

針對請求的uri來代理 http://ask.apelearn.com/question/1049

根據訪問的目錄來區分後端的web http://ask.apelearn.com/question/920

nginx長連接 http://www.apelearn.com/bbs/thread-6545-1-1.html

nginx算法分析 http://blog.sina.com.cn/s/blog_72995dcc01016msi.html


12.17 Nginx負載均衡

代理1臺Web服務器稱爲代理

代理2臺Web服務器稱爲負載均衡

nginx代理不支持https解析


1 域名解析qq.com的ip

利用dig工具查看(yum install -y bind-utils)

image.png


2 負載均衡配置如下,

# vim /usr/local/nginx/conf/vhost/load.conf 

upstream qq_com
{
    ip_hash;
    server 61.135.157.156:80;
    server 125.39.240.113:80;
}
server
{
    listen 80;
    server_name www.qq.com;
    location /
    {
        proxy_pass      http://qq_com;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

配置解釋:

藉助模塊upstream,

proxy_pass不支持定義多個ip,proxy_pass後面跟的就是upstream的名字。

upstream proxy_pass後面接的都是名字,而不是主要域名。

主要域名,ip參數是此三項

server_name www.qq.com;
server 61.135.157.156:80;
server 125.39.240.113:80;

ip_hash;

ip_hash 目的 同一個用戶始終保留在同一臺機器上。

它表示根據ip地址把請求分到不同的服務器上。

比如用戶A的ip是1.1.1.1,用戶B的IP是2.2.2.2,則A訪問的時候會把請求轉發到第一個Web服務器上,

B訪問的時候會到第二個Web服務器上。

ip_hash 下面可以定義多個ip,格式是ip:port


3 curl 測試(未重新加載前,配置未生效。)

[root@AliKvn vhost]# curl -x127.0.0.1:80 www.qq.com

this is a default site.

未配置的時候,從本機訪問www.qq.com的時候是訪問本機的默認網站。

4 檢查語法,並重新加載。

[root@AliKvn vhost]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@AliKvn vhost]# /usr/local/nginx/sbin/nginx -s reload

5 curl測試,通過訪問,顯示網頁代碼,狀態碼200.

image.png



12.18 ssl原理



HTTP與HTTPS的區別:

HTTPS是一種加密的HTTP協議,如果HTTP通信的數據包在傳輸過程中被截獲,我們可以破譯這些數據包的信息,

這裏面可能會有一些用戶名,密碼,手機登敏感信息。如果使用HTTPS通信,即使數據包被截獲,也無法破譯裏面的內容。


SSL的原理工作流程圖

image.png

文字解釋SSL工作流程

1 瀏覽器發送一個https的請求給服務器;

2 服務器要有一套數字證書,可以自己製作(後面的操作就是阿銘自己製作的證書),也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,纔可以繼續訪問,而使用受信任的公司申請的證書則不會彈出>提示頁面,這套證書其實就是一對公鑰和私鑰;

3 服務器會把公鑰傳輸給客戶端;

4 客戶端(瀏覽器)收到公鑰後,會驗證其是否合法有效,無效會有警告提醒,有效則會生成一串隨機數,並用收到的公鑰加密;

5 客戶端把加密後的隨機字符串傳輸給服務器;

6 服務器收到加密隨機字符串後,先用私鑰解密(公鑰加密,私鑰解密),獲取到這一串隨機數後,再用這串隨機字符串加密傳輸的數據(該加密爲對稱加密,所謂對稱加密,就是將數據和私鑰也就是這個隨機字符串>通過某種算法混合在一起,這樣除非知道私鑰,否則無法獲取數據內容);

7 服務器把加密後的數據傳輸給客戶端;

8 客戶端收到數據後,再用自己的私鑰也就是那個隨機字符串解密;

https的工作原理就是反覆給數據執行公鑰與私鑰的加密解密的過程。


12.19 生成ssl密鑰對

1 進入/conf目錄

[root@AliKvn vhost]# cd /usr/local/nginx/conf/

2 使用openssl工具生成私鑰文件,定義密碼 .key爲私鑰文件

[root@AliKvn conf]# openssl genrsa -des3 -out tmp.key 2048

3 轉換key,取消密碼。因爲密碼每次加密解密都輸入密碼過於頻繁,此處刪除密碼。

[root@AliKvn conf]# openssl rsa -in tmp.key -out aminglinux.key

Enter pass phrase for tmp.key:

writing RSA key

4  刪除tmp.key

[root@AliKvn conf]#rm -f tmp.key

5 生成證書請求文件csr,需要拿這個文件和私鑰一起生產公鑰文件。

[root@AliKvn conf]# openssl req -new -key aminglinux.key -out aminglinux.csr

image.png

生成crt文件

[root@AliKvn conf]# openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt

[root@AliKvn conf]# ls aminglinux.*

aminglinux.crt  aminglinux.csr  aminglinux.key

這裏的aminglinux.crt爲公鑰

6 有了.csr .crt文件後,可以配置ssl了



12.20 Nginx配置ssl


1 配置ssl.conf

 #vim /usr/local/nginx/conf/vhost/ssl.conf

server
{
    listen 443;
    server_name aming.com;
    index index.html index.php;
    root /data/wwwroot/aming.com;
    ssl on;
    ssl_certificate aminglinux.crt;
    ssl_certificate_key aminglinux.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}


配置解釋:

ssl on; 

開啓ssl

ssl_certificate aminglinux.crt

指定公鑰

ssl_certificate_key aminglinux.key;

指定私鑰

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

協議,一般三種都需要配置上。



2 檢查語法

[root@AliKvn vhost]# /usr/local/nginx/sbin/nginx -t

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/ssl.conf:7

nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

第七行報錯提示,unknown ssl,因爲當初編譯沒有把ssl給編譯進去,所以需要重新編譯,加上--with-http_ssl_module

image.png

2.1 編譯操作:

[root@AliKvn nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module

[root@AliKvn nginx-1.8.0]# make && make install

2.2 -V檢查編譯參數

[root@AliKvn nginx-1.8.0]# /usr/local/nginx/sbin/nginx -V

image.png

2.3 再次檢查語法

[root@AliKvn nginx-1.8.0]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

3 重啓nginx

[root@AliKvn nginx-1.8.0]# /etc/init.d/nginx restart

Restarting nginx (via systemctl):                          [  OK  ]

4 檢查listen端口

80和443端口都已經被listen

image.png

5 建立目錄和測試文件

[root@AliKvn aming.com]# mkdir /data/wwwroot/aming.com/

[root@AliKvn aming.com]# echo "ssl test" > /data/wwwroot/aming.com/index.html

[root@AliKvn aming.com]# ls

index.html

[root@AliKvn aming.com]# cat index.html 

ssl test

6 在hosts寫入aming.com

[root@AliKvn aming.com]#vim /etc/hosts

127.0.0.1 aming.com

7 curl測試

image.png

證書被標記爲不可信用,因爲證書是自己創建的,不合法的。

8 在windows瀏覽器訪問(如果發現訪問不到,可以檢查防火牆,iptables規則,或者建立開通443端口規則

在windows編輯hosts文件,添加aming.com進去

8.1 在瀏覽器輸入https://aming.com 進行訪問

image.png


8.2 因爲這是自己的測試,所以站點的信任性是透明的,繼續前往訪問,點擊 1 高級 2 繼續前往

image.png


8.3 訪問發現當初echo的頁面信息,正常訪問效果。

image.png

當然,這只是測試使用,利用https訪問時,證書是被標註未信任的。如果想利用https正常訪問,需要購買證書。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章