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>80><span> ServerName www.myapp1.com #对应的域名,负载均衡的服务器地址 DocumentRoot E:\soft\xampp\htdocs\www.myapp1.com #代码文件夹 </span></virtualhost> <virtualhost>8080><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教程有興趣的朋友有所幫助。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器