激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - Nginx - 關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

2022-03-02 21:49三國(guó)夢(mèng)回 Nginx

這篇文章主要給大家介紹了關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí),文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

 

前言

nginx的虛擬主機(jī),不知道大家了解不。以前吧,如果在nginx上要反向代理多個(gè)服務(wù),我一般是讓nginx監(jiān)聽多個(gè)不同端口,比如8080/8081,不同端口,反向代理到不同的服務(wù)。

server {
	listen 9981 so_keepalive=on;
	proxy_pass service1;
}

server {
	listen 9982 so_keepalive=on;
	proxy_pass service2;
}

來了現(xiàn)在公司,發(fā)現(xiàn)這邊是基于域名(端口都是80)來反向代理到不同服務(wù),如下:

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

基于以上的nginx配置,域名a和b,分別代表了系統(tǒng)a和系統(tǒng)b,實(shí)際dns是指向同一臺(tái)nginx機(jī)器。當(dāng)你用域名a訪問時(shí),就會(huì)走上面的配置;域名b訪問時(shí),就會(huì)走下面的配置。

 

對(duì)線上配置的一個(gè)小疑問

 

問題背景

我的一位同事,和我差不多時(shí)間入職,接手了一個(gè)幾年前的系統(tǒng),看到線上環(huán)境的nginx配置,表示有點(diǎn)懵,不知道how it works。

這里把這個(gè)問題,簡(jiǎn)單描述下。

為了方便我這邊模擬,假設(shè)機(jī)器ip為10.0.0.6,機(jī)器上有個(gè)python腳本,會(huì)去訪問一個(gè)api:http://10.0.0.6:80 。

機(jī)器上的/etc/hosts如下:

[root@VM-0-6-centos nginx]# cat /etc/hosts
......

10.0.0.6 bbbb.com

也就是說,訪問bbbb.com,就相當(dāng)于訪問這臺(tái)機(jī)器了。

[root@VM-0-6-centos nginx]# ping bbbb.com
PING bbbb.com (10.0.0.6) 56(84) bytes of data.

基于以上信息,這個(gè)api訪問本機(jī)的80,是會(huì)到本機(jī)的nginx(nginx監(jiān)聽80端口),nginx配置如下:

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

這個(gè)配置,基于我們對(duì)虛擬主機(jī)的了解,也就是說,訪問aaaa.com,就會(huì)到第一段的配置,aaaa.access.log里面就會(huì)有訪問日志;如果是訪問bbbb.com,就會(huì)到第二段的配置,bbbb.access.log就會(huì)有訪問日志。

但是,客戶端不按套路出牌啊,用的是,10.0.0.6:80/xx這樣的url來訪問該nginx,同時(shí),/etc/hosts里面有配置bbbb.com指向本機(jī),那么,大家覺得最終的訪問結(jié)果如何?

 

實(shí)測(cè)結(jié)果

結(jié)果是,訪問了aaaa那一段。

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

這。。。我們就有點(diǎn)想不通了,沒理由啊,為啥呢,why?不是不能接受結(jié)果,而是不知道為什么會(huì)這樣。

 

探索

 

排查網(wǎng)絡(luò)

按理說,用域名形式訪問,應(yīng)該才會(huì)去查看/etc/hosts文件和dns系統(tǒng),找到域名背后的ip;但是,按ip訪問,貌似java建立里面的socket底層實(shí)現(xiàn)利,也會(huì)有根據(jù)ip去獲取host的代碼(還導(dǎo)致一些超時(shí)問題之類的)。

所以,我們猜測(cè),難道是,訪問10.0.0.6時(shí),查看了/etc/hosts,把10.0.0.6轉(zhuǎn)換成了aaaa.com?但是,/etc/hosts里面只有把10.0.0.6轉(zhuǎn)換為bbbb.com的可能性吧?

本著不管三級(jí)二十一,先抓個(gè)包再說的想法,于是在nginx的80端口,開了個(gè)tcpdump:

[root@VM-0-6-centos ~]# tcpdump -i lo tcp port 80 -Ann

然后再次訪問:

[root@VM-0-6-centos nginx]# curl 10.0.0.6:80

抓包結(jié)果:

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

看到這邊host是 10.0.0.6.

這讓我開始懷疑,可能和/etc/hosts沒什么關(guān)系,問題應(yīng)該變成了:nginx在拿到上面這段http報(bào)文時(shí),為啥要路由到aaaa.com那一段配置里面去。

 

排查nginx

