欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解proxy_pass根據(jù)path路徑轉(zhuǎn)發(fā)時(shí)的"/"問(wèn)題記錄

 更新時(shí)間:2018年09月06日 11:36:46   作者:howhy  
這篇文章主要介紹了詳解proxy_pass根據(jù)path路徑轉(zhuǎn)發(fā)時(shí)的"/"問(wèn)題記錄,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在nginx中配置proxy_pass時(shí),如果是按照^~匹配路徑時(shí),要注意proxy_pass后的url最后的/。當(dāng)加上了/,相當(dāng)于是絕對(duì)根路徑,則nginx不會(huì)把location中匹配的路徑部分代理走;如果沒(méi)有/,則會(huì)把匹配的路徑部分也給代理走。

比如下面設(shè)置:

location ^~ /wangshibo/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
proxy_pass http://js.test.com/;
}

如上面的配置,如果請(qǐng)求的url是http://servername/wangshibo/test.html會(huì)被代理成http://js.test.com/test.html

而如果這么配置

location ^~ /wangshibo/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
proxy_pass http://js.test.com;
}

則請(qǐng)求的url是http://servername/wangshibo/test.html會(huì)被代理到http://js.test.com/wangshibo/test.html

當(dāng)然,可以用如下的rewrite來(lái)實(shí)現(xiàn)/的功能

location ^~ /wangshibo/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
rewrite /wangshibo/(.+)$ /$1 break;
proxy_pass http://js.test.com;
}

列舉下面一例

1)第一種配置

[root@BJLX_16_202_V vhosts]# cat ssl-wangshibo.conf
upstream at {
  server 192.168.1.202:8080 max_fails=3 fail_timeout=30s;
}
  
server {
  listen 443;
  server_name www.wangshibo.com;
  ssl on;
  
  ### SSL log files ###
  access_log logs/wangshibo_access.log;
  error_log logs/wangshibo_error.log;
  
### SSL cert files ###
  ssl_certificate ssl/wang.cer;  
  ssl_certificate_key ssl/wang.key;
  
  location /attendance/ {
  proxy_pass http://at;                             //不需要加上"/"          
  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
  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_set_header X-Forwarded-Proto https;
  proxy_redirect off;
    }
  
}

訪問(wèn)https://www.wangshibo.com/attendance/和http://192.168.1.202:8080/attendance結(jié)果是一致的。

2)第二種配置

[root@BJLX_16_202_V vhosts]# cat ssl-wangshibo.conf
upstream at {
  server 192.168.1.202:8080 max_fails=3 fail_timeout=30s;
}
  
server {
  listen 443;
  server_name www.wangshibo.com;
  ssl on;
  
  ### SSL log files ###
  access_log logs/wangshibo_access.log;
  error_log logs/wangshibo_error.log;
  
### SSL cert files ###
  ssl_certificate ssl/wang.cer;  
  ssl_certificate_key ssl/wang.key;
  
  location / {
  proxy_pass http://at/attendance/;                         //一定要加上"/"            
  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
  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_set_header X-Forwarded-Proto https;
  proxy_redirect off;
    }  
}

訪問(wèn)https://www.wangshibo.com和http://192.168.1.202:8080/attendance結(jié)果是一致的。

如下配置,想要實(shí)現(xiàn)的需求:

192.168.1.27是后端的real server,8080端口是公司的ehr人事系統(tǒng)端口。

又由于該系統(tǒng)涉及到微信接口訪問(wèn),即http://ehr.wang.com/attendance和http://ehr.wang.com/app

由于是內(nèi)部系統(tǒng),安全考慮,所以要求:

1)登錄ehr人事系統(tǒng)的時(shí)候要求使用內(nèi)網(wǎng)登錄,即http://192.168.1.27:8080,訪問(wèn)前要先登錄公司VPN
2)登錄微信接口http://ehr.wang.com/attendance和http://ehr.wang.com/app使用外網(wǎng)登錄,即使用解析后域名登錄。
3)訪問(wèn)http://ehr.wang.com,強(qiáng)制跳轉(zhuǎn)為https://ehr.wang.com/attendance

