首頁 後端開發 php教程 centos+nginx從零開始配置負載平衡

centos+nginx從零開始配置負載平衡

Aug 08, 2016 am 09:30 AM
com nbsp nginx

nginx負載平衡的理解

nginx是一個輕量級的、高效能的webserver,他主要可以做下面兩件事:

  • 作為http伺服器(和apache的效果一樣)
  • 作為反向代理伺服器實現負載平衡

現在nginx到處都可以見到,經常會看到宕機後的網頁會顯示nginx的字樣,這也說明nginx由於高性能、使用配置簡、開源單這些特點被越來越多的用戶所接受,所使用。

其中第一種作為http伺服器,結合php-fpm進程,對發來的請求進行處理,nginx本身並不會解析php,他只是作為一個伺服器,接受客戶端發來的請求,如果是php請求,則交給php進程處理,並將php處理完成之後的結果傳送給客戶端。這個很簡單,安裝好nginx+php-fpm之後配置好各自的設定文件,啟動就可以實現。運作原理可以看下面這段解釋:

Nginx不支援對外部程式的直接呼叫或解析,所有的外部程式(包括PHP)必須透過FastCGI介面來呼叫。 FastCGI介面在Linux下是socket(這個socket可以是檔案socket,也可以是ip socket)。為了呼叫CGI程序,還需要一個FastCGI的wrapper(wrapper可以理解為用於啟動另一個程式的程式),這個wrapper綁定在某個固定socket上,例如連接埠或檔案socket。當Nginx將CGI請求發送給這個socket的時候,透過FastCGI接口,wrapper接收到請求,然後派生出一個新的線程,這個線程調用解釋器或者外部程序處理腳本並讀取返回數據;接著,wrapper再將傳回的資料透過FastCGI接口,沿著固定的socket傳遞給Nginx;最後,Nginx將傳回的資料傳送給客戶端。這就是Nginx+FastCGI的整個運作過程,如圖下圖所示。

上面這段話解釋了nginx+fastcgi的運行機制,在nginx配置文件中會對請求進行匹配,並作做出相應的處理,比如說直接返回錯誤文件(這裡和上面說的有點區別,我估計是nginx內部對html等這些靜態檔案可以做類似上圖的解析),使用php進程對php請求進行處理(這裡的php進程可以是多個)。

第二種是用反向代理事項負載均衡,這個其實其實很簡單,說起來就是自己定義一組server,對請求進行匹配,並將請求轉給server中的任意一個處理,來減輕每個server的壓力,先看看網路上對反向向代理的定義:

反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果傳回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。

反向代理是和正向代理(或叫代理) 相反的,代理大家定聽過吧,為了更方便的訪問B資源,透過A資源間接的訪問B資源,特點就是用戶知道自己最終要訪問的網站是什麼,但是反向代理用戶是不知道代理伺服器後邊做了什麼處理的,反向代理中服務真正的處理伺服器放在內網,對外網而言只可以訪問反向代理伺服器,這也大大提高了安全性。

安裝軟體

nginx安裝很簡單

1、安裝nginx所需的環境,pcre(作用rewrite)、zlib(作用壓縮)、ssl,這個也可以自己下載編譯安裝

yum -y install zlib;

yum –y install pcre;

yum –y install openssl;

2、下載安裝nginx-*.tar.gz。

tar –zxvf nginx-1.2.8.tar.gz –C ./;

cd nginx-1.2.8;

./congigure --prefix=/usr/local/nginx;

make && make install;

3、配置

這裡配置的時候只需要修改http{}之間的內容就行了,修改的第一個地方就是設定伺服器組,在http節點之間加入

