亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解nginx配置url重定向-反向代理

 更新時間:2016年12月14日 10:56:14   作者:shuocaocao  
這篇文章主要介紹了詳解nginx配置url重定向-反向代理 ,nginx的重定向和nginx的反向代理的原理還是有區(qū)別的。有興趣的可以了解一下。

本文系統(tǒng):Centos6.5_x64

三臺主機:nginx主機,hostname: master.lansgg.com  IP: 192.168.10.128  
          apache主機,hostname: client1.lansgg.com IP:  192.168.10.129

一、nginx 地址重定向

二、nginx 反向代理

1、地址重定向:是指當使用者瀏覽某個網(wǎng)址時,將他導向到另一個網(wǎng)址的技術(shù)。常用在把一串很長的網(wǎng)址,轉(zhuǎn)成較短的網(wǎng)址。因為當要傳播某網(wǎng)站時,常常因為網(wǎng)址太長,不好記憶;又有可能因為換了網(wǎng)路的免費網(wǎng)頁空間,網(wǎng)址又必須要變更,不知情的使用者還以為網(wǎng)站關(guān)閉了。這時就可以用網(wǎng)路上的轉(zhuǎn)址了。這個技術(shù)使一個網(wǎng)頁是可借由不同的統(tǒng)一資源定位符(URL)連結(jié)。

1.1、這 個模塊允許使用正則表達式重寫URI(需PCRE庫),并且可以根據(jù)相關(guān)變量重定向和選擇不同的配置。如果這個指令在server字段中指定,那么將在被 請求的location確定之前執(zhí)行,如果在指令執(zhí)行后所選擇的location中有其他的重寫規(guī)則,那么它們也被執(zhí)行。如果在location中執(zhí)行這 個指令產(chǎn)生了新的URI,那么location又一次確定了新的URI。這樣的循環(huán)可以最多執(zhí)行10次,超過以后nginx將返回500錯誤

正則表達式匹配,其中:

* ~ 為區(qū)分大小寫匹配

* ~* 為不區(qū)分大小寫匹配

* !~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配

文件及目錄匹配,其中:

* -f和!-f用來判斷是否存在文件

* -d和!-d用來判斷是否存在目錄

* -e和!-e用來判斷是否存在文件或目錄

* -x和!-x用來判斷文件是否可執(zhí)行

flag標記有:
* last 相當于Apache里的[L]標記,表示完成rewrite

* break 終止匹配, 不再匹配后面的規(guī)則

* redirect 返回302臨時重定向 地址欄會顯示跳轉(zhuǎn)后的地址

* permanent 返回301永久重定向 地址欄會顯示跳轉(zhuǎn)后的地址

一些可用的全局變量有,可以用做條件判斷

$args, 請求中的參數(shù);
$content_length, HTTP請求信息里的"Content-Length";
$content_type, 請求信息里的"Content-Type";
$document_root, 針對當前請求的根路徑設置值;
$document_uri, 與$uri相同;
$host, 請求信息中的"Host",如果請求中沒有Host行,則等于設置的服務器名;
$limit_rate, 對連接速率的限制;
$request_method, 請求的方法,比如"GET"、"POST"等;
$remote_addr, 客戶端地址;
$remote_port, 客戶端端口號;
$remote_user, 客戶端用戶名,認證用;
$request_filename, 當前請求的文件路徑名
$request_body_file
$request_uri, 請求的URI,帶查詢字符串;
$query_string, 與$args相同;
$scheme, 所用的協(xié)議,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_protocol, 請求的協(xié)議版本,"HTTP/1.0"或"HTTP/1.1";
$server_addr, 服務器地址,如果沒有用listen指明服務器地址,使用這個變量將發(fā)起一次系統(tǒng)調(diào)用以取得地址(造成資源浪費);
$server_name, 請求到達的服務器名;
$server_port, 請求到達的服務器端口號;
$uri, 請求的URI,可能和最初的值有不同,比如經(jīng)過重定向之類的。

rewrite 指令:可以使用在 server, location, if 區(qū)域;

語法:rewrite regex replacement flag

按照相關(guān)的正則表達式與字符串修改URI,指令按照在配置文件中出現(xiàn)的順序執(zhí)行。 

可以在重寫指令后面添加標記。 

如果替換的字符串以http://開頭,請求將被重定向,并且不再執(zhí)行多余的rewrite指令。 

尾部的標記(flag)可以是以下的值:

  • last - 完成重寫指令,之后搜索相應的URI或location。
  • break - 完成重寫指令。
  • redirect - 返回302臨時重定向,如果替換字段用http://開頭則被使用。
  • permanent - 返回301永久重定向。

