Nginx負載均衡

  • Nginx負載均衡php

  • dig qq.com命令能夠解析域名html

  • 若是沒有dig命令,安裝命令yum install -y bind-utilslinux

  • vim /usr/local/nginx/conf/vhost/load.conf/ (寫入如下)nginx

  • upstream qq.com
  • {
  • Ip_hash;
  • Server 61.135.157.156:80;
  • Server 127.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_tor;
  • }
  • }
  • upstream來指定多個web serverweb

  • curl 127.0.0.1:80 www.qq.com算法

  • Nginx不支持代理https也就是說不支持443端口,能夠支持http和tcpvim

  • ssl原理瀏覽器

  • ssl工做流程安全

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

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

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

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

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

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

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

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

  • SSL協議的工做流程:

  • 服務器認證階段:

  • 1)客戶端向服務器發送一個開始信息「Hello」以便開始一個新的會話鏈接;

  • 2)服務器根據客戶的信息肯定是否須要生成新的主密鑰,如須要則服務器在響應客戶的「Hello」信息時將包含生成主密鑰所需的信息;

  • 3)客戶根據收到的服務器響應信息,產生一個主密鑰,並用服務器的公開密鑰加密後傳給服務器;

  • 4)服務器恢復該主密鑰,並返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器。

  •  用戶認證階段:

  • 在此以前,服務器已經經過了客戶認證,這一階段主要完成對客戶的認證。經認證的服務器發送一個提問給客戶,客戶則返回(數字)簽名後的提問和其公開密鑰,從而向服務器提供認證。

  • (SET協議:爲網上信用卡支付提供了全球性的標準。)

  •  

  • SSL協議的握手過程:

  • SSL 協議既用到了公鑰加密技術(非對稱加密)又用到了對稱加密技術,SSL對傳輸內容的加密是採用的對稱加密,而後對對稱加密的密鑰使用公鑰進行非對稱加密。這樣作的好處是,對稱加密技術比公鑰加密技術的速度快,可用來加密較大的傳輸內容, 公鑰加密技術相對較慢,提供了更好的身份認證技術,可用來加密對稱加密過程使用的密鑰。

  •       SSL 的握手協議很是有效的讓客戶和服務器之間完成相互之間的身份認證,其主要過程以下:

  •   ①客戶端的瀏覽器向服務器傳送客戶端 SSL 協議的版本號,加密算法的種類,產生的隨機數,以及其餘服務器和客戶端之間通信所須要的各類信息。

  •   ②服務器向客戶端傳送 SSL 協議的版本號,加密算法的種類,隨機數以及其餘相關信息,同時服務器還將向客戶端傳送本身的證書。

  •   ③客戶利用服務器傳過來的信息驗證服務器的合法性,服務器的合法性包括:證書是否過時,發行服務器證書的 CA 是否可靠,發行者證書的公鑰可否正確解開服務器證書的「發行者的數字簽名」,服務器證書上的域名是否和服務器的實際域名相匹配。若是合法性驗證沒有經過,通信將斷開;若是合法性驗證經過,將繼續進行第四步。

  •   ④用戶端隨機產生一個用於後面通信的「對稱密碼」,而後用服務器的公鑰(服務器的公鑰從步驟②中的服務器的證書中得到)對其加密,而後將加密後的「預主密碼」傳給服務器。 

  •   ⑤若是服務器要求客戶的身份認證(在握手過程當中爲可選),用戶能夠創建一個隨機數而後對其進行數據簽名,將這個含有簽名的隨機數和客戶本身的證書以及加密過的「預主密碼」一塊兒傳給服務器。

  •   ⑥若是服務器要求客戶的身份認證,服務器必須檢驗客戶證書和簽名隨機數的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,爲客戶提供證書的CA 是否可靠,發行CA 的公鑰可否正確解開客戶證書的發行 CA 的數字簽名,檢查客戶的證書是否在證書廢止列表(CRL)中。檢驗若是沒有經過,通信馬上中斷;若是驗證經過,服務器將用本身的私鑰解開加密的「預主密碼 」,而後執行一系列步驟來產生主通信密碼(客戶端也將經過一樣的方法產生相同的主通信密碼)。

  •   ⑦服務器和客戶端用相同的主密碼即「通話密碼」,一個對稱密鑰用於 SSL 協議的安全數據通信的加解密通信。同時在 SSL 通信過程當中還要完成數據通信的完整性,防止數據通信中的任何變化。

  •   ⑧客戶端向服務器端發出信息,指明後面的數據通信將使用的步驟⑦中的主密碼爲對稱密鑰,同時通知服務器客戶端的握手過程結束。

  •   ⑨服務器向客戶端發出信息,指明後面的數據通信將使用的步驟⑦中的主密碼爲對稱密鑰,同時通知客戶端服務器端的握手過程結束。

  •   ⑩SSL 的握手部分結束,SSL 安全通道的數據通信開始,客戶和服務器開始使用相同的對稱密鑰進行數據通信,同時進行通信完整性的檢驗。

  •  

  • 雙向認證 SSL 協議的具體過程

  •   ① 瀏覽器發送一個鏈接請求給安全服務器。 

  •   ② 服務器將本身的證書,以及同證書相關的信息發送給客戶瀏覽器。 

  •   ③ 客戶瀏覽器檢查服務器送過來的證書是不是由本身信賴的 CA 中心所簽發的。若是是,就繼續執行協議;若是不是,客戶瀏覽器就給客戶一個警告消息:警告客戶這個證書不是能夠信賴的,詢問客戶是否須要繼續。

  •   ④ 接着客戶瀏覽器比較證書裏的消息,例如域名和公鑰,與服務器剛剛發送的相關消息是否一致,若是是一致的,客戶瀏覽器承認這個服務器的合法身份。 

  •  

  •   ⑤ 服務器要求客戶發送客戶本身的證書。收到後,服務器驗證客戶的證書,若是沒有經過驗證,拒絕鏈接;若是經過驗證,服務器得到用戶的公鑰。 

  •   ⑥ 客戶瀏覽器告訴服務器本身所可以支持的通信對稱密碼方案。

  •   ⑦ 服務器從客戶發送過來的密碼方案中,選擇一種加密程度最高的密碼方案,用客戶的公鑰加過密後通知瀏覽器。

  •   ⑧ 瀏覽器針對這個密碼方案,選擇一個通話密鑰,接着用服務器的公鑰加過密後發送給服務器。

  •   ⑨ 服務器接收到瀏覽器送過來的消息,用本身的私鑰解密,得到通話密鑰。 

  •   ⑩ 服務器、瀏覽器接下來的通信都是用對稱密碼方案,對稱密鑰是加過密的。

  • 生成ssl密鑰對

  • 將公鑰私鑰放在/usr/local/nginx/conf/

  • cd /usr/local/nginx/conf/

  • openssl genrsa -des3 -out tmp.key 2048(key文件爲私鑰)

  • 該私鑰須要生成密碼,可是太過麻煩因此如下取消該設置密碼

  • openssl rsa -in tmp.key -out aminglinux(名稱隨意命名).key(轉換key,取消密碼)

  • rm -f tmp.key

  • openssl req -new -key aminglinux.key -out aminglinux.csr(生成證書請求文件,須要那這個文件和私鑰一塊兒產生公鑰文件)

  • openssl x509 -req -days 365 -in aminglinux.csr -singkey aminglinux.key -out aminglinux.crt

  • 這裏的aminglinux.crt爲公鑰,key爲私鑰。

  • Nginx配置ssl(該證書爲本身頒發的測試證書)

  • vim /usr/local/nginx/conf/vhost/ssl.conf/ (加入如下)

  • {
  • 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;
  • }
  • -t && -s reload(若報錯unknown directive 「ssl」 ,須要從新編譯nginx,加上--with-http_ssl_module 。

  • cd /usr/local/nginx/sbin/nginx -V

  • ./comfigure --prefix=/usr/local/nginx --with-http_ssl_module)

  • mkdir /data/wwwroot/aming.com

  • echo 「ssl test page.」 >/data/wwwroot/aming.com/index.html

  • 編輯hosts ,增長127.0.0.1 aming.com

  • curl https://aming.com/

  • Php-fpm的pool

  • vim /usr/local/php/etc/php-fpm.conf(在[global]部分增長)

  • include=etc/php-fpm.d/*.conf

  • mkdir /usr/local/php/etc/php-fpm.d/

  • cd /usr/local/php/etc/php-fpm.d/

  • cd /usr/local/php/etc/php-fpm.d/

  • vim www.conf (內容以下)

  • [www]

  • listen=/tmp/www.sock

  • losten.mode=666

  • user=php-fpm

  • group=php-fpm

  • pm.max_children=50

  • pm.start_servers=20

  • pm.min_spare_servers=5

  • pm.max_spare_servers=35

  • pm.max_requests=500

  • rlimit_files=1024

  • /usr/local/php-fpm/sbin/php-fpm -t

  • /etc/init.d/php-fpm reload

  • Php-fpm慢執行日誌

  • vim /usr/local/php-fpm/etc/php-fpm.d/www.conf(加入如下)

  • request_slowlog_timeout=1

  • slowlog=/usr/local/php-fpm/var/log/www-slow.log

  • /usr/local/php-fpm/sbin/php-fpm -t

  • /etc/init.d/php-fpm reload

  • Ls /usr/local/php-fpm/var/log/(查看是否生成www-slow-log)

  • 配置nginx的虛擬主機test.com.conf ,把unix:/tmp/php-fcgi.sock改成unix:/tmp/www.sock

  • 從新加載nginx服務

  • vim /data/wwwroot/test.com/sleep.php(寫入如下)

  • <?php

  • echo 「test slow log」;

  • sleep(2);

  • #要求sleep執行2秒

  • echo 「done」;

  • ?>

  • curl -x127.0.0.1:80 test.com/sleep.php

  • cat /usr/local/php-fpm/var/log/www-slow.log

  • Open_basedir

  • Php-fpm定義open_basedir

  • vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf(加入如下)

  • Php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/

  • /etc/init.d/php-fpm restart

  • curl -x127.0.0.1:80 test.com/sleep.php

  • 建立測試php腳本,進行測試

  • 再次更改aming.conf,修改路徑,再次測試

  • 配置錯誤日誌

  • 再次測試

  • 查看錯誤日誌

  • Php-fpm進程管理

  • m = dynamic (動態進程管理,也能夠是static)

  • pm.max_chilidren = 50 (最大子進程數,ps aux能夠查看)

  • pm.start_servers = 20 (啓動服務時會啓動的進程數)

  • pm.min_spare_severs = 5 (定義在空閒時段,子進程數的最大值,若是高於這個數值時,php-fpm服務會自動派生新的子進程)

  • pm.max_spare_servers = 35 (定義在空閒時段,子進程數的最大值,若是高於這個數值就開始清理空閒的子進程)

  • pm.max_requests = 500 (定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多能夠處理這麼多請求,當達到這個數值時,它會自動退出)

相關文章
相關標籤/搜索