[root@BJLX_4_21_P vhosts]# cat ehr.conf
server {
  listen 80;
  server_name ehr.wang.com;
  
  access_log logs/ehr_access.log;
  error_log  logs/ehr_error.log;
 
  return   301 https://$server_name$request_uri;   
}
 
[root@BJLX_4_21_P vhosts]# cat ssl-ehr.conf
upstream ehr {
  server 192.168.1.27:8080 max_fails=3 fail_timeout=30s;
}
 
server {
  listen 443;
  server_name ehr.wang.com;
  ssl on;
 
  ### SSL log files ###
  access_log logs/ehr_access.log;
  error_log logs/ehr_error.log;
 
### SSL cert files ###
  ssl_certificate ssl/wang.cer;   
  ssl_certificate_key ssl/wang.key; 
  #ssl_session_timeout 5m;
 
  location / {
    return 301 https://ehr.wang.com/attendance;
  }
 
  location /attendance/ {
  proxy_pass http://ehr;
  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
  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_set_header X-Forwarded-Proto https;
  #proxy_set_header X-Forwarded-Proto https;
  proxy_redirect off;
  }
 
  location /app/ {
  proxy_pass http://ehr;
  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
  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_set_header X-Forwarded-Proto https;
  #proxy_set_header X-Forwarded-Proto https;
  proxy_redirect off;
  }
 }

注意:

由于從瀏覽器訪問(wèn)(http)到源站的real server之間要經(jīng)過(guò)Nginx反向代理層(https)

需要將proxy_set_header X-Forwarded-Proto https;這一行注釋掉,否則上面的配置無(wú)效。

如果中間沒(méi)有代理層,直接是在real server本機(jī)進(jìn)行nginx的反向代理(即本機(jī)nginx反代到本機(jī)的8080端口),則這個(gè)參數(shù)無(wú)效注釋(已經(jīng)過(guò)驗(yàn)證)

HTTP頭域(proxy_set_header)列表與解釋

HTTP 頭域是HTTP協(xié)議中請(qǐng)求(request)和響應(yīng)(response)中的頭部信息,其實(shí)就是HTTP通信的操作參數(shù),告訴web服務(wù)器和瀏覽器怎樣處理這個(gè)通信。

HTTP頭從一個(gè)請(qǐng)求信息或者響應(yīng)信息的第二行開(kāi)始(第一行是請(qǐng)求行或者響應(yīng)行),以兩個(gè)CR-LF字符組結(jié)束(CR:回車符,\r,LF:換行符\n)

而每個(gè)HTTP頭是字符串形式的,用冒號(hào)分割的鍵值對(duì),多個(gè)HTTP頭之間用CR-LF字符組隔開(kāi)。

某些http頭可以有注釋,例如user-agent,server,via。但這些注釋會(huì)被服務(wù)器或者瀏覽器忽略IETF組織已經(jīng)將一些核心的HTTP頭定義在RFC2616規(guī)范中,
這些HTTP頭是每個(gè)基于HTTP協(xié)議的軟件必須實(shí)現(xiàn)的,而其他一些更新和擴(kuò)展的頭域也必須被基于HTTP的軟件實(shí)現(xiàn)。當(dāng)然,各個(gè)軟件也可以定義自己的頭域。

另一方面,RFC2616規(guī)范中并沒(méi)有限制每個(gè)HTTP頭的長(zhǎng)度,或者限制HTTP頭的數(shù)量,但出于性能和安全的考慮,多數(shù)服務(wù)器都會(huì)自己作規(guī)定,例如apache2.3
就規(guī)定每個(gè)HTTP頭不能超過(guò)8190個(gè)字節(jié),每個(gè)請(qǐng)求不能超過(guò)100個(gè)HTTP頭。

以下來(lái)看看發(fā)送一個(gè)請(qǐng)求(request)時(shí)候,可能包含的各個(gè)HTTP頭和它的解釋。

標(biāo)準(zhǔn)的請(qǐng)求頭--

