Home > Article > Backend Development > nginx variables
See the detailed original text here: http://blog.sina.com.cn/s/blog_6d579ff40100wk2j.html
For another article summarizing the original text, see here: http://blog.csdn.net/yankai0219/ article/details/8070790
Variable interpolation:
All Nginx variables must be brought with $ when referenced in the Nginx configuration file prefix, use $ symbol + variable name to construct a new variable. This method is called variable interpolation. For example:
location test{
set $a hello;
set $b "$a ,world";
echo "b: $b";
}
Visit: curl http://localhost/test/Output: b: hello worldExplanation: The above set is HttpRewriteModule instructions , and echo is a HttpEchoModule instruction. It can be seen that both modules support variable interpolation. But not all modules support variable interpolation. In fact, whether the instruction parameter allows "Variable interpolation" depends on the implementation module of the instruction.
Points to note when using variables:
When a variable is directly followed by other strings, you need to use{} to enclose the variable name, otherwise the variable name will be concatenated with the following string Together as a variable name For example:
location /test {
set $variable "hello";
Variables must be created first and then used, otherwise an error will be reported For example:
server {
Listen 80;
location /test
{
foo;}
}
Visit: curl
http://localhost/test/Error:
[emerg] unknown "foo" variableInstructions: nginxnginxThe creation and assignment of variables occur at completely different stages of time. The creation of Nginx variables can only occur when Nginx configuration is loaded, or when Nginx is started; while the assignment operation can only occur when the request is actually processed. This means that using variables directly without creating them will cause startup failure, and it also means that we cannot dynamically create new Nginx variablesVisibility of variables: Once a Nginx
variable is created, the visible scope of its variable name is the entire
Nginx configuration, and can even span server
configuration blocks of different virtual hosts. For example: server { listen 80;
location /foo {
echo "foo = [$foo]";
}
location /bar {
set $foo 32;
echo "foo =[$foo]";
}
}
Description: Here we use the set
command to create the variable $foo
inlocation /bar, so this variable is visible in the entire configuration file, so we can set it in location /foo You can directly reference this variable in without worrying about Nginx reporting an error. The results of accessing these two interfaces:
$ curl 'http://localhost/foo'
foo = []
$ curl 'http://localhost/bar'
foo = [32]
$ curl 'http://localhost/foo'
foo = []
Another variable feature derived from this example:
Nginx Variable name Although the visible scope is the entire configuration, each request has an independent copy of all variables, or an independent copy of the container used by each variable to store values, without interfering with each other. For example, after we requested the /bar interface earlier, the $foo variable was assigned the value 32, but it will not affect subsequent requests to the /foo interface at all. The corresponding $foo value (it is still empty!), because each request has its own independent copy of the $foo variable This is most common for Nginx newbies One of the mistakes is to understand Nginx variables as something that is shared globally between requests, or "global variables ". In fact, the lifetime of Nginxvariables cannot cross request boundaries
Built-in variables
Common built-in variables:location /test {
echo “uri = $uri”;
$ curl 'http://localhost:8080/test'
uri = /test
request_uri = /test
$ curl 'http://localhost:8080/test ?a=3&b=4'
uri = /test
request_uri = /test?a=3&b=4
$ curl 'http://localhost:8080/test/ hello%20world?a=3&b=4'
uri = /test/hello world
request_uri = /test/hello%20world?a=3&b=4
$arg_xxx
variable group : Used to get the value of the URI
parameter named xxx
in the current request
location /test { echo "name:$arg_name"; echo "class :$arg_class";}
Request and response:
$ curl 'http://localhost:8080/test'
name:
class:
$ curl 'http://localhost:8080/test?name=Tom&class=3'
name: Tom
class: 3
$ curl 'http://localhost:8080/test?name=hello%20world&class=9'
name: hello%20world
class: 9
Actually
$arg_name Not only can it match the
name parameter, it can also match the
NAME parameter, or
Name, etc., Nginx will automatically match the parameters in the original request before matching the parameter name Adjust the name to all lowercase: $ curl 'http://localhost:8080/test?NAME=Marry' name: Marryclass:
$ curl 'http://localhost:8080/test?Name=Jimmy'
name: Jimmy
class:
$cookie_xxxVariable group: used to get the cookie value
$http_xxxVariable group: used to get the value of the request header
$send_http_xxxVariable group: used to get the response header The value of
$args: returns the URL parameter string of the current request (that is, the part after the question mark in the request URL)
The above has introduced nginx variables, including aspects of it. I hope it will be helpful to friends who are interested in PHP tutorials.