1. 程式人生 > 實用技巧 >十、nginx的變數說明

十、nginx的變數說明

nginx的變數可以在配置檔案中引用,作為功能判斷或者日誌等場景使用,變數可以分為內建變數和自定義變數,內建變數是由nginx模組自帶,通過變數可以獲取到眾多的與客戶端訪問相關的值.

可以通過nginx的官網檢視nginx內建的變數資訊

常見的nginx內建變數

$remote_addr;
  存放了客戶端的地址,注意是客戶端的公網IP,也就是一家人訪問一個網站,則會顯示為路由器的公網IP。

$args;
  #變數中存放了URL中的指令,例如http://www.ywx.com/seal/index.do?id=20080321&partner=search中的id=20080321&partner=search
$document_root;   儲存了針對當前資源的請求的系統根目錄,如/usr/local/nginx/html。 $document_uri;   儲存了當前請求中不包含指令的URI,注意是不包含請求的指令,比如http://www.ywx.com/seal/index.do?id=20080321&partner=search會被定義為/seal/index.do。 $host;   存放了請求的host名稱。 $http_user_agent;   客戶端瀏覽器的詳細資訊 $http_cookie;   客戶端的cookie資訊。 limit_rate 10240; echo $limit_rate;   如果nginx伺服器使用limit_rate配置了顯示網路速率,則會顯示,如果沒有設定, 則顯示0。 $remote_port;   客戶端請求Nginx伺服器時隨機開啟的埠,這是每個客戶端自己的埠。 $remote_user;   已經經過Auth Basic Module驗證的使用者名稱。 $request_body_file;   做反向代理時發給後端伺服器的本地資源的名稱。 $request_method;   請求資源的方式,GET
/PUT/DELETE等 $request_filename;   當前請求的資原始檔的路徑名稱,由root或alias指令與URI請求生成的檔案絕對路徑,如/usr/local/nginx/html/seal/index.html $request_uri;   包含請求引數的原始URI,不包含主機名,如:index.do?id=20080321&partner=search 。 $scheme;   請求的協議,如ftp,https,http等。 $server_protocol;   儲存了客戶端請求資源使用的協議的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等。 $server_addr;   儲存了伺服器的IP地址。 $server_name;   請求的伺服器的主機名。 $server_port;   請求的伺服器的埠號。

測試例項

在服務端列印nginx的內建變數給客戶端

虛擬主機的配置

server {
    listen 80;
    server_name localhost;

    location / {
        root html;
        index index.html;
    }


    location /seal {
    index index.html;
    default_type text/html;
        echo "remote_addr = $remote_addr";
        echo ";";
        echo "args = $args";
        echo ";";
        echo "document_root = $document_root";
        echo ";";
        echo "document_uri = $document_uri";
        echo ";";
        echo "host = $host";
        echo ";";
        echo "http_user_agent = $http_user_agent";
        echo ";";
        echo "http_cookie = $http_cookie"
        echo ";";
        limit_rate 10240;
        echo "limit_rate = $limit_rate";
        echo ";";
        echo "remote_prot = $remote_port";
        echo ";";
        echo "remote_user = $remote_user";
        echo ";";
        echo "request_body_file = $request_body_file";
        echo ";";
        echo "request_method = $request_method";
        echo ";";
        echo "request_filename = $request_filename";
        echo ";";
        echo "request_uri = $request_uri";
        echo ";";
        echo "scheme = $scheme";
        echo ";";
        echo "server_protocol = $server_protocol";
        echo ";";
        echo "server_addr = $server_addr";
        echo ";";
        echo "server_name = $server_name";
        echo ";";
        echo "server_port = $server_port";

    }

}

重新載入配置檔案

nginx -t
nginx -s reload

nginx的自定義變數

自定義變數名稱和值,使用指令set variable value
格式如下:
set variable value;
支援:server, location, if
示例:
set name magedu;
echo name;
set my_port server_port;
echo my_port;
echo "server_name:$server_port";

測試例項

nginx的虛擬機器配置

server {
    listen 80;
    server_name localhost;

    location / {
        root html;
        index index.html;
    }


    location /seal {
    index index.html;
    default_type text/html;
        set $NGX_VER  2020; #使用set自定義一個變數$NGX_VER,值為2020;
        set $NGX_NAME $server_name; #使用set自定義一個變數$NGX_VER,值為nginx內建變數$server_name的值;
        echo "NGX_VER=$NGX_VER";
        echo ";";
        echo "NGX_NAME=$NGX_NAME";
    }

}

重新載入配置檔案

nginx -t
nginx -s reload