10.12-10.16 rewrite配置if,break和last的用法,規則,nginx全局變量

10.12-10.15 rewrite配置if,break和last的用法,rewrite規則,Nginx全局變量


Nginx的Rwrite配置


加粗 域名跳轉(重定向)、URL重寫(僞靜態)、動靜分離(跳轉域名,並接入CDN實現加速)

  • 依賴PCRE庫

  • 模塊:ngx_http_rewrite_module

加粗 Rwrite相關指令

開啓rewrite日誌記錄:

  • 1.在server加入 rewrite_log on;

  • 2.在nginx.conf 配置error_log logs/nginx_error.log notice; notice會記錄rewrite錯誤信息

配置:

 vim nginx/conf/nginx.conf
error_log logs/nginx_error.log notice;
vim nginx/conf/vhost/1.com_default.conf 
server{
        listen 80;
        server_name *.1.com 1.com;
        index index.html 80.html;
        root /data/t-nginx/1.com;
        rewrite_log on;
        rewrite /1.html /2.html ;
        rewrite /2.html /3.html ;
       }
# curl -x127.0.0.1:80 1.com/1.html
3333
  • 3.當我們請求1.html時,最終訪問到的是3.html,兩條rewrite規則先後執行。

   

tail nginx/logs/nginx_error.log   
2018/10/22 11:21:00 [notice] 20967#0: *1906 "/1.html" matches "/1.html", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"
2018/10/22 11:21:00 [notice] 20967#0: *1906 rewritten data: "/2.html", args: "", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"
2018/10/22 11:21:00 [notice] 20967#0: *1906 "/2.html" matches "/2.html", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"
2018/10/22 11:21:00 [notice] 20967#0: *1906 rewritten data: "/3.html", args: "", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"

日誌解釋:

""爲分界,左邊規則,右邊匹配


return 後面跟狀態碼、URL、text(支持變量)https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/return.md 

反饋字符串可以這樣寫


return  200 "it's 200";

格式:return 狀態碼 "字符串";


Rwrite相關全局變量

https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/variable.md 

nginx 常用全局變量

變量說明
$args請求中的參數,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2
$content_lengthHTTP請求信息裏的”Content-Length”
$conten_typeHTTP請求信息裏的”Content-Type”
$document_rootnginx虛擬主機配置文件中的root參數對應的值
$document_uri當前請求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的$document_uri就是1.php,不包含後面的參數
$host主機頭,也就是域名
$http_user_agent客戶端的詳細信息,也就是瀏覽器的標識,用curl -A可以指定
$http_cookie客戶端的cookie信息
$limit_rate如果nginx服務器使用limit_rate配置了顯示網絡速率,則會顯示,如果沒有設置, 則顯示0
$remote_addr客戶端的公網ip
$remote_port客戶端的port
$remote_user如果nginx有配置認證,該變量代表客戶端認證的用戶名
$request_body_file做反向代理時發給後端服務器的本地資源的名稱
$request_method請求資源的方式,GET/PUT/DELETE等
$request_filename當前請求的資源文件的路徑名稱,相當於是$document_root/$document_uri的組合
$request_uri請求的鏈接,包括$document_uri和$args
$scheme請求的協議,如ftp,http,https
$server_protocol客戶端請求資源使用的協議的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr服務器IP地址
$server_name服務器的主機名
$server_port服務器的端口號
$uri和$document_uri相同
$http_referer客戶端請求時的referer,通俗講就是該請求是通過哪個鏈接跳過來的,用curl -e可以指定

return 200 可以搭配全局變量

格式:

return 200 "全局變量";

例如:

return 200 "$args";

配置參考如下:

server {
        listen 80;
        server_name 2.com;
        root /data/t-nginx/2.com;
        return 200 "$args";
        }
[root@AliKvn vhost]# curl -x127.0.0.1:80 '2.com/2.php?1=a&2=b'
1=a&2=b[root@AliKvn vhost]#

其中1=a&2=b,就是"$args"的變量值了, 其他變量也可以用這鐘方法取值


例如:

return 200 "$document_uri";
server {
        listen 80;
        server_name 2.com;
        root /data/t-nginx/2.com;
        return 200 "$document_uri";
        }
nginx -s reload
[root@AliKvn vhost]# !curl
curl -x127.0.0.1:80 '2.com/2.php?1=a&2=b'
/2.php[root@AliKvn vhost]#

那麼2.php就是$document_uri了


以上變量,可以組合在一起。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章