溫馨提示×

溫馨提示×

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

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

Nginx工作模式及代理配置的示例分析

發(fā)布時(shí)間:2022-03-22 13:38:56 來源:億速云 閱讀:196 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Nginx工作模式及代理配置的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、Nginx 的工作模式

1.單進(jìn)程模式

單進(jìn)程模式下,Nginx 啟動(dòng)后只有一個(gè)進(jìn)程,Nginx 的所有工作都由這個(gè)進(jìn)程負(fù)責(zé)。

Nginx工作模式及代理配置的示例分析

優(yōu)點(diǎn):

單進(jìn)程模式由于只有一個(gè)進(jìn)程,因此可以很方便的利用 gdb 等工具進(jìn)行調(diào)試。

缺點(diǎn):

單進(jìn)程模式不支持 Nginx 的平滑升級(jí)功能,任何的信號(hào)處理都可能造成服務(wù)中斷;并且由于是單進(jìn)程,進(jìn)程掛掉后,在沒有外部監(jiān)控的情況下,無法重啟服務(wù)。

不過后面 Nginx 已經(jīng)將 Master-Worker 配置成默認(rèn)的工作模式,所以并不需要擔(dān)心上面的問題。

[root@localhost ~]# ps aux | grep nginx | grep -v grep
root       38395  0.0  0.0 264704  7192 ?        Ss   Dec15   0:00 nginx: master process /usr/local/nginx/sbin/nginx
root     3421689  0.0  0.0 294040 32680 ?        S    Dec24   0:00 nginx: worker process

2.Master-Worker 模式

Nginx 啟動(dòng)后,會(huì)有一個(gè) Master 進(jìn)程和至少一個(gè)的 Worker 進(jìn)程;Master 進(jìn)程主要負(fù)責(zé)處理系統(tǒng)信號(hào),加載配置,管理 Worker 進(jìn)程等操作;而 Worker 進(jìn)程則是負(fù)責(zé)處理具體的業(yè)務(wù)邏輯,也就是說,對(duì)外部來說,真正提供服務(wù)的是 Worker 進(jìn)程。

Nginx工作模式及代理配置的示例分析

優(yōu)點(diǎn): 穩(wěn)定性高,只要還有 Worker 進(jìn)程存活,就能夠提供服務(wù),并且一個(gè) Worker 進(jìn)程掛掉后,Master 進(jìn)程會(huì)立即啟動(dòng)一個(gè)新的 Worker 進(jìn)程,來保證 Worker 進(jìn)程數(shù)量不變,降低服務(wù)中斷的概率;同時(shí) 可以配合 Nginx 的 CPU 親和,來充分利用多核 CPU 的優(yōu)勢,提升性能。

3.問題處理

前兩天博主在啟動(dòng) Nginx 的時(shí)候,是沒有問題的,但是在訪問時(shí)就不行,當(dāng)時(shí)通過查看端口號(hào),發(fā)現(xiàn)端口是存在的,后面使用 ps 看進(jìn)程,發(fā)現(xiàn)只有一個(gè) master 進(jìn)程(master 進(jìn)程不會(huì)對(duì)外提供服務(wù)),最后通過查看 error.log 日志發(fā)現(xiàn):

是因?yàn)槭褂玫牡谌侥S袉栴},導(dǎo)致 Worker 進(jìn)程并未啟動(dòng)。

處理方案的話有兩種: 第一個(gè)就是將第三方模塊在配置中進(jìn)行移除,第二個(gè)就是對(duì)第三方模塊進(jìn)行修復(fù)。

二、Nginx 代理配置

這里博主 主要介紹:Nginx 配置文件中 / 的作用,別看這個(gè)一個(gè)小小的符號(hào),他的作用可以說 關(guān)乎到系統(tǒng)是否可以正常提供服務(wù)。

Nginx 配置文件中 / 的作用,主要體現(xiàn)在 proxy_pass 的配置上。

準(zhǔn)備工作:

