06《Nginx 入門教程》Nginx 配置初步(下)

前面的學(xué)習(xí),知道 Nginx 的配置規(guī)則如下:

  • 一行代表一個(gè)指令;
  • 每個(gè)指令有其上下文環(huán)境是嗜,比如 listen 指令只能在 http 指令塊中出現(xiàn),不能單獨(dú)出現(xiàn)挺尾。

下面我們將學(xué)習(xí) Http 服務(wù)的初步配置和靜態(tài)服務(wù)資源配置:

1. Http 服務(wù)配置初步

1.1 常用指令

官方文檔地址中有關(guān)于 Nginx 的所有模塊鹅搪,打開模塊我們就能看到模塊中支持的指令。最常用的指令遭铺,如 http丽柿、server、listen 等都在 ngx_http_core_modul 模塊中魂挂,這個(gè)是 Nginx 的核心模塊甫题。

1.2 listen 指令

  Syntax: listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  Default:
  listen *:80 | *:8000;
  Context:  server

listen 指令的上下文環(huán)境是 server 指令,所以 listen 指令只能出現(xiàn)在 server 指令塊中涂召。此外坠非,listen 指令的作用就是監(jiān)聽上層端口,將對(duì)應(yīng)端口發(fā)來(lái)的請(qǐng)求進(jìn)行攔截并處理果正。官方給了許多 listen 的使用示例:

# 這些寫法要考慮特定的環(huán)境和場(chǎng)景
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

# 比較特殊的用法炎码,針對(duì)unix系統(tǒng)
listen unix:/var/run/nginx.sock;

1.3 http 指令

Syntax: http { ... }
Default: —
Context: main

可以看到 http 指令是指令塊形式,屬于主環(huán)境 main秋泳,它里面的指令是用于設(shè)置 http 相關(guān)參數(shù)的潦闲。比如設(shè)置 server 配置等,配置連接超時(shí)時(shí)間等迫皱。

...

# 主位置歉闰,最左邊
http {
   #指令或者指令塊
   ...
}  

...

1.4 server 指令

Syntax: server { ... }
Default: —
Context: http

這里 server 的上下文環(huán)境是 http,這說(shuō)明 server 指令塊只能出現(xiàn)在http指令塊中,否則會(huì)出錯(cuò)和敬。server 指令塊中也是許多指令的集合凹炸,比如listen指令,表示監(jiān)聽 http 請(qǐng)求的端口概龄,還有 server_name还惠、root、index 等指令私杜。

...

http {
    server {
        # 監(jiān)聽端口
        listen       8089;
        server_name  localhost;

        # 今天資源根路徑
        root /data/yum_source;
        # 打開目錄瀏覽功能
        autoindex on;
        # 指定網(wǎng)站初始頁(yè),找index.html或者index.htm頁(yè)面
        index index.html index.htm;
    }

    ...
}
...


下面我們初步了解下 Nginx 的在一些場(chǎng)景下的配置救欧,使用到的都是一些簡(jiǎn)單的配置指令衰粹。

2. 靜態(tài)服務(wù)資源配置

配置靜態(tài)資源服務(wù)器是非常簡(jiǎn)單的一件事情。實(shí)現(xiàn)靜態(tài)資源訪問(wèn)的關(guān)鍵指令有 root 和 alias笆怠,我們會(huì)做一個(gè)案例來(lái)演示其用法和二者的區(qū)別铝耻。

2.1 案例1

準(zhǔn)備好靜態(tài)資源文件,我們就在 /root/test/ 下新建一個(gè) index.html蹬刷,并新建目錄 web瓢捉,同時(shí)繼續(xù)在 web 目錄下分別新建 web1.html 和 web2.html 文件,具體的目錄結(jié)構(gòu)如下所示:

[root@server ~]# cd /root/test
[root@server test]# tree .
.
├── index.html
└── web
    ├── web1.html
    └── web2.html

1 directory, 3 files

Nginx 的配置如下:

user  root;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;

        # 靜態(tài)資源根理解
        root /root/test;
        # 打開目錄瀏覽功能
        autoindex on;
        # 指定網(wǎng)站初始頁(yè)办成,找index.html或者index.htm頁(yè)面
        index index.html index.htm;
    }

    server {
        listen       8081;

        location /web {
            root /root/test/;
        }
    }

    server {
        listen       8082;

        location /web {
            alias /root/test/;
        }
    }

}


測(cè)試結(jié)果