怎么才能知道nginx做了啥呢,我們又沒有代碼,但是,好歹,我們還有shell 命令啊。 strace這個(gè)命令,可以查看一個(gè)進(jìn)程的系統(tǒng)調(diào)用,還是比較好用的。

為啥要查這個(gè)?因?yàn)槲覒岩墒遣皇莕ginx拿到10.0.0.6后,把它轉(zhuǎn)成了域名,不過,轉(zhuǎn)的話,應(yīng)該也是轉(zhuǎn)換為bbbb.com。另外,這個(gè)命令有沒有用,我也不確定,因?yàn)樵撁钪荒芸催@個(gè)進(jìn)程發(fā)起了哪些系統(tǒng)調(diào)用(不是java里的rpc),而是對(duì)內(nèi)核發(fā)起的系統(tǒng)調(diào)用(system call)。萬一,ip轉(zhuǎn)域名的部分,沒有通過系統(tǒng)調(diào)用實(shí)現(xiàn)的話,那這個(gè)命令就失效了。

不過還是試試?

先拿到了nginx的worker進(jìn)程的pid:8845

[root@VM-0-6-centos nginx]# ps -ef|grep nginx
root       610     1  0 12:15 ?        00:00:00 nginx: master process ./nginx
nobody    8845   610  0 13:13 ?        00:00:00 nginx: worker process

再開啟一個(gè)strace:

[root@VM-0-6-centos ~]# strace -p 8845 -s 1024 -q -f -v -e  trace=network

結(jié)果如下:

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

好像只有接收網(wǎng)絡(luò)請(qǐng)求的系統(tǒng)調(diào)用(recvfrom),系統(tǒng)調(diào)用,大家可以拿這個(gè)函數(shù)名去網(wǎng)上查。

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

此時(shí),排查陷入了僵局,于是,我只能提議,我先回座位上找找nginx相關(guān)資料。

然后就開始在網(wǎng)上查,運(yùn)氣也還不錯(cuò),就找到了:

https://docs.nginx.com/nginx/admin-guide/web-server/web-server/

關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)

上面這段話,大概就是說,虛擬主機(jī)的匹配,是通過取req報(bào)文里的host字段,來和nginx.conf中server里的server_name做匹配,

因?yàn)閟erver_name可以是通配符之類的,所以這里有個(gè)優(yōu)先級(jí),完全匹配》模糊匹配。

上圖的最后那幾行,就是關(guān)鍵了:

如果完全沒匹配上(我們這里就是,拿了個(gè)ip來匹配,然而nginx.conf里配置的是aaaa.com和bbbb.com),就會(huì)路由到這個(gè)端口的默認(rèn)server。默認(rèn)server是哪個(gè)呢,就是:nginx.conf里端口為80的、且寫在第一個(gè)的server。

ok,打完收工。

 

總結(jié)

知識(shí)點(diǎn)可能很小,但排查也比較麻煩,因?yàn)榫€上環(huán)境不好動(dòng),然后配置的域名其實(shí)不止兩個(gè),有7/8個(gè),中間繞的路比上面其實(shí)還多一點(diǎn)。

不過這邊的大概思路是這樣的,希望對(duì)大家也有一點(diǎn)點(diǎn)幫助。

原文地址:https://www.cnblogs.com/grey-wolf/p/15939636.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品视频在线 | 91视频观看免费 | 国产一区视频在线免费观看 | 国内精品伊人久久 | 国产流白浆高潮在线观看 | 少妇的肉体的满足毛片 | 18一20岁一级毛片 | 久久区二区 | 性欧美极品xxxx欧美一区二区 | 日韩黄色片在线观看 | 欧美精品成人一区二区在线观看 | 黄片毛片一级 | 毛片网站视频 | 国产外围在线 | 老女人碰碰在线碰碰视频 | 久久96国产精品久久久 | 超碰一区 | 免费观看一级 | 农村寡妇偷毛片一级 | av电影在线免费观看 | 久久久久久久一区二区三区 | 久草经典视频 | 91网页视频入口在线观看 | 久久久www视频 | 精品一区二区三区欧美 | 嗯~啊~弄嗯~啊h高潮视频 | 91免费高清视频 | 日本中文字幕久久 | 一级做a爱片久久毛片a高清 | 91短视频在线观看视频 | 免费一级欧美大片视频 | 黄网站在线播放视频免费观看 | 免费国产不卡午夜福在线 | 免费啪视频在线观看 | 午夜亚洲影院 | 久久天 | 久久国产精品久久久久 | 在线成人影视 | 国产亚洲精品久久777777 | 91女上位 在线播放 bt 自拍 另类 综合 欧美 | 欧美精选一区二区 |