一臺代理服務器代理多臺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端口
給數據加密,以防在傳輸過程被人抓包後盜取信息,若是加密的話,即便被抓包也解密不了
一、請求
瀏覽器發送一個https的請求給服務器;
二、證書
服務器要有一套數字證書,能夠本身製做(後面的操做就是阿銘本身製做的證書),也能夠向組織申請,區別就是本身頒發的證書須要客戶端驗證經過,才能夠繼續訪問,而使用受信任的公司申請的證書則不會彈出>提示頁面,這套證書其實就是一對公鑰和私鑰; 公鑰用於加密,私鑰用於解密
三、傳輸公鑰
服務器會把公鑰傳輸給客戶端;
四、瀏覽器驗證公鑰合法性並生成隨機數串
客戶端(瀏覽器)收到公鑰後,會驗證其是否合法有效,無效會有警告提醒,有效則會生成一串隨機數,並用收到的公鑰加密;
五、傳輸隨機字符串
客戶端把加密後的隨機字符串傳輸給服務器;
六、加密數據
服務器收到加密隨機字符串後,先用私鑰解密(公鑰加密,私鑰解密),獲取到這一串隨機數後,再用這串隨機字符串加密傳輸的數據(該加密爲對稱加密,所謂對稱加密,就是將數據和私鑰也就是這個隨機字符串>經過某種算法混合在一塊兒,這樣除非知道私鑰,不然沒法獲取數據內容);
七、傳輸數據
服務器把加密後的數據傳輸給客戶端;
八、解密數據
客戶端收到數據後,再用本身的私鑰也就是那個隨機字符串解密;
咱們這裏在本機制做一個密鑰對
一、安裝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個文件了
一、建立虛擬主機的配置文件
# 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