日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx常用功能全揭秘(内附福利!!!)

發(fā)布時(shí)間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx常用功能全揭秘(内附福利!!!) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文旨在用最通俗的語言講述最枯燥的基本知識

nginx作為一個(gè)高性能的web服務(wù)器,想必大家垂涎已久,蠢蠢欲動,想學(xué)習(xí)一番了吧,語法不多說,網(wǎng)上一大堆。下面博主就nginx的非常常用的幾個(gè)功能做一些講述和分析,學(xué)會了這幾個(gè)功能,平常的開發(fā)和部署就不是什么問題了。因此希望大家看完之后,能自己裝個(gè)nginx來學(xué)習(xí)配置測試,這樣才能真正的掌握它。前方高能,文末有福利。

文章提綱:

  • 正向代理
  • 反向代理
  • 透明代理
  • 負(fù)載均衡
  • 靜態(tài)服務(wù)器
  • nginx的安裝
  • 一點(diǎn)點(diǎn)小福利

  • 1. 正向代理

    正向代理:內(nèi)網(wǎng)服務(wù)器主動去請求外網(wǎng)的服務(wù)的一種行為

    光看概念,可能有讀者還是搞不明白:什么叫做“正向”,什么叫做“代理”,我們分別來理解一下這兩個(gè)名詞。

    正向:相同的或一致的方向
    代理:自己做不了的事情或者自己不打算做的事情,委托或依靠別人來完成。

    借助解釋,回歸到nginx的概念,正向代理其實(shí)就是說客戶端無法主動或者不打算完成主動去向某服務(wù)器發(fā)起請求,而是委托了nginx代理服務(wù)器去向服務(wù)器發(fā)起請求,并且獲得處理結(jié)果,返回給客戶端。
    從下圖可以看出:客戶端向目標(biāo)服務(wù)器發(fā)起的請求,是由代理服務(wù)器代替它向目標(biāo)主機(jī)發(fā)起,得到結(jié)果之后,通過代理服務(wù)器返回給客戶端。

    舉個(gè)栗子:廣大社會主義接班人都知道,為了保護(hù)祖國的花朵不受外界的烏煙瘴氣熏陶,國家對網(wǎng)絡(luò)做了一些“優(yōu)化”,正常情況下是不能外網(wǎng)的,但作為程序員的我們?nèi)绻麤]有谷歌等搜索引擎的幫助,再銷魂的代碼也會因此失色,因此,網(wǎng)絡(luò)上也曾出現(xiàn)過一些fan qiang技術(shù)和軟件供有需要的人使用,如某VPN等,其實(shí)VPN的原理大體上也類似于一個(gè)正向代理,也就是需要訪問外網(wǎng)的電腦,發(fā)起一個(gè)訪問外網(wǎng)的請求,通過本機(jī)上的VPN去尋找一個(gè)可以訪問國外網(wǎng)站的代理服務(wù)器,代理服務(wù)器向外國網(wǎng)站發(fā)起請求,然后把結(jié)果返回給本機(jī)。

    正向代理的配置: server {#指定DNS服務(wù)器IP地址 resolver 114.114.114.114; #指定代理端口 listen 8080; location / {#設(shè)定代理服務(wù)器的協(xié)議和地址(固定不變) proxy_pass http://$http_host$request_uri; } }

    這樣就可以做到內(nèi)網(wǎng)中端口為8080的服務(wù)器主動請求到1.2.13.4的主機(jī)上,如在Linux下可以:

    curl --proxy proxy_server:8080 http://www.taobao.com/

    正向代理的關(guān)鍵配置:

  • resolver:DNS服務(wù)器IP地址
  • listen:主動發(fā)起請求的內(nèi)網(wǎng)服務(wù)器端口
  • proxy_pass:代理服務(wù)器的協(xié)議和地址
  • 2. 反向代理

    反向代理:reverse proxy,是指用代理服務(wù)器來接受客戶端發(fā)來的請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)網(wǎng)中的上游服務(wù)器,上游服務(wù)器處理完之后,把結(jié)果通過nginx返回給客戶端。

    上面講述了正向代理的原理,相信對于反向代理,就很好理解了吧。
    反向代理是對于來自外界的請求,先通過nginx統(tǒng)一接受,然后按需轉(zhuǎn)發(fā)給內(nèi)網(wǎng)中的服務(wù)器,并且把處理請求返回給外界客戶端,此時(shí)代理服務(wù)器對外表現(xiàn)的就是一個(gè)web服務(wù)器,客戶端根本不知道“上游服務(wù)器”的存在。


    舉個(gè)栗子:一個(gè)服務(wù)器的80端口只有一個(gè),而服務(wù)器中可能有多個(gè)項(xiàng)目,如果A項(xiàng)目是端口是8081,B項(xiàng)目是8082,C項(xiàng)目是8083,假設(shè)指向該服務(wù)器的域名為www.xxx.com,此時(shí)訪問B項(xiàng)目是www.xxx.com:8082,以此類推其它項(xiàng)目的URL也是要加上一個(gè)端口號,這樣就很不美觀了,這時(shí)我們把80端口給nginx服務(wù)器,給每個(gè)項(xiàng)目分配一個(gè)獨(dú)立的子域名,如A項(xiàng)目是a.xxx.com,并且在nginx中設(shè)置每個(gè)項(xiàng)目的轉(zhuǎn)發(fā)配置,然后對所有項(xiàng)目的訪問都由nginx服務(wù)器接受,然后根據(jù)配置轉(zhuǎn)發(fā)給不同的服務(wù)器處理。具體流程如下圖所示:

    反向代理配置: server {#監(jiān)聽端口listen 80;#服務(wù)器名稱,也就是客戶端訪問的域名地址server_name a.xxx.com;#nginx日志輸出文件access_log logs/nginx.access.log main;#nginx錯(cuò)誤日志輸出文件error_log logs/nginx.error.log;root html;index index.html index.htm index.php;location / {#被代理服務(wù)器的地址proxy_pass http://localhost:8081;#對發(fā)送給客戶端的URL進(jìn)行修改的操作proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;proxy_max_temp_file_size 0;} }

    這樣就可以通過a.xxx.com來訪問a項(xiàng)目對應(yīng)的網(wǎng)站了,而不需要帶上難看的端口號。
    反向代理的配置關(guān)鍵點(diǎn)是:

  • server_name:代表客戶端向服務(wù)器發(fā)起請求時(shí)輸入的域名
  • proxy_pass:代表源服務(wù)器的訪問地址,也就是真正處理請求的服務(wù)器(localhost+端口號)。
  • 3. 透明代理

    透明代理:也叫做簡單代理,意思客戶端向服務(wù)端發(fā)起請求時(shí),請求會先到達(dá)透明代理服務(wù)器,代理服務(wù)器再把請求轉(zhuǎn)交給真實(shí)的源服務(wù)器處理,也就是是客戶端根本不知道有代理服務(wù)器的存在。

    舉個(gè)栗子:它的用法有點(diǎn)類似于攔截器,如某些制度嚴(yán)格的公司里的辦公電腦,無論我們用電腦做了什么事情,安全部門都能攔截我們對外發(fā)送的任何東西,這是因?yàn)殡娔X在對外發(fā)送時(shí),實(shí)際上先經(jīng)過網(wǎng)絡(luò)上的一個(gè)透明的服務(wù)器,經(jīng)過它的處理之后,才接著往外網(wǎng)走,而我們在網(wǎng)上沖浪時(shí),根本沒有感知到有攔截器攔截我們的數(shù)據(jù)和信息。

    有人說透明代理和反向代理有點(diǎn)像,都是由代理服務(wù)器先接受請求,再轉(zhuǎn)發(fā)到源服務(wù)器。其實(shí)本質(zhì)上是有區(qū)別的,透明代理是客戶端感知不到代理服務(wù)器的存在,而反向代理是客戶端感知只有一個(gè)代理服務(wù)器的存在,因此他們一個(gè)是隱藏了自己,一個(gè)是隱藏了源服務(wù)器。事實(shí)上,透明代理和正向代理才是相像的,都是由客戶端主動發(fā)起請求,代理服務(wù)器處理;他們差異點(diǎn)在于:正向代理是代理服務(wù)器代替客戶端請求,而透明代理是客戶端在發(fā)起請求時(shí),會先經(jīng)過透明代理服務(wù)器,再達(dá)到服務(wù)端,在這過程中,客戶端是感知不到這個(gè)代理服務(wù)器的。

    4. 負(fù)載均衡

    負(fù)載均衡:將服務(wù)器接收到的請求按照規(guī)則分發(fā)的過程,稱為負(fù)載均衡。負(fù)載均衡是反向代理的一種體現(xiàn)。

    可能絕大部分人接觸到的web項(xiàng)目,剛開始時(shí)都是一臺服務(wù)器就搞定了,但當(dāng)網(wǎng)站訪問量越來越大時(shí),單臺服務(wù)器就扛不住了,這時(shí)候需要增加服務(wù)器做成集群來分擔(dān)流量壓力,而在架設(shè)這些服務(wù)器時(shí),nginx就充當(dāng)了接受流量和分流的作用了,當(dāng)請求到nginx服務(wù)器時(shí),nginx就可以根據(jù)設(shè)置好的負(fù)載信息,把請求分配到不同的服務(wù)器,服務(wù)器處理完畢后,nginx獲取處理結(jié)果返回給客戶端,這樣,用nginx的反向代理,即可實(shí)現(xiàn)了負(fù)載均衡。

    nginx實(shí)現(xiàn)負(fù)載均衡有幾種模式:

  • 輪詢:每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,也是nginx的默認(rèn)模式。輪詢模式的配置很簡單,只需要把服務(wù)器列表加入到upstream模塊中即可。
  • 下面的配置是指:負(fù)載中有三臺服務(wù)器,當(dāng)請求到達(dá)時(shí),nginx按照時(shí)間順序把請求分配給三臺服務(wù)器處理。

    upstream serverList {server 1.2.3.4;server 1.2.3.5;server 1.2.3.6; }
  • ip_hash:每個(gè)請求按訪問IP的hash結(jié)果分配,同一個(gè)IP客戶端固定訪問一個(gè)后端服務(wù)器??梢员WC來自同一ip的請求被打到固定的機(jī)器上,可以解決session問題。
  • 下面的配置是指:負(fù)載中有三臺服務(wù)器,當(dāng)請求到達(dá)時(shí),nginx優(yōu)先按照ip_hash的結(jié)果進(jìn)行分配,也就是同一個(gè)IP的請求固定在某一臺服務(wù)器上,其它則按時(shí)間順序把請求分配給三臺服務(wù)器處理。

    upstream serverList {ip_hashserver 1.2.3.4;server 1.2.3.5;server 1.2.3.6; }
  • url_hash:按訪問url的hash結(jié)果來分配請求,相同的url固定轉(zhuǎn)發(fā)到同一個(gè)后端服務(wù)器處理。
  • upstream serverList {server 1.2.3.4;server 1.2.3.5;server 1.2.3.6;hash $request_uri; hash_method crc32; }
  • fair:按后端服務(wù)器的響應(yīng)時(shí)間來分配請求,響應(yīng)時(shí)間短的優(yōu)先分配。
  • upstream serverList {server 1.2.3.4;server 1.2.3.5;server 1.2.3.6;fair; }

    而在每一種模式中,每一臺服務(wù)器后面的可以攜帶的參數(shù)有:

  • down: 當(dāng)前服務(wù)器暫不參與負(fù)載
  • weight: 權(quán)重,值越大,服務(wù)器的負(fù)載量越大。
  • max_fails:允許請求失敗的次數(shù),默認(rèn)為1。
  • fail_timeout:max_fails次失敗后暫停的時(shí)間。
  • backup:備份機(jī), 只有其它所有的非backup機(jī)器down或者忙時(shí)才會請求backup機(jī)器。
  • 如下面的配置是指:負(fù)載中有三臺服務(wù)器,當(dāng)請求到達(dá)時(shí),nginx按時(shí)間順序和權(quán)重把請求分配給三臺服務(wù)器處理,例如有100個(gè)請求,有30%是服務(wù)器4處理,有50%的請求是服務(wù)器5處理,有20%的請求是服務(wù)器6處理。

    upstream serverList {server 1.2.3.4 weight=30;server 1.2.3.5 weight=50;server 1.2.3.6 weight=20; }

    如下面的配置是指:負(fù)載中有三臺服務(wù)器,服務(wù)器4的失敗超時(shí)時(shí)間為60s,服務(wù)器5暫不參與負(fù)載,服務(wù)器6只用作備份機(jī)。

    upstream serverList {server 1.2.3.4 fail_timeout=60s;server 1.2.3.5 down;server 1.2.3.6 backup; } 下面是一個(gè)配置負(fù)載均衡的示例(只寫了關(guān)鍵配置):
    其中:
  • upstream serverList是負(fù)載的配置模塊
  • server_name是客戶端請求的域名地址
  • proxy_pass是指向負(fù)載的列表的模塊
  • upstream serverList {server 1.2.3.4 weight=30;server 1.2.3.5 down;server 1.2.3.6 backup; } server {listen 80;server_name www.xxx.com;root html;index index.html index.htm index.php;location / {proxy_pass http://serverList;proxy_redirect off;proxy_set_header Host $host;} }

    5. 靜態(tài)服務(wù)器

    現(xiàn)在很多項(xiàng)目流行前后分離,也就是前端服務(wù)器和后端服務(wù)器分離,分別部署,這樣的方式能讓前后端人員能各司其職,不需要互相依賴,而前后分離中,前端項(xiàng)目的運(yùn)行是不需要用Tomcat、Apache等服務(wù)器環(huán)境的,因此可以直接用nginx來作為靜態(tài)服務(wù)器。

    靜態(tài)服務(wù)器的配置如下,其中關(guān)鍵配置為:
  • root:直接靜態(tài)項(xiàng)目的絕對路徑的根目錄。
  • server_name : 靜態(tài)網(wǎng)站訪問的域名地址。
  • server {listen 80; server_name www.xxx.com; client_max_body_size 1024M;location / {root /var/www/xxx_static;index index.html;}}
  • nginx的安裝
  • 學(xué)了這么多nginx的配置用法之后,我們需要對每一個(gè)知識點(diǎn)做一下測試,才能印象深刻,在此之前,我們需要知道nginx是怎么安裝,下面以Linux環(huán)境為例,簡述yum方式安裝nginx的步驟:

  • 安裝依賴:
  • //一鍵安裝上面四個(gè)依賴 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
  • 安裝nginx:
  • yum install nginx
  • 檢查是否安裝成功:
  • nginx -v
  • 啟動/挺尸nginx:
  • /etc/init.d/nginx start /etc/init.d/nginx stop
  • 編輯配置文件:
  • /etc/nginx/nginx.conf

    這些步驟都完成之后,我們就可以進(jìn)入nginx的配置文件nginx.conf對上面的各個(gè)知識點(diǎn),進(jìn)行配置和測試了。

  • 一點(diǎn)點(diǎn)小福利:
  • 有的人說看到這里好像都懂了,但是沒Linux可以測試呀,其實(shí)nginx也有Windows版本,當(dāng)然Windows版本在實(shí)際項(xiàng)目中用的并不多,因?yàn)閣eb項(xiàng)目的服務(wù)器都是Linux,因此你可以在自己的電腦上裝個(gè)虛擬機(jī),然后裝個(gè)Linux來玩耍,不過如果如果你想要學(xué)以致用,并且更接近公司項(xiàng)目的生產(chǎn)環(huán)境的配備的話,作者建議你還是自己買一臺云服務(wù)器來學(xué)習(xí),剛好阿里云有雙十一活動,一臺服務(wù)器只需要90元一年,這是明顯的擼羊毛活動啊,你忍心放棄嗎?

    你花在裝虛擬機(jī)和Linux系統(tǒng)上的時(shí)間都不止90塊錢了!
    你有沒有想過有朝一日親手上傳自己的代碼到服務(wù)器呢?
    你有沒有憧憬擁有自己搭建和維護(hù)的個(gè)人博客呢?
    你試過從項(xiàng)目發(fā)布上線到域名解析訪問整個(gè)流程嗎?
    ....
    如果都沒有,建議你買一臺吧:

    點(diǎn)我90元購買服務(wù)器

    如果鏈接無法點(diǎn)開,請掃描二維碼購買:

    ------------劃重點(diǎn)----------------

    注意了!!!
    點(diǎn)鏈接注冊購買之后,阿里云會有返現(xiàn)給博主,為了感謝各位大大的厚愛,博主決定把所有返現(xiàn)歸還給各位大大,因此凡是新用戶注冊購買的,請加博主V(sisi-ceo)聯(lián)系博主,博主核實(shí)后把返現(xiàn)以紅包的形式給你您,讓你最低的價(jià)格買到服務(wù)器,能學(xué)到更多的東西!!!

    (老用戶以及點(diǎn)別的鏈接注冊購買的大大,博主是收不到返現(xiàn)的哦,所以這部分博主無能為力的啦~~~)


    覺得本文對你有幫助?請分享給更多人
    關(guān)注「編程無界」,提升裝逼技能

    總結(jié)

    以上是生活随笔為你收集整理的nginx常用功能全揭秘(内附福利!!!)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。