注 意如果一個重定向是相對的(沒有主機名部分),nginx將在重定向的過程中使用匹配server_name指令的“Host”頭或者 server_name指令指定的第一個名稱,如果頭不匹配或不存在,如果沒有設置server_name,將使用本地主機名,如果你總是想讓nginx 使用“Host”頭,可以在server_name使用“*”通配符(查看http核心模塊中的server_name)。例如:

rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;

但是如果我們將其放入一個名為/download/的location中,則需要將last標記改為break,否則nginx將執(zhí)行10次循環(huán)并返回500錯誤。

location /download/ {
 rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
 rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
 return 403;
}

如果替換字段中包含參數(shù),那么其余的請求參數(shù)將附加到后面,為了防止附加,可以在最后一個字符后面跟一個問號:

rewrite ^/users/(.*)$ /show?user=$1? last;

注意:大括號({和}),可以同時用在正則表達式和配置塊中,為了防止沖突,正則表達式使用大括號需要用雙引號(或者單引號)。例如要重寫以下的URL:

/photos/123456

為:

/path/to/photos/12/1234/123456.png

則使用以下正則表達式(注意引號):

rewrite "/photos/([0-9] {2})([0-9] {2})([0-9] {2})" /path/to/photos/$1/$1$2/$1$2$3.png;

如果指定一個“?”在重寫的結(jié)尾,Nginx將丟棄請求中的參數(shù),即變量$args,當使用$request_uri或$uri&$args時可以在rewrite結(jié)尾使用“?”以避免nginx處理兩次參數(shù)串。 

在rewrite中使用$request_uri將www.example.com重寫到example.com:

server {
 server_name www.example.com;
 rewrite ^ http://example.com$request_uri? permanent;
}

同樣,重寫只對路徑進行操作,而不是參數(shù),如果要重寫一個帶參數(shù)的URL,可以使用以下代替:

if ($args ^~ post=100){
 rewrite ^ http://example.com/new-address.html? permanent;
}

注意$args變量不會被編譯,與location過程中的URI不同(參考http核心模塊中的location)

示例:當訪問www.lansgg.com的時候跳轉(zhuǎn)到www.Aries.com;

 server {
  listen 80 default_server;
  server_name  www.lansgg.com lansgg.com;
  access_log  logs/lansgg.access.log main;
  error_log  logs/lansgg.error.log;
  root   /opt/nginx/nginx/html/lansgg;
  index index.html;
  rewrite ^/ http://www.Aries.com/;
  }

break 指令 可使用server, location, if 區(qū)域; 中止Rewirte,不在繼續(xù)匹配

last 指令 可server, location, if  區(qū)域;

last與break的區(qū)別在于,last并不會停止對下面location的匹配。

測驗一下break與last的區(qū)別

 server {
 listen 80 default_server;
 server_name www.lansgg.com lansgg.com;
 access_log logs/lansgg.access.log main;
 error_log logs/lansgg.error.log;
 root  /opt/nginx/nginx/html/lansgg;
 index index.html;
 location /c1.html {
 rewrite /c1.html /c2.html break;
 }
 location /c2.html {
 return 508;
 }
 }
[root@master sbin]# echo "c1" > /opt/nginx/nginx/html/lansgg/c1.html
[root@master sbin]# echo "c2" > /opt/nginx/nginx/html/lansgg/c2.html

使用break會停止匹配下面的location,直接發(fā)起請求www.lansgg.com/c1.html,他會顯示c2的內(nèi)容;


wKiom1ReJwmg3h4tAABlg5WLTFc650.jpg  

使用last的話,會繼續(xù)搜索下面是否有符合條件(符合重寫后的/c2.html請求)的location。此時,/c2.html剛好與面location的條件對應上了,進入花括號{}里面的代碼執(zhí)行,這里會返回508。

 server {
 listen 80 default_server;
 server_name www.lansgg.com lansgg.com;
 access_log logs/lansgg.access.log main;
 error_log logs/lansgg.error.log;
 root  /opt/nginx/nginx/html/lansgg;
 index index.html;
 location /c1.html {
 rewrite /c1.html /c2.html last;
 }
 location /c2.html {
 return 508;
 }
 }

使用firebug 可以看到;

wKiom1ReJ_bR_WwhAACvgot1dVM022.jpg

if 指令 可使用server, location 區(qū)域;

示例:當訪問http://www.lansgg.com網(wǎng)址的時候跳轉(zhuǎn)到www.Aries.com;

 server {
  listen 80 default_server;
  server_name  www.lansgg.com lansgg.com;
  access_log  logs/lansgg.access.log main;
  error_log  logs/lansgg.error.log;
  root   /opt/nginx/nginx/html/lansgg;
  index index.html;
  if ($http_host = www.lansgg.com){
  rewrite (.*) http://www.Aries.com;
  }
  }