對(duì)于監(jiān)聽的 8080 端口泡态,我們直接使用 root 指令,指定資源的根路徑迂卢。這樣子某弦,當(dāng)我們?cè)跒g覽器上直接訪問(wèn) http:// 服務(wù)器的 ip:8080/web/web1.html 或者 http://服務(wù)器ip:8080/web/web2.html 時(shí),就能訪問(wèn)對(duì)應(yīng)的 web1.html 和 web2.html 頁(yè)面而克;若沒有指定靜態(tài)資源地址(即/路徑)靶壮,默認(rèn)會(huì)找由 index 指令指定的文件,即 index.html 或者 index.htm 文件员萍;

訪問(wèn) 8080 的/地址

5e4f45690941ce6613660382.png

訪問(wèn)web1.html文件


5e4f4f8e09c7679313660321.png

訪問(wèn)web2.html文件
[圖片上傳失敗...(image-d8dd3f-1643126896663)]

對(duì)于監(jiān)聽的 8081 端口腾降,我們直接使用 root 指令,指定資源的根路徑碎绎。當(dāng)請(qǐng)求 http://服務(wù)器ip:8081/web/xxxx 地址時(shí)螃壤,等價(jià)于訪問(wèn)服務(wù)器上的靜態(tài)資源文件 /root/test/[匹配到的web]/xxxx,也即/root/test/web/xxxx混卵,訪問(wèn) web2.html 類似映穗;

通過(guò) 8081 端口訪問(wèn) web1.html 資源


5e4f4fca09e2ffee13660268.jpg

通過(guò) 8081 端口訪問(wèn)靜態(tài)資源 web2.html


5e4f4fdc0938b40d13650228.png

對(duì)于監(jiān)聽的 8082 端口,我們使用的是 alias 指令幕随,指定資源路徑的別名蚁滋,它與 root 指令略有不同。當(dāng)請(qǐng)求 http://服務(wù)器ip:8082/web/xxxx 地址時(shí),等價(jià)于訪問(wèn)服務(wù)器上的靜態(tài)資源文件 /root/test/xxxx辕录,并不會(huì)將匹配到的web添加到靜態(tài)資源的路徑上睦霎,所有為了能訪問(wèn)到 web1.html,我們需要使用如下的url:http://服務(wù)器ip:8082/web/web/web1.html走诞, 訪問(wèn) web2.html 類似副女。結(jié)果如下:

通過(guò)alias指令訪問(wèn)web1.html

5e4f4ff2096f4b1b13660311.png

通過(guò)alias指令訪問(wèn)web2.html


5e4f4fff09619b0513660293.png

3. 反向代理配置初步

反向代理是將客戶機(jī)請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的目標(biāo)服務(wù)器;并將從服務(wù)器上得到的結(jié)果返回給 Internet 上請(qǐng)求連接的客戶端蚣旱,此時(shí)代理服務(wù)器與目標(biāo)主機(jī)一起對(duì)外表現(xiàn)為一個(gè)服務(wù)器碑幅。

這樣做的好處是可以隱藏內(nèi)部服務(wù)部署情況,通過(guò)統(tǒng)一入口控制網(wǎng)絡(luò)流量塞绿。另外沟涨,我們還可以在總?cè)肟谔幵O(shè)置負(fù)載均衡,將用戶請(qǐng)求分配給多個(gè)服務(wù)器异吻。反向代理實(shí)現(xiàn)的指令是 proxy_pass 裹赴,我們簡(jiǎn)單使用下這個(gè)指令進(jìn)行測(cè)試,了解其作用诀浪。

案例

在上面配置文件的基礎(chǔ)上棋返,我們?cè)黾右粋€(gè) server 指令塊,監(jiān)聽 9000 端口雷猪,匹配 url 請(qǐng)求睛竣,轉(zhuǎn)發(fā)到 web1.html 和 web2.html 頁(yè)面,具體配置如下:

    ...

    server {
        listen       9000;

        location /web1 {
            proxy_pass http://localhost:8081/web/web1.html;
        }

        location /web2 {
            proxy_pass http://localhost:8081/web/web2.html;
        }
    }

    ...

這樣春宣,當(dāng)我們?cè)L問(wèn) url 地址 http://服務(wù)器ip:9000/web1 時(shí)酵颁,會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到 http://localhost:8081/web/web1.html ,而這個(gè)如果是在服務(wù)器上執(zhí)行會(huì)根據(jù)前面的配置訪問(wèn)靜態(tài)資源web1.html月帝。 同樣躏惋,對(duì)于訪問(wèn) web2.html 頁(yè)面,我們只需要請(qǐng)求 http://服務(wù)器ip:9000/web2 即可嚷辅。

測(cè)試結(jié)果

通過(guò)方向代理訪問(wèn) web1.html


5e4f501009fa482e13660332.jpg

通過(guò)方向代理訪問(wèn) web2.html


5e4f502109bc38b313660289.jpg

4. tcp/udp 配置初步

Nginx 從 1.9.0 版本開始簿姨,新增加了一個(gè) stream 模塊,用來(lái)實(shí)現(xiàn)四層協(xié)議的轉(zhuǎn)發(fā)簸搞、代理或者負(fù)載均衡等扁位。這個(gè)模塊使用和 http 指令塊類似。我們同樣在之前的配置準(zhǔn)備一個(gè) nginx.conf 文件趁俊,里面只有一個(gè) stream 的指令塊域仇,如下:

user  root;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

stream {
    server {
        listen 3000;
        return '3000 server get ip: $remote_addr!\n';
    }
}

上述指令塊只有一個(gè) stream 塊,監(jiān)聽了 3000 端口寺擂。對(duì)于 tcp 連接暇务,可以使用 proxy_pass 轉(zhuǎn)發(fā) tcp/udp 協(xié)議泼掠。也可以直接使用 return 指令返回,這里只是簡(jiǎn)單返回相應(yīng)字符串垦细。

測(cè)試結(jié)果

在 Windows 下择镇,打開命令窗口,然后輸入telnet 180.76.152.113 3000 命令括改,正常應(yīng)該會(huì)有相應(yīng)的字符串響應(yīng)腻豌。如果出現(xiàn)下面的錯(cuò)誤,需要在Window 中打開 telnet 客戶端嘱能,具體操作見下圖吝梅。

5e4f5033090a6dc306770442.jpg

解決找不到 telnet 命令方法 1


5e4f5049091d862808530600.png

在這里選擇勾上 Telnet 客戶端即可。


5e4f5057096063ff04290425.png

最后 telent 命令返回結(jié)果:


5e4f50680919cca106770458.jpg

5. 小結(jié)

這節(jié)內(nèi)容焰檩,我們繼續(xù)學(xué)習(xí)并實(shí)戰(zhàn)了 Nginx 的相關(guān)配置憔涉,涵蓋了靜態(tài)資源配置、反向代理以及 tcp 層處理等析苫,為后續(xù)進(jìn)一步深入學(xué)習(xí) Nginx 做好相關(guān)鋪墊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末穿扳,一起剝皮案震驚了整個(gè)濱河市衩侥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矛物,老刑警劉巖茫死,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異履羞,居然都是意外死亡峦萎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門忆首,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爱榔,“玉大人,你說(shuō)我怎么就攤上這事糙及∠暧模” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵浸锨,是天一觀的道長(zhǎng)唇聘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)柱搜,這世上最難降的妖魔是什么迟郎? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮聪蘸,結(jié)果婚禮上宪肖,老公的妹妹穿的比我還像新娘表制。我一直安慰自己,他們只是感情好匈庭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布夫凸。 她就那樣靜靜地躺著,像睡著了一般阱持。 火紅的嫁衣襯著肌膚如雪夭拌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天衷咽,我揣著相機(jī)與錄音鸽扁,去河邊找鬼。 笑死镶骗,一個(gè)胖子當(dāng)著我的面吹牛桶现,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鼎姊,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骡和,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了相寇?” 一聲冷哼從身側(cè)響起慰于,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唤衫,沒想到半個(gè)月后婆赠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佳励,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年休里,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赃承。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妙黍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楣导,到底是詐尸還是另有隱情废境,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布筒繁,位于F島的核電站噩凹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毡咏。R本人自食惡果不足惜驮宴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呕缭。 院中可真熱鬧堵泽,春花似錦修己、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至纹安,卻和暖如春尤辱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厢岂。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工光督, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塔粒。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓结借,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卒茬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子船老,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • nginx是什么:nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器。同時(shí)也提供了IMAP/POP3/S...
    tuacy閱讀 941評(píng)論 1 6
  • 本節(jié)的目標(biāo)是了解 Nginx 的基本配置圃酵。關(guān)于 Nginx 的配置努隙,主要是以下 5 個(gè)方面: 初始配置 基本語(yǔ)法 ...
    木子教程閱讀 485評(píng)論 0 7
  • Nginx 的優(yōu)勢(shì)支持海量并發(fā)內(nèi)存消耗少免費(fèi)可以商用配置文件簡(jiǎn)單 搭建本地虛擬機(jī)環(huán)境yum -y install ...
    FConfidence閱讀 1,231評(píng)論 0 0
  • 一、3W問(wèn)題 1.1 Nginx是什么 Nginx本質(zhì)上是一個(gè)輕量級(jí)的Web服務(wù)器辜昵、高性能的HTTP服務(wù)器、反向代...
    文景大大閱讀 2,005評(píng)論 0 2
  • nginx 是一個(gè)開源的高性能 web 服務(wù)器(可能是性能最好的)咽斧,使用非常廣泛堪置,既可以用來(lái)部署靜態(tài)資源,也可以用...
    hatlonely閱讀 152評(píng)論 0 0