[root@PengYuYan ~]# yum -y install nginx
[root@PengYuYan ~]# cat <<END > /etc/nginx/conf.d/Server_80.conf
server {
    listen 80;
    server_name 127.0.0.1;
    root /usr/share/nginx/html;
    index index.html;

    location /ZhangSan/ {
        proxy_pass http://127.0.0.1:8080;
    }
    location /PengYuYan/ {
        proxy_pass http://127.0.0.1:8080/;
    }
}
END
[root@PengYuYan ~]# mkdir /usr/share/nginx/html/ZhangSan
[root@PengYuYan ~]# echo "This is 127.0.0.1:80 ZhangSan" > /usr/share/nginx/html/ZhangSan/index.html
[root@PengYuYan ~]# mkdir /usr/share/nginx/html/PengYuYan
[root@PengYuYan ~]# echo "This is 127.0.0.1:80 PengYuYan" > /usr/share/nginx/html/PengYuYan/index.html
[root@PengYuYan ~]# cat <<END > /etc/nginx/conf.d/Server_8080.conf
server {
    listen 8080;
    server_name 127.0.0.1;
    root /www/html;
    index index.html;

    location / {
    }
    location /ZhangSan/ {
    }
    location /PengYuYan/ {
    }
}
END
[root@PengYuYan ~]# mkdir -p /www/html
[root@PengYuYan ~]# echo "This is 127.0.0.1:8080 /" > /www/html/index.html
[root@PengYuYan ~]# mkdir /www/html/ZhangSan
[root@PengYuYan ~]# echo "This is 127.0.0.1:8080 ZhangSan" > /www/html/ZhangSan/index.html
[root@PengYuYan ~]# mkdir /www/html/PengYuYan
[root@PengYuYan ~]# echo "This is 127.0.0.1:8080 PengYuYan" > /www/html/PengYuYan/index.html

下面的那些 location,你們是不需要重新配置的,因?yàn)樯厦娴呐渲煤拖旅鎸?duì)應(yīng)。

1.帶 /

location /PengYuYan/ {
    proxy_pass http://127.0.0.1/8080/;
}

驗(yàn)證:curl 127.0.0.1/PengYuYan/

Nginx工作模式及代理配置的示例分析

這里博主來分解一下:

我們 curl 127.0.0.1/PengYuYan/ 中的 PengYuYan 其實(shí)就是我們 80 端口的 location 配置,并不是 8080 端口上的配置;

而我們正好又在 proxy_pass 代理的后面增加了個(gè) /,就導(dǎo)致我們實(shí)際上訪問的是 curl 127.0.0.1:8080/;

也就是說,我們要是如上配置,想要訪問到 8080 端口的 PengYuYan,則需要 curl 127.0.0.1/PengYuYan/PengYuYan/。

2.不帶 /

location /PengYuYan/ {
    proxy_pass http://127.0.0.1/8080/;
}

驗(yàn)證:

Nginx工作模式及代理配置的示例分析

這個(gè)其實(shí)很好理解,因?yàn)槲覀儧]有在 proxy_pass 后面增加 /,所以 Nginx 會(huì)自動(dòng)將 location 的目錄放到 proxy_pass 后面。

總結(jié):

當(dāng)我們的 proxy_pass 代理后面有 / 時(shí),它并不會(huì)將 location 配置的目錄加進(jìn)去;

而當(dāng)我們的代理后面沒有加 / 時(shí),Nginx 便會(huì)將 location 的目錄放到 proxy_pass 后面。

1) 在帶有目錄的情況下加 /(修改原來的 Server_80.conf 文件即可)

location /PengYuYan/ {
    proxy_pass http://127.0.0.1/8080/;
}

驗(yàn)證:

Nginx工作模式及代理配置的示例分析

2) 在帶有目錄的情況下不加 /

location /ZhangSan/ {
    proxy_pass http://127.0.0.1/8080/ZhangSan;
}

驗(yàn)證:curl 127.0.0.1/ZhangSan/,在我們的配置上,實(shí)際上是訪問的 curl 127.0.0.1:8080/ZhangSan/ZhangSan/

Nginx工作模式及代理配置的示例分析

其實(shí)啊,不管是有目錄和沒目錄,都和博主上面總結(jié)的一樣。主要還是 Nginx 中的 / 在作怪。

以上是“Nginx工作模式及代理配置的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(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)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI