1. 程式人生 > >nginx負載均衡,

nginx負載均衡,

nginx負載均衡 配置個人SSL

代理服務器後面有多個web服務器
技術分享圖片
upstream 模塊
dig 命令 域名解析
技術分享圖片
編輯新配置文件
ip_hash 同一個用戶保持在一個機器上
技術分享圖片
不支持去代理https
ssl 原理
技術分享圖片
https 是加密的傳輸
每次傳輸都是隨機的
生成SSL密鑰對
技術分享圖片
生成密鑰
技術分享圖片
轉換key 去掉密鑰密碼
-in 指定密鑰 -out 指定輸出
技術分享圖片
生成請求文件 名字可以自己定義
技術分享圖片
生成公鑰文件 -days 證書日期
技術分享圖片
配置nginx ssl
技術分享圖片
編輯新配置文件 監聽端口443
技術分享圖片
創建root 目錄
技術分享圖片
檢測語法 報錯
技術分享圖片
重新編譯 需要ssl_module
技術分享圖片
加上ssl_module &&make&& make install
技術分享圖片
重新檢測語法沒有報錯
技術分享圖片
重新啟動服務 查看端口多了一個443
技術分享圖片
在root 目錄下創建文件
技術分享圖片
證書被標記為不可信任
技術分享圖片
提示訪問不安全
技術分享圖片
沃通電子認證買證書

場景:1臺nginx去代理4臺apache
需求:根據不同的請求uri 代理到不同的apache

nginx的配置文件為:

  1. upstream aa.com {
  2. server 192.168.0.121;
  3. server 192.168.0.122;
  4. }
  5. upstream bb.com {
  6. server 192.168.0.123;
  7. server 192.168.0.124;
  8. }
  9. server {
  10. listen 80;
  11. server_name www.abc.com;
  12. location ~ aa.php
  13. {
  14. proxy_pass http://aa.com/;
  15. proxy_set_header Host $host;
  16. proxy_set_header X-Real-IP $remote_addr;
  17. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18. }
  19. location ~ bb.php
  20. {
  21. proxy_pass http://bb.com/;
  22. proxy_set_header Host $host;
  23. proxy_set_header X-Real-IP $remote_addr;
  24. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  25. }
  26. }

nginx代理--根據訪問的目錄來區分後端的web
我的需求: 當請求的目錄是 /aaa/ 則把請求發送到機器a,當請求的目錄為/bbb/則把請求發送到機器b,除了目錄/aaa/與目錄/bbb/外,其他的請求發送到機器b

配置文件內容為:

  1. upstream aaa.com
  2. {
  3. server 192.168.111.6;
  4. }
  5. upstream bbb.com
  6. {
  7. server 192.168.111.20;
  8. }
  9. server {
  10. listen 80;
  11. server_name li.com;
  12. location /aaa/
  13. {
  14. proxy_pass http://aaa.com/aaa/;
  15. proxy_set_header Host $host;
  16. proxy_set_header X-Real-IP $remote_addr;
  17. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18. }
  19. location /bbb/
  20. {
  21. proxy_pass http://bbb.com/bbb/;
  22. proxy_set_header Host $host;
  23. proxy_set_header X-Real-IP $remote_addr;
  24. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  25. }
  26. location /
  27. {
  28. proxy_pass http://bbb.com/;
  29. proxy_set_header Host $host;
  30. proxy_set_header X-Real-IP $remote_addr;
  31. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  32. }
  33. }
    說明:
    1 以上配置文件中的 aaa.com 以及 bbb.com 都是自定義的,隨便寫。
    2 upstream 中的server 可以寫多個,例如

upstream aaa.com
{
server 192.168.111.6;
server 192.168.111.4;
server 192.168.111.5;
}

3 proxy_pass http://aaa.com/aaa/ 這裏必須要加這個目錄,不然就訪問到根目錄了。
4 實際上,上述配置文件中, localtion /bbb/ 部分是可以省略掉的,因為後邊的 location / 已經包含了/bbb/,所以即使我們不去定義 localtion /bbb/ 也是會訪問到 bbb.com 的。
nginx 代理多臺機器 長連接(會話保持)解決問題
網站使用程序 discuzx3 訪問都正常,只有用戶登陸存在異常,具體的情況是這樣的:
用戶登陸後,會馬上顯示未登陸,然後刷新一下或者多下又變成了登陸中。
這個問題很顯然是由於session導致,後臺有多個web機器,當用戶登陸後,會把登陸態session保存到當前web,但是再次發送請求時則會到另一臺機器,所以原來的session信息找不到了。解決這個問題有兩個思路:

  1. 可以把session時時同步到另外的機器。
  2. 可以讓前端的調度器保持長連接,也就是說某個用戶的請求在某一時間段內始終抓發到固定的一臺機器上。
    這兩種方式,第二種更容易實現。
    使用的是nginx的代理,其中nginx有一種算法支持長連接,具體配置是這樣的:

    1. upstream test {
    2. ip_hash;
    3. server 192.168.109.5;
    4. server 192.168.109.3;
    5. }
      關鍵代碼: ip_hash
      這樣,nginx會把用戶的請求一直轉發到後端的某臺機器

    http://blog.sina.com.cn/s/blog_72995dcc01016msi.html

nginx負載均衡,