一次說清Nginx反向代理及參數(shù)配置
1、反向代理
反向代理(reverse proxy)方式是指用代理服務(wù)器來接受Internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)中的上游服務(wù)器,并將從上游服務(wù)器上得到的結(jié)果返回給Internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外表現(xiàn)局勢(shì)一個(gè)web服務(wù)器。
2、Nginx反向代理
Nginx的反向代理,當(dāng)用戶發(fā)送一個(gè)HTTP請(qǐng)求時(shí),Nginx不會(huì)立刻轉(zhuǎn)發(fā)到上游服務(wù)器,而是先把用戶的請(qǐng)求(包括HTTP包體)完整地接收到Nginx所在的服務(wù)器的磁盤或內(nèi)存中,然后再向上游服務(wù)器發(fā)起連接,把緩存的客戶端請(qǐng)求轉(zhuǎn)發(fā)到上游服務(wù)器。
優(yōu)點(diǎn):降低上游服務(wù)器的負(fù)載,盡量把壓力放在Nginx服務(wù)器上
缺點(diǎn):延長(zhǎng)了一個(gè)請(qǐng)求的處理時(shí)間,并增加了用于緩存請(qǐng)求內(nèi)容的內(nèi)存和磁盤空間。
3、負(fù)載均衡的基本配置
3.1 upstream
語法:upstream name{......};
配置塊:http
upstream塊定義了一個(gè)上游服務(wù)器的集群,便于反向代理中的proxy_pass使用。
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { location / { proxy_pass http://backend; } }
3.2 server
語法:server name[parameters];
配置塊:upstream
server指定一臺(tái)上游服務(wù)器的名字,該名字可以是域名、ip地址端口、UNIX句柄等,后面可跟參數(shù):
.weight=number
:設(shè)置向這臺(tái)上游服務(wù)器轉(zhuǎn)發(fā)的權(quán)重,默認(rèn)是1。
.max_fails=number
:該選項(xiàng)與fail_timeout配合使用,指在fail_timeout時(shí)間段內(nèi),如果向當(dāng)前的上游服務(wù)器轉(zhuǎn)發(fā)失敗次數(shù)超過number,則認(rèn)為在當(dāng)前的fail_timeout時(shí)間段內(nèi)這臺(tái)上游服務(wù)器不可用。max_fail默認(rèn)為1,如果設(shè)置為0,表示不檢查失敗次數(shù)。
.fail_timeout=time
:fail_timeout表示該時(shí)間段內(nèi)轉(zhuǎn)發(fā)失敗多少次后認(rèn)為上游服務(wù)器暫時(shí)不可用,用于優(yōu)化反向代理功能。它與向上游服務(wù)器建立連接的超時(shí)時(shí)間、讀取上游服務(wù)器的響應(yīng)超時(shí)時(shí)間等完全無關(guān)。默認(rèn)為10s。
.down
:表示所有的上游服務(wù)器永久下線,只在使用ip_hash配置項(xiàng)時(shí)才有用。
.backup
:在使用ip_hash配置項(xiàng)時(shí)它是無效的。表示所在的上游服務(wù)器只是備份服務(wù)器,只有在所有的非備份上游服務(wù)器都失效后,才會(huì)向所在的上游服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求。
upstream backend { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; }
3.3 ip_hash
語法:ip_hash;
配置塊:upstream
ip_hash是某個(gè)用戶的請(qǐng)求始終落在固定的一臺(tái)上游服務(wù)器上。它根據(jù)用戶端的ip計(jì)算出一個(gè)key,將key按照upstream集群里的上游服務(wù)器數(shù)量進(jìn)行取模,然后以取模后的結(jié)果把請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的上游服務(wù)器中,這樣確保了同一個(gè)客戶端的請(qǐng)求只會(huì)轉(zhuǎn)發(fā)到指定的上游服務(wù)器中。
ip_hash與weight(權(quán)重)配置不可同時(shí)使用。如果upstream中一臺(tái)服務(wù)器不能使用時(shí),不能直接刪除,而是使用down標(biāo)識(shí),來確保轉(zhuǎn)發(fā)策略的一慣性。
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; server backend4.example.com; }
4、反向代理的基本配置
4.1、proxy_pass
語法:proxy_pass URL;
配置塊:location、if
將當(dāng)前請(qǐng)求反向代理到URL參數(shù)指定的服務(wù)器上,URL可以是主機(jī)名或IP地址+端口。
location / { proxy_pass http://localhost:8000/uri }
默認(rèn)情況下反向代理是不會(huì)轉(zhuǎn)發(fā)請(qǐng)求中的Host頭部的,如需轉(zhuǎn)發(fā)需加上配置:proxy_set_header Host $host;
4.2、proxy_method
語法:proxy_method [GET/POST/DELETE/UPDATE/......];
配置塊:http、server、location
表示轉(zhuǎn)發(fā)時(shí)的協(xié)議方法名。
proxy_method POST;
4.3、proxy_hide_header
語法:proxy_hide_header the_header;
配置塊:http、server、location
Nginx將上游服務(wù)器的響應(yīng)轉(zhuǎn)發(fā)給客戶端,但默認(rèn)不會(huì)轉(zhuǎn)發(fā):Date、Server、X-Pad和X-Accel-*。使用proxy_hide_header后可以任意地指定哪些HTTP頭部字段不能被轉(zhuǎn)發(fā)。
4.4、proxy_pass_header
語法:proxy_pass_header the_header
配置塊:http、server、location
與proxy_hide_header功能相反,將原來禁止轉(zhuǎn)發(fā)的header設(shè)置為允許轉(zhuǎn)發(fā)。
4.5、proxy_pass_request_body
語法:proxy_pass_requst_body on|off;
默認(rèn):proxy_pass_request_body on;
配置塊:http、server、location
表示確定是否向上游服務(wù)器發(fā)送HTTP包體部分。
4.6、proxy_pass_request_headers
語法:proxy_pass_request_headers on|off;
默認(rèn):proxy_pass_request_headers on;
配置塊:http、server、location
作用為確定是否轉(zhuǎn)發(fā)HTTP頭部
4.7、proxy_redirect
語法:proxy_redirect[default|off|redirect replacement];
默認(rèn):proxy_redirect default;
配置塊:http、server、location
當(dāng)上游服務(wù)器返回的響應(yīng)是重定向或刷新(如301或302)請(qǐng)求時(shí),proxy_redirect可以重設(shè)http頭部的location或refresh字段。
proxy_redirect http://localhost:8000/two/ http://frontendone;
上述代碼如果上游服務(wù)器返回302,location字段的URL是http://localhost:8000/two/some/uri/ 轉(zhuǎn)發(fā)給客戶端的location就是:http://frontendonesome/uri/
.replacement
:可以省略replacement參數(shù)中的主機(jī)名部分,此時(shí)會(huì)用虛擬主機(jī)名稱
來填充。
.off
:將使location或refresh字段維持不變。
.default
:按照proxy_pass配置項(xiàng)和所屬的location配置項(xiàng)重組發(fā)往客戶端的location頭部。
location one { proxy_pass http://upstream:port/two/; proxy_redirect default; } location one { proxy_pass http://upstream:port/two/; proxy_redirect http://upstream:port/two/one; }
上述兩種配置效果一樣。
4.8、proxy_next_upstream
語法:proxy_next_upstream[error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off];
默認(rèn):proxy_next_upstream error timeout;
配置塊:http、server、location
表示當(dāng)向一臺(tái)上游服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求出現(xiàn)錯(cuò)誤時(shí),繼續(xù)換一臺(tái)上游服務(wù)器處理這個(gè)請(qǐng)求。
proxy_next_upstream參數(shù)則說明在哪些情況下會(huì)繼續(xù)選擇下一臺(tái)上游服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求:
.error
:當(dāng)向上游服務(wù)器發(fā)起連接、發(fā)送請(qǐng)求、讀取響應(yīng)時(shí)出錯(cuò)。
.timeout
:發(fā)送請(qǐng)求或讀取響應(yīng)時(shí)發(fā)生超時(shí)。
.invalid_header
:上游服務(wù)器發(fā)送的響應(yīng)是不合法的。
.http_500
:上游服務(wù)器返回的響應(yīng)碼是500。
.http_502
:上游服務(wù)器返回的響應(yīng)碼是502。
.http_503
:上游服務(wù)器返回的響應(yīng)碼是503。
.http_504
:上游服務(wù)器返回的響應(yīng)碼是504。
·http_404
:上游服務(wù)器返回的HTTP響應(yīng)碼是404。
.off
:關(guān)閉proxy_next_upstream功能-出錯(cuò)就選擇另一臺(tái)上游服務(wù)器再次轉(zhuǎn)發(fā)。
上述就是我整理的一些Nginx反向代理的參數(shù)信息,希望對(duì)大家有所幫助,謝謝。
以上就是一次說清Nginx反向代理及參數(shù)配置的詳細(xì)內(nèi)容,更多關(guān)于Nginx反向代理及參數(shù)配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx如何配置根據(jù)路徑轉(zhuǎn)發(fā)詳解
Nginx是作為一個(gè)反向代理,轉(zhuǎn)發(fā),和負(fù)載均衡的服務(wù)器,也可以用于分布式,下面這篇文章主要給大家介紹了關(guān)于Nginx如何配置根據(jù)路徑轉(zhuǎn)發(fā)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻
Nginx?Proxy?Manager是一款功能強(qiáng)大的開源軟件,配置Web應(yīng)用防火墻,可以防止常見的web攻擊,本文就來介紹一下Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻,感興趣的可以了解一下2025-02-02樹莓派如何搭建web服務(wù)器(nginx?+php?+?mysql?+?vsftpd?+phpmyadmin)
本文介紹如何使用樹莓派搭建Web服務(wù)器,包括安裝Nginx、PHP、MySQL、ftp和phpMyAdmin,步驟詳盡,涵蓋不同架構(gòu)的PHP安裝,提供了配置MySQL遠(yuǎn)程訪問和管理數(shù)據(jù)庫的方法,是搭建個(gè)人Web服務(wù)器的實(shí)用指南2024-11-11Linux centos7環(huán)境下Nginx安裝教程
這篇文章主要為大家詳細(xì)介紹了Linux centos7環(huán)境下Nginx安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03詳解Nginx 利用代理轉(zhuǎn)發(fā)請(qǐng)求示例
這篇文章主要介紹了詳解Nginx 利用代理轉(zhuǎn)發(fā)請(qǐng)求示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03