wKioL1ReMavwbbrPAAEAO-or-Mg289.jpg

return 指令 可使用server, location, if  區(qū)域

語法:return code 

這個指令結(jié)束執(zhí)行配置語句并為客戶端返回狀態(tài)代碼,可以使用下列的值:204,400,402-406,408,410, 411, 413, 416與500-504。此外,非標準代碼444將關(guān)閉連接并且不發(fā)送任何的頭部。

rewrite_log  指令  可使用server, location, if  區(qū)域

啟用時將在error log中記錄notice 標記的重寫日志。

set 指令 可使用server, location, if  區(qū)域

語法:set variable value 

指令設置一個變量并為其賦值,其值可以是文本,變量和它們的組合。 

你可以使用set定義一個新的變量,但是不能使用set設置$http_xxx頭部變量的值。

uninitialized_variable_warn 指令 可使用 http, server, location, if  區(qū)域

語法:uninitialized_variable_warn on|off 

默認值:uninitialized_variable_warn on 

開啟或關(guān)閉在未初始化變量中記錄警告日志。 

事實上,rewrite指令在配置文件加載時已經(jīng)編譯到內(nèi)部代碼中,在解釋器產(chǎn)生請求時使用。 

expires 指令 可 http, server, location 區(qū)域

語法: expires [time|epoch|max|off]

默認值: expires off

該指令可以控制HTTP應答中的“Expires”和“Cache-Control”的頭標,(起到控制頁面緩存的作用)??梢栽趖ime值中使用正數(shù)或負數(shù)?!癊xpires”頭標的值將通過當前系統(tǒng)時間加上設定的 time 值來獲得。

epoch 指定“Expires”的值為 1 January, 1970, 00:00:01 GMT。

max 指定“Expires”的值為 31 December 2037 23:59:59 GMT,“Cache-Control”的值為10年。

-1 指定“Expires”的值為 服務器當前時間 -1s,即永遠過期

“Cache-Control”頭標的值由指定的時間來決定:

    負數(shù):Cache-Control: no-cache

    正數(shù)或零:Cache-Control: max-age = #, # 為指定時間的秒數(shù)s。其他的單位有d(天),h(小時)

"off" 表示不修改“Expires”和“Cache-Control”的值

控制圖片等過期時間為30天,這個時間可以設置的更長。具體視情況而定

location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
   log_not_found off; #不記錄404 not found 錯誤日志   expires 30d;
   break;  }

控制匹配/resource/或者/mediatorModule/里所有的文件緩存設置到最長時間

  location ~ /(resource|mediatorModule)/ {
    root /opt/demo;
    expires max;
  }

設定某個文件的過期時間;這里為600秒,并不記錄訪問日志

location ^~ /html/scripts/loadhead_1.js {
access_log off;
root /opt/lampp/htdocs/web;
expires 600;
break;
}

設置GZIP

一般情況下壓縮后的html、css、js、PHP、jhtml等文件,大小能降至原來的25%,也就是說,原本一個100k的html,壓縮后只剩下25k。這無疑能節(jié)省很多帶寬,也能降低服務器的負載。

在nginx中配置gzip比較簡單

一般情況下只要在nginx.conf的http段中加入下面幾行配置即可

 gzip on;
 gzip_min_length 1000;
 gzip_buffers  48k;
 gzip_types  text/plain application/x-javascript text/css text/html application/xml;

可以通過網(wǎng)頁gzip檢測工具來檢測網(wǎng)頁是否啟用了gzip

臨時重定向示例:訪問www.lansgg.com/c 重定向到www.lansgg.com/cc

編輯nginx.conf

 server {
  listen 80 default_server;
  server_name  www.lansgg.com lansgg.com;
  access_log  logs/lansgg.access.log main;
  error_log  logs/lansgg.error.log;
  root   /opt/nginx/nginx/html/lansgg;
  index index.html;
  rewrite ^/c/(.*)$ http://www.lansgg.com/cc/$1;
  }
   
[root@master lansgg]# tree
.
├── c
│ └── index.html
├── cc
│ └── index.html
├── index.html
└── it.jpg
 
2 directories, 4 files

訪問http://www.lansgg.com/c 會跳轉(zhuǎn)到http://www.lansgg.com/cc
wKioL1RePF6hWtH5AAFKE7zHvzw477.jpg

302即為臨時重定向;

永久重定向(隱含重定向)

編輯nginx.conf

 server {
  listen 80 default_server;
  server_name  www.lansgg.com lansgg.com;
  access_log  logs/lansgg.access.log main;
  error_log  logs/lansgg.error.log;
  root   /opt/nginx/nginx/html/lansgg;
  index index.html;
  rewrite ^/c/(.*)$ /cc/$1;
  }

