溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

發(fā)布時間:2021-08-09 14:48:32 來源:億速云 閱讀:98 作者:Leah 欄目:服務(wù)器

本篇文章為大家展示了Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

1、網(wǎng)絡(luò)拓?fù)?/strong>

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

2、環(huán)境準(zhǔn)備

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

我們準(zhǔn)備好7臺服務(wù)器,2 臺 MySQL 數(shù)據(jù)庫做高可用,4 臺 Web 服務(wù)器,其中 2 臺裝 Nginx+PHP 做動態(tài)頁面的負(fù)載均衡,另外 2 臺裝  Apache+PHP 做靜態(tài)頁面的負(fù)載均衡,1 臺 Nginx 服務(wù)器,做反向代理服務(wù)器。

至于,服務(wù)器環(huán)境的安裝部署,這里就不進(jìn)行操作了,如有疑問的,可以留言或者查看小弟前面的文章。

3、Nginx 服務(wù)器中 Nginx 服務(wù)配置文件修改

修改 http 部分

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

1、重新定義 Nginx 服務(wù)的日志記錄格式,關(guān)于關(guān)鍵字的釋義,大佬們可以參閱官網(wǎng)。

2、使用 upstream 關(guān)鍵字定義后端服務(wù)器

格式:uptream + 后端節(jié)點(diǎn)組名稱(可自定義)

server + IP地址 + 權(quán)重 + 最大失敗次數(shù) + 失敗超時時間 意思是:當(dāng)后端節(jié)點(diǎn)連續(xù)兩次在3秒內(nèi)無法連接時,將放棄連接該節(jié)點(diǎn),Nginx  將客戶端請求發(fā)送給下一節(jié)點(diǎn)。

修改 server 部分,這里配置為 Nginx 虛擬機(jī)

[root@nginx ~]# vim /wdata/nginx/config/80.conf
Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

1、配置 Nginx location 匹配

分別配置以 .html 、.jpeg 、.jpg 、.gif 、.png 、.php 為擴(kuò)展名的文件的 location 規(guī)則。

proxy_set_header:允許重新定義或添加字段傳遞給代理服務(wù)器的請求頭。該值可以包含文本、變量和它們的組合。在本例中意思將真實(shí)的客戶端地址添加到代理服務(wù)器的請求頭中。

proxy_pass:設(shè)置反向代理的連接,格式為:proxy_pass + http://后端節(jié)點(diǎn)組的名稱; 。

X-Forwarded-For:簡稱 XFF 頭,它代表客戶端,也就是 HTTP 的請求端真實(shí)的 IP ,只有在通過了 HTTP  代理或者負(fù)載均衡服務(wù)器時才會添加該項(xiàng)。

$remote_addr:遠(yuǎn)端地址,也就是客戶端 IP 地址

2、配置站點(diǎn)日志,這里將日志格式指定為我們在 HTTP 部分配置為的 main 規(guī)則。

Nginx 反向代理的配置請參照圖中進(jìn)行修改,其他詳細(xì)的配置參數(shù),請參閱官網(wǎng),后續(xù)繼續(xù)更新。

四、后端 Nginx 服務(wù)節(jié)點(diǎn)配置

后端 Nginx 服務(wù)器節(jié)點(diǎn)主要用來做以 .php 擴(kuò)展名結(jié)尾的站點(diǎn)文件的訪問和圖片文件的訪問,做到將圖片資源單獨(dú)剝離,以降低服務(wù)器負(fù)載。

1、配置以 .php 為擴(kuò)展名的站點(diǎn)服務(wù)器

[root@weba config]# vim 80.conf
Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

如上圖:

a、listen:配置監(jiān)聽端口,這里配置為 80 端口,在生產(chǎn)環(huán)境中,我們可能會配置成 443 端口。

server_name:配置域名,這里是實(shí)驗(yàn)環(huán)境,因此采用默認(rèn)未配置域名。

index:配置支持的文件類型

root:配置全局站點(diǎn)路徑

b、配置局部站點(diǎn)路徑、fastcgi的地址端口(指的是php-fpm的監(jiān)聽地址及端口)、所支持的文件類型等

c、配置日志文件

Nginx 站點(diǎn)的配置大概做到這種配置,基本就可以進(jìn)行訪問,如果在企業(yè)中需要更復(fù)雜的配置,請參考官方文檔。

2、配置單獨(dú)的圖片資源站點(diǎn)

[root@weba config]# vim 81.conf
Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

如上圖:

配置方式跟 1 的配置完全一樣,只是修改一下圖片資源的路徑即可。

WebA 和 WebB 的配置完全一樣。最后修改完配置別忘了刷新,用命令:service nginx reload 即可

五、后端 Apache 服務(wù)節(jié)點(diǎn)配置

1、Apache 服務(wù)節(jié)點(diǎn)的配置基本也跟 Nginx 差不多,我們這里使用命令修改 Apache 配置文件。

[root@webc ~]# sed -i "s#/home/wwwroot/default#/wdata/http/www#g" /usr/local/apache/conf/httpd.conf  [root@webc ~]# sed -i "s#/home/wwwroot/default#/wdata/http/www#g" /usr/local/apache/conf/extra/httpd-vhosts.conf  [root@webc ~]# sed -i "s#/var/log/wwwlogs#/var/log/wwwlogs#g" /usr/local/apache/conf/httpd.conf  [root@webc ~]# sed -i "s#/var/log/wwwlogs#/var/log/wwwlogs#g" /usr/local/apache/conf/extra/httpd-vhosts.conf  [root@webc ~]# sed -i "s#/var/www#/wdata/http/www#g" /usr/local/apache/conf/extra/httpd-vhosts.conf

