nginx變量
nginx變量命名,以$開頭。
舉例:'nginx.conf 文件'中有下面這一行配置:
set $var "hello world";
特點:我們看到,'Nginx 變量名'前面'有一個 $ 符號',這是'語法上'的要求
強調(diào):所有的 'Nginx 變量'在 Nginx 配置文件中'引用時都須帶上 $ 前綴',這種表示方法和'Perl、PHP' 這些語言是'相似'的
變量賦值
舉例:'nginx.conf 文件'中有下面這一行配置:
set $var "hello world";
特點:我們看到,'Nginx 變量名'前面'有一個 $ 符號',這是'語法上'的要求
強調(diào):所有的 'Nginx 變量'在 Nginx 配置文件中'引用時都須帶上 $ 前綴',這種表示方法和'Perl、PHP' 這些語言是'相似'的
打印日志(打印變量)
打印日志的目的,是想知道某個變量的值是多少,通過add_header設(shè)置響應(yīng)頭,間接地打印日志。
通過設(shè)置響應(yīng)頭,然后在瀏覽器上請求nginx地址,然后得到的響應(yīng)頭,就知道變量值是多少了。
location / {
proxy_pass http://127.0.0.1:8085;
add_header mmm "123";
set $test "456";
add_header nnn $test;
}
}
Nginx特有的語法
這個需要注意一下,特別是正則 ~?,后面截取字符串需要用到。
模式 |
含義 |
?= |
=?表示精確匹配 |
?^~ |
^?進行前綴匹配,~ 表示區(qū)分大小寫 |
?~? |
~?區(qū)分大小寫的正則匹配 |
?~*? |
~*?不區(qū)分大小寫的正則匹配 |
?!~ |
區(qū)分大小寫不匹配 |
?!~* |
不區(qū)分大小寫不匹配 |
?
?Nginx變量截取字符串,拼接字符串
同樣是間接的方式,核心思想,使用正則()匹配,然后使用$1、$2、$3...取值。
比如有個字符串,A123B789C,使用正則表達式,A(\d+)B(\d+)C,然后就可以使用$1取值為123,$2取值為789
location / {
proxy_pass http://127.0.0.1:8085;
#定義一個變量$myname,為空字符
set $myname "";
#定義一個變量為測試字符串
set $user "A123B789C";
#使用正則匹配
if ( $user ~ A(\d+)B(\d+)C ) {
# set $mmm $1;
# set $nnn $2;
#字符串的連接直接挨著就行了,不需要連接符。
set $myname $1$2;
}
#間接打印日志,前臺ccc 響應(yīng)頭的值為:123789
add_header ccc $myname;
}
這里需要注意,基礎(chǔ)的正則表達式語法都是通用的。比如,+表示1個或者多個,*表示0個或者多個,.表示任意字符,\d表示數(shù)字。
獲取請求頭的參數(shù)
須要在header名稱前面加上固定前綴“http_“,并將header名稱中的“-”中劃線變?yōu)橄聞澗€
?
?請求頭取值如下:
location / {
proxy_pass http://127.0.0.1:8085;
add_header aaa $http_Pragma;
add_header bbb $http_Cache_Control;
}
添加修改HTTP請求頭
location / {
proxy_pass http://127.0.0.1:8085;
proxy_set_header User-Agent "My Custom User Agent";
proxy_set_header kk "123";
}
添加修改HTTP響應(yīng)頭
location / {
add_header X-Custom-Header "Hello, World!";
add_header X-Powered-By Nginx;
add_header Cache-Control no-store;
}
刪除HTTP響應(yīng)頭
location / {
proxy_pass http://backend;
proxy_hide_header X-Powered-By;
}
內(nèi)置變量
$remote_addr;
存放了'客戶端的地址',注意是客戶端的公網(wǎng)IP,也就是一家人訪問一個網(wǎng)站,則會顯示為'路由器的公網(wǎng)IP'
$args;
變量中存放了'請求行中(GET請求)的參數(shù)',例如http://node101.yinzhengjie.org.cn/main/index.do?'id=20190221&partner=search'中的id=20190221&partner=search
$document_root;
保存了針對'當(dāng)前資源的請求'的'系統(tǒng)根目錄',如/apps/nginx/html -->對應(yīng)'root'指令
$document_uri;
保存了當(dāng)前請求中'不包含指令的URI',注意是'不包含請求'的指令,比如http://node101.yinzhengjie.org.cn/main/index.do?id=20190221&partner=search會'被定義為/main/index.do'
$host;
存放了'請求的host名稱'
$http_user_agent;
'客戶端瀏覽器'的詳細信息
$http_cookie;
'客戶端的cookie'信息
limit_rate 10240;
echo $limit_rate;
如果nginx服務(wù)器使用limit_rate配置了'顯示網(wǎng)絡(luò)速率',則會顯示,如果'沒有設(shè)置',則'顯示0'
$remote_port;
客戶端請求Nginx服務(wù)器時'隨機打開的端口',這是每個'客戶端自己的端口'
$remote_user;
已經(jīng)'經(jīng)過Auth Basic Module驗證'的用戶名
$request_body_file;
做'反向代理'時發(fā)給'后端服務(wù)器的本地資源'的名稱
$request_method;
請求'資源的方式',GET、PUT、DELETE等
$request_filename;
當(dāng)前'請求的資源文件的路徑'名稱,由root或alias指令與URI請求生成的文件'絕對路徑',如:/apps/nginx/html/main/index.html
$request_uri;
包含'請求參數(shù)'的原始URI,'不包含主機名',如:/main/index.do?id=20190221&partner=search
$scheme;
請求的'協(xié)議',如ftp、https、http等
$server_protocol;
保存了'客戶端請求資源'使用的協(xié)議的版,如HTTP/1.0、'HTTP/1.1'、HTTP/2.0等
$server_addr;
保存了'服務(wù)器的IP地址'
$server_name;
請求的'服務(wù)器的主機名'
$server_port;
請求的'服務(wù)器的端口號'
+++++++++++++++'補充知識點'+++++++++++++++
$arg_name 請求中的'name參數(shù)'-->請求的參數(shù)的名字,根據(jù)'具體情況'而定
$binary_remote_addr 遠程地址的'二進制'表示
$body_bytes_sent 已發(fā)送的'消息體'字節(jié)數(shù)
$content_length HTTP請求信息里的"Content-Length"
$content_type 請求信息里的"Content-Type"
$host 請求信息中的"Host",如果請求中沒有Host行,則等于設(shè)置的服務(wù)器名
$http_referer '引用地址'
$http_via '最后'一個訪問服務(wù)器的'ip地址'
$is_args 如果請求行'帶有參數(shù)',返回"?",否則'返回空字符串'
$nginx_version 當(dāng)前運行的nginx版本號
$pid 'worker進程'的PID
$query_string 與$args'相同'
$realpath_root 按root指令或alias指令算出的'當(dāng)前請求的絕對路徑',其中的'符號鏈接'都會解析成真是文件路徑
$request '用戶請求'
$request_body 這個變量(0.7.58+)包含'請求的主要信息',在使用proxy_pass或fastcgi_pass指令的location中'比較有意義'
$request_body_file 客戶端'請求主體'信息的'臨時文件名'
$request_completion 如果'請求成功',設(shè)為"OK";如果'請求未完成'或者'不是'一系列請求中最后一部分則設(shè)為空
$request_filename 當(dāng)前請求的文件路徑名,比如/opt/nginx/www/test.php
$request_uri 請求的URI,'帶參數(shù)'; 比如http://localhost:88/test1/
$uri 請求的URI,可能'和最初的值有不同',比如經(jīng)過'重定向'之類的
$http_name 用來獲取'任意請求頭'的值
?
參考:
Nginx配置HTTP響應(yīng)頭修改和添加 | ModStart
Nginx 獲取自定義請求header頭和URL參數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-528390.html
Nginx(十一)變量_nginx 打印變量_wzj_110的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-528390.html
到了這里,關(guān)于nginx腳本,Nginx變量截取字符串,拼接字符串,nginx打印日志,添加修改HTTP請求頭,添加修改HTTP響應(yīng)頭的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!