訪問 http://www.lansgg.com/c/ 頁面顯示的是跳轉(zhuǎn)后的頁面,可是url卻沒有變化;firebug也看不到302代碼信息;現(xiàn)在它其實是301;

2、反向代理:是指以代理服務器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡上的服務器,并將從服務器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個服務器。

2.1、配置nginx實現(xiàn)反向代理;

需求:訪問http://192.168.10.128/other 返回 apache主機的other目錄下的Index.html

wKioL1Rd21mwBFavAAIkMKYLkDs383.jpg

涉及nginx指令:

語法:proxy_pass URL   

可使用字段:location, location中的if字段      

這個指令設置被代理服務器的地址和被映射的URI,地址可以使用主機名或IP加端口號的形式,例如:proxy_pass http://192.168.10.129/url

2.2、配置nginx配置文件nginx.conf

 server {
 listen 80 default_server;
 server_name www.lansgg.com lansgg.com;
 access_log logs/lansgg.access.log main;
 error_log logs/lansgg.error.log;
 root  /opt/nginx/nginx/html/lansgg;
 location / {
  index index.html;
  }
 location /other {
 proxy_pass   http://192.168.10.129/other;
 proxy_set_header X-Real-IP $remote_addr; 
  }
 }

2.3、配置client1

mkdir /var/www/html/other
echo "192.168.10.129" > /var/www/html/other/index.html

2.4、測試;

訪問url:    http://www.lansgg.com/other     你會發(fā)現(xiàn)跳轉(zhuǎn)到了 : http://192.168.10.129/other/

wKiom1Rd6hKzwCh2AAB13d4xNOk488.jpg

查看日志:

[root@client1 ~]# tail -f /var/log/httpd/access_log 
192.168.10.1 - - [06/Nov/2014:21:25:44 +0800] "GET /other/ HTTP/1.1" 200 15 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux下Nginx安裝教程

    Linux下Nginx安裝教程

    這篇文章主要為大家詳細介紹了Linux中Nginx的安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • nginx部署vue項目,給訪問路徑加前綴的實現(xiàn)

    nginx部署vue項目,給訪問路徑加前綴的實現(xiàn)

    這篇文章主要介紹了nginx部署vue項目,給訪問路徑加前綴的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用nginx搭建點播和直播流媒體服務器的方法步驟

    使用nginx搭建點播和直播流媒體服務器的方法步驟

    本篇文章主要介紹了使用nginx搭建點播和直播流媒體服務器的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Nginx的rewrite模塊詳解

    Nginx的rewrite模塊詳解

    這篇文章主要介紹了Nginx的rewrite模塊詳解,有感興趣的同學可以研究下
    2021-02-02
  • angular6+springboot實現(xiàn)前后分離nginx配置

    angular6+springboot實現(xiàn)前后分離nginx配置

    這篇文章主要介紹了angular6+springboot實現(xiàn)前后分離nginx配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 使用nginx動態(tài)轉(zhuǎn)換圖片大小生成縮略圖

    使用nginx動態(tài)轉(zhuǎn)換圖片大小生成縮略圖

    這篇文章主要介紹了使用nginx動態(tài)轉(zhuǎn)換圖片大小生成縮略圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 在Nginx用htpasswd對網(wǎng)站進行密碼保護的設置方法

    在Nginx用htpasswd對網(wǎng)站進行密碼保護的設置方法

    很多時候我們需要對一些網(wǎng)站進行密碼保護,比如團隊內(nèi)部的站點、demo站點等等。這里所說的密碼保護是服務器級的,并非網(wǎng)站應用層的注冊登錄那一套,而是利用服務器配置和htpasswd文件來實現(xiàn)訪問的密碼驗證
    2013-06-06
  • nginx centos 服務開機啟動設置實例詳解

    nginx centos 服務開機啟動設置實例詳解

    這篇文章主要介紹了nginx centos 服務開機啟動設置實例詳解的相關(guān)資料,這里對服務開機啟動做了詳細的步驟介紹,需要的朋友可以參考下
    2016-11-11
  • Nginx 中實現(xiàn)請求的排隊機制的過程詳解

    Nginx 中實現(xiàn)請求的排隊機制的過程詳解

    Nginx中的請求排隊機制就像是交通警察指揮交通一樣,讓網(wǎng)絡流量有序地流動,保障服務器的穩(wěn)定運行和用戶的良好體驗,在深入探討 Nginx 中的請求排隊機制之前,咱們先來弄明白到底什么是請求的排隊機制,帶著這個問題一起通過本文學習吧
    2024-07-07
  • nginx鏡像構(gòu)建的知識點及方法步驟詳解

    nginx鏡像構(gòu)建的知識點及方法步驟詳解

    這篇文章主要為大家介紹了nginx鏡像構(gòu)建的知識點詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論