LNMP架構(五)

一 Nginx負載均衡

    一臺代理服務器代理多臺web服務器就能夠構成負載均衡php

一、查詢某個域名綁定的幾個IP
     首先可使用如下方法查看某個域名對應的IPhtml

    # yum install -y bind-utils    //若是沒有安裝dig命令,須要先安裝前端

    # dig qq.com   //查詢qq.com這個域名綁定的IPlinux

     # dig ask.apelearn.com   //查詢ask.apelearn.com這個域名綁定的IPnginx

    也可使用如下方法查看某個域名對應的IPweb

    # ping qq.com  //此處反饋的IP不一樣於前面反饋的IP,算法

    # ping ask.apelearn.comvim

    在上面的實驗中咱們查詢到qq.com的兩個IP,下面的實驗中咱們就使用這兩個IP來做爲nginx負載均衡服務器的後端鏈接的WEB服務器IPwindows

二、建立並編輯負載均衡服務器配置文件後端

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

        在上述配置文件中加入如下內容:

upstream qq  //這裏使用到了upstream模塊,後面的內容中能夠定義多個web服務器ip,qq是upstream的名字,能夠隨便起
{
    ip_hash;   //使同一個用戶始終保持在一個IP上,不然可能出現同一用戶在不一樣服務器登錄情況不一致的狀況
    server 61.135.157.156:80;   //端口 80時,80能夠省略
    server 14.17.32.211;
}
server
{
    listen 80;
    server_name www.qq.com;
    location /
    {
        proxy_pass      http://qq;   //這裏的qq應寫的是IP,但由於有多個IP,所以使用的是upstream模塊後面跟的名字qq
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

三、加載前的對比測試

    咱們來測試下,在配置文件生效前咱們訪問www.qq.com的結果

    # curl -x127.0.0.1:80 www.qq.com

       能夠看到訪問的結果是訪問到了咱們本身服務器上的默認頁面

四、檢查語法錯誤並從新加載配置文件

    # /usr/local/nginx/sbin/nginx -t

    # /usr/local/nginx/sbin/nginx -s reload

五、再次測試驗證

    如今咱們再來訪問www.qq.com,能夠看到結果成功訪問到了qq.com

    # curl -x127.0.0.1:80 www.qq.com

六、注意點

     nginx不支持代理https,也就是說使用nginx做代理服務器時,不能訪問後端web服務器的443端口,若是遇到前端用戶使用https訪問時,能夠在代理服務器配置訪問web服務器的80端口

二 ssl原理

    給數據加密,以防在傳輸過程被人抓包後盜取信息,若是加密的話,即便被抓包也解密不了

一、請求

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

二、證書

    服務器要有一套數字證書,能夠本身製做(後面的操做就是阿銘本身製做的證書),也能夠向組織申請,區別就是本身頒發的證書須要客戶端驗證經過,才能夠繼續訪問,而使用受信任的公司申請的證書則不會彈出>提示頁面,這套證書其實就是一對公鑰和私鑰;  公鑰用於加密,私鑰用於解密

三、傳輸公鑰

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

四、瀏覽器驗證公鑰合法性並生成隨機數串

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

五、傳輸隨機字符串

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

六、加密數據

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

七、傳輸數據

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

八、解密數據

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

三 生產ssl密鑰對

    咱們這裏在本機制做一個密鑰對

一、安裝openssl

        #  yum install -y openssl-1.0.2k-8.el7.x86_64    //安裝openssl命令的包

        # rpm -qf `which openssl`   //若是安裝過的,也能夠查看openssl命令是由哪一個包安裝的

        

二、切換目錄

    # cd /usr/local/nginx/conf/          //咱們將密鑰對存放到這個目錄下

三、生成私鑰

    # openssl genrsa -des3 -out tmp.key 2048    

    上述命令表達的意思是生成rsa格式的生成長度爲204八、名字爲tmp.key的私鑰

    而後輸入密碼就生成私鑰成功

四、取消密碼

    生成密鑰必須要指定密碼,可是使用密碼很麻煩,咱們不能在nginx配置文件中指定密碼,每次在瀏覽器中輸入密碼不現實,所以須要去掉密碼,

    # openssl rsa -in tmp.key -out lijie.key   //-in指定被轉換的密鑰文件,-out指定轉換後輸出的密鑰文件,其實轉換先後的文件內容是同樣的,只是轉換前有密碼,轉換後沒有密碼

五、刪除帶密碼的密鑰文件

    # rm -f tmp.key

六、生成證書請求文件

    生成證書請求文件,須要拿這個文件和私鑰一塊兒生產公鑰文件

    # openssl req -new -key lijie.key -out lijie.csr

要求輸入如下信息:

七、生成公鑰

    利用上一步生成的證書請求文件來生成公鑰

    # openssl x509 -req -days 365 -in lijie.csr -signkey lijie.key -out lijie.crt

    上述命令表示,證書有效期1年,這裏的lijie.crt就是公鑰

    下面咱們能夠查詢到目前爲止已經有3個文件了

四 Nginx配置SSL

一、建立虛擬主機的配置文件

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

    在配置文件中加入如下內容:

server

{

    listen 443;

    server_name lijie.com;

    index index.html index.php;

    root /data/wwwroot/lijie.com;

    ssl on;  //開啓ssl,支持https

    ssl_certificate lijie.crt;   //指定公鑰

    ssl_certificate_key lijie.key;    //指定私鑰

    ssl_protocols TSLv1 TSLv1.1 TSLv1.2;   //指定協議

}

二、建立lijie.com域名對應的目錄

    # mkdir /data/wwwroot/lijie.com;

三、從新編譯nginx使其支持ssl

    當咱們來測試-t語法錯誤時,提示第七行的ssl找不到對應的位置:

    這是由於咱們再編譯安裝nginx時沒有指定支持ssl,只指定了很是簡單的安裝路徑,以下圖:

    這時咱們就須要從新編譯nginx的源碼包

    首先切換到nginx源碼包目錄下

    # cd /usr/local/src/nginx-1.12.1

    隨後咱們能夠查看下包含ssl參數的模塊有哪些

    # ./configure --help |grep -i ssl

    其中--with-http_ssl_module就是咱們須要加上的模塊,接下來咱們就來從新編譯安裝nginx

    # ./configure --prefix=/usr/local/nginx --with-http_ssl_module

    # make

    # make install

四、檢查語法錯誤

    # /usr/local/nginx/sbin/nginx -t

五、重啓nginx服務

    由於從新編譯安裝過nginx,全部須要重啓一下nginx服務

    # /etc/init.d/nginx   restart

六、檢查ssl監聽的端口

    # netstat -lntp   //能夠看到443端口已經被監聽

    

七、建立測試文件

    # vim /data/wwwroot/lijie.com/index.html

    在文件中加入如下內容

八、測試驗證

    # curl -x127.0.0.1:443 https://lijie.com/ 

    以上這種方法訪問是不對的,若是要直接訪問,須要像如下這樣操做

    # vim /etc/hosts   //在hosts配置文件中加入下圖一行

    # curl https://lijie.com/        //    應該使用這種方式訪問

  上面提示證書不可信任是由於咱們的證書是本身頒發的,但其實是配置成功了的,咱們能夠在windows上來實驗一下

    首先須要在windows的host文件中配置,查找host配置文件的路徑爲C:\Windows\System32\drivers\etc\hosts  並在配置文件中加入虛擬機的IP 及配置ssl訪問的網站域名

    而後在linux中配置iptables打開443端口的防火牆

    # iptables -I INPUT -p tcp --dport 443 -j ACCEPT

    或者清空防火牆規則# iptables -F

    如今咱們到瀏覽器輸入網站https://lijie.com便可訪問到網站內容,若是瀏覽器出現連接不安全,就須要咱們收到點擊信任連接,便可訪問到網站,以下圖:

    以上是經過咱們本身生成證書來訪問的狀況,在實際生產環境中,咱們須要去申請權威證書,好比沃通

  

推薦連接 針對請求的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.htm

相關文章
相關標籤/搜索