nginx内置变量如何在不同location之间传递

问题起因是要实现nginx认证通过后才允许访问mp4视频文件进行直播。
除了使用auth_request模块功能外,还有一个关键点是不同location之间传递变量。
nginx为了方便配置文件修改,实际上nginx的配置文件相当于一个脚本语言了。
nginx定义了许多变量,这里简单列出四个此次配置要使用的。
$arg_PARAMETER    #这个变量包含GET请求中,如果有变量PARAMETER时的值。ex: arg_tk
$args                    #请求中的参数值
$query_string            #同 $args
$is_args                 #如果请求中有参数,值为"?",否则为空字符串
在不同层级的标签中声明的变量性的可见性规则如下:
    location标签中声明的变量中对这个location块可见
    server标签中声明的变量对server块以及server块中的所有子块可见
    http标签中声明的变量对http块以及http块中的所有子块可见
如何传递参数呢?location#1中定义:set $http_query $is_args$args;
在location#2中直接使用$http_query变量。
完整配置文件nginx.vod.conf如下:

upstream vod_files  {
    server 127.0.0.1:4001; 
}

server {
    listen 17019;
    server_name  vod.fili58.com;
 
    access_log  /var/log/nginx/vodauth.access.log  main;
    error_log  /var/log/nginx/vodauth.error.log;
    root   html;
    index  index.html index.htm index.php;

    location / {
        set $http_query $is_args$args;
        auth_request /auth-proxy;

        error_page 401 500 502 503 504  /50x.html;

        proxy_pass http://vod_files;
    }

    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location = /auth-proxy {
        internal;
        proxy_pass http://fili58.com:17000/api/v1/sessions$http_query;
    }
}
 

你可能感兴趣的:(运维技术)