Accept: 瀏覽器(或者其他基于HTTP的客戶端程序)可以接收的內(nèi)容類型(Content-types),例如 Accept: text/plain

Accept-Charset:瀏覽器能識(shí)別的字符集,例如 Accept-Charset: utf-8

Accept-Encoding:瀏覽器可以處理的編碼方式,注意這里的編碼方式有別于字符集,這里的編碼方式通常指gzip,deflate等。例如 Accept-Encoding: gzip, deflate

Accept-Language:瀏覽器接收的語(yǔ)言,其實(shí)也就是用戶在什么語(yǔ)言地區(qū),例如簡(jiǎn)體中文的就是 Accept-Language: zh-CN

Authorization:在HTTP中,服務(wù)器可以對(duì)一些資源進(jìn)行認(rèn)證保護(hù),如果你要訪問(wèn)這些資源,就要提供用戶名和密碼,這個(gè)用戶名和密碼就是在Authorization頭中附帶的,格式是“username:password”字符串的base64編碼,例如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==中,basic指使用basic認(rèn)證方式, QWxhZGRpbjpvcGVuIHNlc2FtZQ==使用base64解碼就是“Aladdin:open sesame”

Cache-Control:這個(gè)指令在request和response中都有,用來(lái)指示緩存系統(tǒng)(服務(wù)器上的,或者瀏覽器上的)應(yīng)該怎樣處理緩存,因?yàn)檫@個(gè)頭域比較重要,特別是希望使用緩 存改善性能的時(shí)候,內(nèi)容也較多,所以我想在下一篇博文中主要介紹一下。

Connection:告訴服務(wù)器這個(gè)user agent(通常就是瀏覽器)想要使用怎樣的連接方式。值有keep-alive和close。http1.1默認(rèn)是keep-alive。keep-alive就是瀏覽器和服務(wù)器 的通信連接會(huì)被持續(xù)保存,不會(huì)馬上關(guān)閉,而close就會(huì)在response后馬上關(guān)閉。但這里要注意一點(diǎn),我們說(shuō)HTTP是無(wú)狀態(tài)的,跟這個(gè)是否keep-alive沒(méi)有關(guān)系,不要認(rèn)為keep-alive是對(duì)HTTP無(wú)狀態(tài)的特性的改進(jìn)。

Cookie:瀏覽器向服務(wù)器發(fā)送請(qǐng)求時(shí)發(fā)送cookie,或者服務(wù)器向?yàn)g覽器附加cookie,就是將cookie附近在這里的。例如:Cookie:user=admin

Content-Length:一個(gè)請(qǐng)求的請(qǐng)求體的內(nèi)存長(zhǎng)度,單位為字節(jié)(byte)。請(qǐng)求體是指在HTTP頭結(jié)束后,兩個(gè)CR-LF字符組之后的內(nèi)容,常見(jiàn)的有POST提交的表單數(shù)據(jù),這個(gè)Content-Length并不包含請(qǐng)求行和HTTP頭的數(shù)據(jù)長(zhǎng)度。

Content-MD5:使用base64進(jìn)行了編碼的請(qǐng)求體的MD5校驗(yàn)和。例如:Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Type:請(qǐng)求體中的內(nèi)容的mime類型。通常只會(huì)用在POST和PUT方法的請(qǐng)求中。例如:Content-Type: application/x-www-form-urlencoded

Date:發(fā)送請(qǐng)求時(shí)的GMT時(shí)間。例如:Date: Tue, 15 Nov 1994 08:12:31 GMT

Expect:指示需要使用服務(wù)器某些特殊的功能。(這個(gè)我不是很清楚)

From:發(fā)送這個(gè)請(qǐng)求的用戶的email地址。例如:From: user@example.com

Host:被服務(wù)器的域名或IP地址,如果不是通用端口,還包含該端口號(hào),例如:Host: www.some.com:182

If-Match:通常用在使用PUT方法對(duì)服務(wù)器資源進(jìn)行更新的請(qǐng)求中,意思就是,詢問(wèn)服務(wù)器,現(xiàn)在正在請(qǐng)求的資源的tag和這個(gè)If-Match的tag相不相同,如果相同,則證明服務(wù)器上的這個(gè)資源還是舊的,現(xiàn)在可以被更新,如果不相同,則證明該資源被更新過(guò),現(xiàn)在就不用再更新了(否則有可能覆蓋掉其他人所做的更改)。

If-Modified-Since:詢問(wèn)服務(wù)器現(xiàn)在正在請(qǐng)求的資源在某個(gè)時(shí)間以來(lái)有沒(méi)有被修改過(guò),如果沒(méi)有,服務(wù)器則返回304狀態(tài)來(lái)告訴瀏覽器使用瀏覽器自己本地的緩存,如果有修改過(guò),則返回200,并發(fā)送新的資源(當(dāng)然如果資源不存在,則返回404。)

If-None-Match:和If-Modified-Since用意差不多,不過(guò)不是根據(jù)時(shí)間來(lái)確定,而是根據(jù)一個(gè)叫ETag的東西來(lái)確定。關(guān)于etag我想在下一篇博客介紹一下。

If-Range:告訴服務(wù)器如果這個(gè)資源沒(méi)有更改過(guò)(根據(jù)If-Range后面給出的Etag判斷),就發(fā)送這個(gè)資源中在瀏覽器缺少了的某些部分給瀏覽器,如果該資源以及被修改過(guò),則將整個(gè)資源重新發(fā)送一份給瀏覽器。

If-Unmodified-Since:詢問(wèn)服務(wù)器現(xiàn)在正在請(qǐng)求的資源在某個(gè)時(shí)刻以來(lái)是否沒(méi)有被修改過(guò)。

Max-Forwards:限制請(qǐng)求信息在代理服務(wù)器或網(wǎng)關(guān)中向前傳遞的次數(shù)。

Pragma:好像只有一個(gè)值,就是:no-cache。Pragma:no-cache 與cache-control:no-cache相同,只不過(guò)cache-control:no-cache是http1.1專門指定的,而Pragma:no-cache可以在http1.0和1.1中使用

Proxy-Authorization:連接到某個(gè)代理時(shí)使用的身份認(rèn)證信息,跟Authorization頭差不多。例如:Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

Range:在HTTP頭中,"Range"字眼都表示“資源的byte形式數(shù)據(jù)的順序排列,并且取其某一段數(shù)據(jù)”的意思。Range頭就是表示請(qǐng)求資源的從某個(gè)數(shù)值到某個(gè)數(shù)值間的數(shù)據(jù),例如:Range: bytes=500-999 就是表示請(qǐng)求資源從500到999byte的數(shù)據(jù)。數(shù)據(jù)的分段下載和多線程下載就是利用這個(gè)實(shí)現(xiàn)的。

Referer:指當(dāng)前請(qǐng)求的URL是在什么地址引用的。例如在www.a.com/index.html頁(yè)面中點(diǎn)擊一個(gè)指向www.b.com的超鏈接,那么,這個(gè)www.b.com的請(qǐng)求中的Referer就是www.a.com/index.html。通常我們見(jiàn)到的圖片防盜鏈就是用這個(gè)實(shí)現(xiàn)的。

Upgrade:請(qǐng)求服務(wù)器更新至另外一個(gè)協(xié)議,例如:Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

User-Agent:通常就是用戶的瀏覽器相關(guān)信息。例如:User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0

Via:用來(lái)記錄一個(gè)請(qǐng)求經(jīng)過(guò)了哪些代理或網(wǎng)關(guān)才被送到目標(biāo)服務(wù)器上。例如一個(gè)請(qǐng)求從瀏覽器出發(fā)(假設(shè)使用http/1.0),發(fā)送給名為 SomeProxy的內(nèi)部代理,然后被轉(zhuǎn)發(fā)至www.somenet.com的公共代理(使用http/1.1),最后被轉(zhuǎn)發(fā)至目標(biāo)服務(wù)器www.someweb.com,那么在someweb.com中收到的via 頭應(yīng)該是: via:1.0 someProxy 1.1 www.someweb.com(apache 1.1)

Warning:記錄一些警告信息。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論