upstream myServer{
        server www.myapp2.com:80;  #這裡是你自己要做負載平衡的伺服器位址1
        server www.myapp1.com:8080 #       server www.myapp1.com:8080 # 

nginx中的upstream支援下面幾種方式:輪詢(默認,按照時間順序對所有伺服器一個一個的訪問,如果有伺服器宕機,會自動剔除)、weight(伺服器的方位幾率和weight成正比,這個可以在伺服器配置不均的時候進行設定)、ip_hash(對每個請求的ip進行hash計算,並按照一定的規則分配對應的伺服器)、fair(按照每台伺服器的回應時間(rt)來分配請求,rt曉得優先分配)、url_hash(按照訪問url的hash值來分配請求),我這裡使用了預設的輪訓方式。

將請求指向myServer

location / {
         proxy_pass   http://myServer;
     }

完整的文件(刪除註解)如下:

worker_processes  <span>1</span><span>;
events {
    worker_connections  </span><span>1024</span><span>;
}
http {
    include       mime.types;
    default_type  application</span>/octet-<span>stream;
    sendfile        on;
    keepalive_timeout  </span><span>65</span><span>;
    upstream myServer{
       server www.myapp1.com:</span><span>80</span><span>;
       server www.myapp2.com:</span><span>8080</span><span>;
    }
    server {
        listen       </span><span>80</span><span>;
        server_name  my22;
        location </span>/<span> {
            proxy_pass   http:</span><span>//</span><span>myServer;</span>
<span>        }
    }
}</span>
登入後複製

設定反向代理後端作為負載平衡的兩個伺服器

可以看到上一步驟有兩個伺服器位址,www.myapp1.com:80和www.myapp2.com:8080,上面的nginx我是安裝在虛擬機器上面的,這兩台伺服器我是安裝在本機win8系統中的,使用apache的virtualhost,設定了兩個域名,這兩個域名下的代碼是互相獨立的,設定也很簡單:

1、設定apache設定檔

我使用的是xampp整合環境,要修改的地方有兩個,在httpd.conf中監聽埠的地方加入

Listen 8080

也就是說這個地方監聽了兩個連接埠

Listen 80
     Listen 8080

看看下面這個句是否打開,沒有打開的話,打開,打開如下面所示

<span># Virtual hosts
Include conf</span>/extra/httpd-vhosts.conf
登入後複製

在httpd-vhosts.conf中加入下面的內容,

<VirtualHost *:<span>80</span>><span>
    ServerName www.myapp1.com #对应的域名,负载均衡的服务器地址
    DocumentRoot E:\soft\xampp\htdocs\www.myapp1.com #代码文件夹
</span></VirtualHost>
<VirtualHost *:<span>8080</span>><span>
    ServerName www.myapp2.com
    DocumentRoot E:\soft\xampp\htdocs\www.myapp2.com
</span></VirtualHost>
登入後複製

修改windows的hosts文件,追加下面的內容

<span>127.0</span>.<span>0.1</span><span>        www.myapp1.com
</span><span>127.0</span>.<span>0.1</span>        www.myapp2.com
登入後複製

修改linux的/etc/hosts文件,追加下面的內容

<span>192.168</span>.<span>1.12</span><span>        www.myapp1.com #这里前面的地址对应我win8本机的ip地址
</span><span>192.168</span>.<span>1.12</span>        www.myapp2.com
登入後複製

  我在www.myapp1.com:80放了一個檔案index.php【E:softxampphtdocswww.myapp1.comindex.php】

  www.myapp2.com:8080中也放了一個檔案index.php【E:softxampphtdocswww.myapp2.comindex.php】

  文件中的內容基本上相同,只是I'm the myapp2這個地方有區別,一個是myapp1,另一個是myapp2。

  如果你可以在win8瀏覽器中輸入www.myapp1.com:80和www.myapp2.com:8080看到不同的效果

  並且在centos下面看到下面的結果(自己美化了下)說明配置成功了

[root@bogon nginx]# curl www.myapp1.com:<span>80</span><span>
I</span><span>'</span><span>m the myapp1<br>【view】1</span>
[root@bogon nginx]# curl www.myapp2.com:<span>8080</span><span>
I</span><span>'</span><span>m the myapp2<br>【view】1</span>
登入後複製

<?<span>php
</span><span>session_save_path</span>("./"<span>);
</span><span>session_start</span><span>();
</span><span>header</span>("Content-type:text/html;charset=utf-8"<span>);
</span><span>if</span>(<span>isset</span>(<span>$_SESSION</span>['view'<span>])){
    </span><span>$_SESSION</span>['view'] = <span>$_SESSION</span>['view'] + 1<span>;
}</span><span>else</span><span>{
    </span><span>$_SESSION</span>['view'] = 1<span>;
}
</span><span>echo</span> "I'm the myapp2<br>"<span>;
</span><span>echo</span> "【view】{<span>$_SESSION</span>['view']}";
登入後複製

看看效果

  等所有都ok之後可硬透過瀏覽器訪問看看效果

  忘了說了,nginx代理伺服器的位址是http://192.168.1.113,

  瀏覽器輸入http://192.168.1.113/index.php之後,不停的刷新,你會發現,會在

I'm the myapp2、I'm the myapp1

  這兩個頁面之間來回交換,view會沒刷新兩下增加一次,這也證明了前面所說的默認是輪訓的方式,但這裡又有一個比較常見的問題了,當用戶訪問網站時,未做處理的情況下,session會保存在不同的伺服器上(我這裡用兩個不同的資料夾模擬兩台伺服器),session資料可能出現多套,這個問題怎麼解決呢,下篇文章說說這個問題,其實也很簡單。

  本文版權歸作者iforever(luluyrt@163.com)所有,未經作者本人同意禁止任何形式的轉載,轉載文章之後必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。

以上就介紹了centos+nginx從零開始配置負載平衡,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

怎麼解決nginx跨域問題 怎麼解決nginx跨域問題 Apr 14, 2025 am 10:15 AM

解決 Nginx 跨域問題有兩種方法:修改跨域響應頭:添加指令以允許跨域請求,指定允許的方法和頭,以及設置緩存時間。使用 CORS 模塊:啟用模塊並配置 CORS 規則,允許跨域請求、方法、頭和設置緩存時間。

linux怎麼查看nginx是否啟動 linux怎麼查看nginx是否啟動 Apr 14, 2025 pm 12:48 PM

在 Linux 中,使用以下命令檢查 Nginx 是否已啟動:systemctl status nginx根據命令輸出進行判斷:如果顯示 "Active: active (running)",則 Nginx 已啟動。如果顯示 "Active: inactive (dead)",則 Nginx 已停止。

linux怎麼啟動nginx linux怎麼啟動nginx Apr 14, 2025 pm 12:51 PM

在 Linux 中啟動 Nginx 的步驟:檢查 Nginx 是否已安裝。使用 systemctl start nginx 啟動 Nginx 服務。使用 systemctl enable nginx 啟用在系統啟動時自動啟動 Nginx。使用 systemctl status nginx 驗證啟動是否成功。在 Web 瀏覽器中訪問 http://localhost 查看默認歡迎頁面。

nginx怎麼查看運行狀態 nginx怎麼查看運行狀態 Apr 14, 2025 am 11:48 AM

查看 Nginx 運行狀態的方法有:使用 ps 命令查看進程狀態;查看 Nginx 配置文件 /etc/nginx/nginx.conf;使用 Nginx 狀態模塊啟用狀態端點;使用 Prometheus、Zabbix 或 Nagios 等監控工具。

怎麼啟動nginx服務器 怎麼啟動nginx服務器 Apr 14, 2025 pm 12:27 PM

啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP

nginx304錯誤怎麼解決 nginx304錯誤怎麼解決 Apr 14, 2025 pm 12:45 PM

問題的答案:304 Not Modified 錯誤表示瀏覽器已緩存客戶端請求的最新資源版本。解決方案:1. 清除瀏覽器緩存;2. 禁用瀏覽器緩存;3. 配置 Nginx 允許客戶端緩存;4. 檢查文件權限;5. 檢查文件哈希;6. 禁用 CDN 或反向代理緩存;7. 重啟 Nginx。

See all articles