在 WebC 和 WebD 中分別執(zhí)行,主要設(shè)置網(wǎng)站根目錄和日志目錄。

2、修改 Apache 的端口和監(jiān)聽地址

[root@webc ~]# vim /usr/local/apache/conf/httpd.conf

找到 Listen 行,修改為 0.0.0.0:80

如圖:

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

3、修改 Apache 日志文件格式,方便我們更好閱讀 Apache 日志,也可以保持默認(rèn)。

找到 <IfModule log_config_module> 行,在下面的注釋下面添加

LogFormat "%a - %A %t \"%B\" \"%b\" \"%{Foobar}C\" \"%f\" - %h - %H \"%{Foobar}i\" %m \"%{Foobar}n\" \"%{Foobar}o\" - \"%p\" - \"%P\" %q %r %s \"%T\" \"%u\" \"%U\" \"%v\" \"%V\" %X" main

如圖:

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

至于所添加的參數(shù)的含義,大家可參閱 Apache 官方文檔。

到此 Apache 配置完成,還有一些關(guān)于 Apache 的權(quán)限配置等,這里就先不做特殊說明,后期再做更新。

啟動 httpd 服務(wù):

service httpd start

六、添加或者上傳站點(diǎn)文件

1、在 WebA 中的網(wǎng)站根目錄下添加 index.php 文件,內(nèi)容如下:

<html>  <title>  This is a PHP page  </title>  <body>  Real ServerA<br><br>  <img src="1.jpg" alt="1" height="200" width="200" />  <img src="2.jpg" alt="2" height="200" width="300" />  <img src="3.png" alt="3" height="200" width="200" />  <img src="4.gif" alt=“4" height="200" width="380" /><br><br>  This is a PHP page !<br><br>  </body>  </html>  <?php  $link = new mysqli("192.168.20.150","root","123456");  if(!$link) echo "FAILD!連接錯誤,用戶名密碼不對";  else echo "OK ! MySQL 可以連接。";  $link->close();  ?>

2、在 WebB 中的網(wǎng)站根目錄下添加 index.php 文件,內(nèi)容如下:

<html>  <title>  This is a PHP page  </title>  <body>  Real ServerB<br><br>  <img src="1.jpg" alt="1" height="200" width="200" />  <img src="2.jpg" alt="2" height="200" width="300" />  <img src="3.png" alt="3" height="200" width="200" />  <img src="4.gif" alt=“4" height="200" width="380" /><br><br>  This is a PHP page !<br><br>  </body>  </html>  <?php  $link = new mysqli("192.168.20.150","root","123456");  if(!$link) echo "FAILD!連接錯誤,用戶名密碼不對";  else echo "OK ! MySQL 可以連接。";  $link->close();  ?>

說明:這里,我們并沒有嚴(yán)格按照 PHP 文件的格式來書寫,只是簡單的為了驗(yàn)證負(fù)載均衡和反向代理來書寫的 PHP 文件。

3、在 WebA 和 WebB 的 image(圖片資源目錄) 目錄上傳 1.jpg 、2.jpg 、3.png 、4.gif 文件,如圖:

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

4、在 WebC 的站點(diǎn)根目錄添加 index.html 文件,內(nèi)容如下:

<html>  <title>  This is a HTML page  </title>  <body>  Real ServerC<br><br>  <img src="1.jpg" alt="1" height="200" width="200" />  <img src="2.jpg" alt="2" height="200" width="300" />  <img src="3.png" alt="3" height="200" width="200" />  <img src="4.gif" alt=“4" height="200" width="380" /><br><br>  This is a HTML page !  </body>  </html>

5、在 WebD 的站點(diǎn)根目錄添加 index.html 文件,內(nèi)容如下:

<html>  <title>  This is a HTML page  </title>  <body>  Real ServerD<br><br>  <img src="1.jpg" alt="1" height="200" width="200" />  <img src="2.jpg" alt="2" height="200" width="300" />  <img src="3.png" alt="3" height="200" width="200" />  <img src="4.gif" alt=“4" height="200" width="380" /><br><br>  This is a HTML page !  </body>  </html>

文件添加和上傳完成,下面我們開始驗(yàn)證我們配置的動靜分離和負(fù)載均衡是否成功。

七、驗(yàn)證動靜分離和負(fù)載均衡

1、在瀏覽中打開 http://192.168.20.138/index.php ,效果如下圖:

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡
Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

2、在瀏覽器 http://192.168.20.138/index.html ,效果如下圖:

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡
Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

3、查看 Nginx 負(fù)載均衡器的 Nginx 日志。

訪問 http://192.168.20.138/index.php 日志如下圖:

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

如圖可以看出,當(dāng)我們訪問 http://192.168.20.138/index.php  時,服務(wù)器會將客戶端請求按照我們配置的后端節(jié)點(diǎn)組中的順序或者權(quán)重依次發(fā)給 WebA 和 WebB ,當(dāng)網(wǎng)頁中有圖片請求時,也會按照順序進(jìn)行訪問 WebA 和  WebB 的圖片節(jié)點(diǎn)。

訪問 http://192.168.20.138/index.html 日志如下圖:

Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡

如圖可以看出,當(dāng)我們訪問 http://192.168.20.138/index.html 時,對于 html 的請求,會依次發(fā)給 WebC 和 WebD  節(jié)點(diǎn)服務(wù),而對于圖片資源的訪問,會將請求發(fā)給兩臺圖片服務(wù)器。

上述內(nèi)容就是Nginx 中怎么實(shí)現(xiàn)動靜分離與負(fù)載均衡,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI