rewrite 功能
實現URL地址改寫
語法:
rewrite regex replacement [flag];
flag標記:
last: 完成重寫后,重寫后的,把重寫后的地址,再次發給nginx服務器,如果被rewrite匹配到,又會改寫
break: 一旦此rewrite規則重寫完成之后,就直接進行后續處理

redirect: 將重寫后的URI返回給客戶端,狀態碼為302,指明臨時重定向
permanent:
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
}
案例:
1)
location ^~ /images/ {
root /vhosts;
rewrite ^/images/(.*\.png)$ /imgs/$1 break;
}
2) 域名跳轉
server {
listen 80;
server_name www.myweb.com;
root /vhosts/web2/;
}
server {
listen 80;
server_name www.a.com;
rewrite ^/ http://www.myweb.com/ break;
location / {
root "/vhosts/web1";
}
當客戶端訪問www.a.com 瀏覽器會直接跳轉到www.myweb.com
server {
listen 80;
server_name www.a.com mall.a.com;
if ($http_host ~* ^(.*)\.a\.com$)
{
rewrite ^(.*) http://www.myweb.com$1;
break;
}
當客戶端訪問http://www.a.com/images/svn.png URL被nginx服務器重寫成http://www.myweb.com/images/svn.png
3) 鏡像

4)當訪問http://bbs.a.com/ 時跳轉到http://www.a.com/bbs/
server {
listen 80;
server_name bbs.a.com;
location / {
if ( $http_host ~* "^(.*)\.a\.com" ) {
rewrite ^/(.*)$ http://www.a.com/$1 permanent;
}
}
}
二)指令
1)if指令
該指令用來支持條件判斷,并根據條件判斷結果選擇不同的nginx配置
if (condition) { ... }
condition: 為判斷條件,有如下設置方式
a:變量名
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
b:使用比較運輸費(=,!=)

c: 判斷請求文件是否存在
-f 如果文件存在,if條件為true
-e如果請求目錄或文件存在,if條件為true
-x如果請求文件有執行權限,if條件為true

三)Rewrite常用的全局變量
$args : #這個變量等于請求行中的參數,同$query_string
$content_length : 請求頭中的Content-length字段。
$content_type : 請求頭中的Content-Type字段。
$document_root : 當前請求在root指令中指定的值。
$host : 請求主機頭字段,否則為服務器名稱。
$http_user_agent : 客戶端agent信息
$http_cookie : 客戶端cookie信息
$limit_rate : 這個變量可以限制連接速率。
$request_method : 客戶端請求的動作,通常為GET或POST。
$remote_addr : 客戶端的IP地址。
$remote_port : 客戶端的端口。
$remote_user : 已經經過Auth Basic Module驗證的用戶名。
$request_filename : 當前請求的文件路徑,由root或alias指令與URI請求生成。
$scheme : HTTP方法(如http,https)。
$server_protocol : 請求使用的協議,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服務器地址,在完成一次系統調用后可以確定這個值。
$server_name : 服務器名稱。
$server_port : 請求到達服務器的端口號。
$request_uri : 包含請求參數的原始URI,不包含主機名,如:”/foo/bar.php?arg=baz”。
$uri : 不帶請求參數的當前URI,$uri不包含主機名,如”/foo/bar.html”。
$document_uri : 與$uri相同。
常用的正則
. 匹配除換行符以外的任意字符
? 重復0次或1次
+ 重復1次或多次
* 重復0次或多次
\d 匹配數字
^ 以什么開始
$ 以什么結束
{n} 重復n次
{n,} 至少重復n次
[c] 匹配單個字符
[a-z] 匹配所有小寫字母
[[:alpha:]] [[:digist:]] [[:alnum:]] [[:space:]]
- 第一部分:Nginx Web服務
- 第一章: Nginx的初探
- 第二章:Nginx的安裝部署
- 第一節:在centos6上通過Yum安裝Nginx
- 第二節:在Centos7上通過Yum安裝nginx
- 第三節:編譯安裝Nginx服務
- 第四節: Nginx編譯參數詳解
- 第五節: Nginx的啟動腳本
- 第六節:Nginx的shell腳本安裝
- 第七節:nginx服務的平滑升級
- 第三章:Nginx服務基礎配置
- 第一節: 配置運行nginx服務器用戶
- 第二節:配置運行生成的worker processes進程數
- 第三節:配置Nginx進程PID存放路徑
- 第四節:定義MIME類型
- 第五節:自定義nginx的訪問日志
- 第六節:主配置段(main)常用的配置
- 第七節:http段(核心)常用的配置命令
- 第八節:配置nginx中的location段
- 第九節: 基于IP的訪問控制
- 第十節:基于用戶的訪問控制
- 第十一節:Nginx定義status狀態頁
- 第十二節:Nginx服務器Rewrite重寫
- 第十三節:Nginx服務配置防盜鏈
- 第十四節:nginx軟件的優點
- 第四章:Nginx服務器的優化配置
- 第一節:nginx.conf配置文件基本參數優化
- 第二節:fastcgi調優
- 第三節:Gzip調優
- 第四節:expires緩存調優
- 第五節:內核參數優化
- 第六節: Nginx之——413 修改上傳文件大小限制
- 第五章:Nginx虛擬主機的配置
- 第一節:基于名稱的虛擬主機
- 第二節:通過shell腳本添加虛擬主機
- 第六章:Nginx常用模塊指令詳解
- 第一節:ngx_http_realip_module
- 第二節:http_image_filter_module
- 第三節:tengine中配置consistent hash module
- 第四節:ngx_http_userid_module
- 第七章:Nginx服務器配置HTTPS訪問
- 第八章: Nginx服務器日志切割
- 第二部分:Nginx負載均衡反向代理服務
- 第一章:Nginx進階參數詳解
- 第一節:proxy_module參數詳解
- 第二節:upstream_module參數詳解
- 第四章:Nginx反向代理服務
- 第一節:Nginx反向代理配置參數詳解
- 第二節:Nginx反向代理服務配置案例
- 第三節:Nginx緩存
- 第四節: Nginx中fastcgi模塊
- 第五節:nginx+fastcgi實現動靜分離架構
- 第五章:Nginx負載均衡
- 第一節:ngx_http_upstream_module常見指令
- 第二節:調度方法
- 第三節:健康狀態檢查