Nginx的HTTP配置主要包括三个区块,结构如下:
http{//这个是协议界别 include mime.types; default_type application/octet-stream; keepalive_timeout 65; gzip on; server{//这个是服务器级别 listen 80; server_name localhost; location /{//这个是请求级别 root html; index index.html index.htm; } } }
常用变量
core module 支持一些内置的变量,与apache使用的变量相一致。
首先,一些变量代表了客户端请求头部的一些字段,如:$http_user_agent, $http_cookie等等。注意,由于这些变量会在请求中定义,所以可能无法保证他们是存在的或者说可以定义到一些别的地方(例如遵循一定的规范)。
除此之外,下列是一些其他变量:
1.$arg_PARAMETER
这个变量包含在查询字符串时GET请求PARAMETER的值。
2.$args
这个变量等于请求行中的参数。
3.$binary_remote_addr
二进制码形式的客户端地址。
4.$content_length
请求头中的Content-length字段。
5.$content_type
请求头中的Content-Type字段。
6.$cookie_COOKIE
cookie COOKIE的值。
7.$document_root
当前请求在root指令中指定的值。
8.$document_uri
与$uri相同。
9.$host
请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称。
10.$is_args
如果$args设置,值为”?”,否则为”“。
11.$limit_rate
这个变量可以限制连接速率。
12.$nginx_version
当前运行的nginx版本号。
13.$query_string
与$args相同。
14.$remote_addr
客户端的IP地址。
15.$remote_port
客户端的端口。
16.$remote_user
已经经过Auth Basic Module验证的用户名。
17.$request_filename
当前连接请求的文件路径,由root或alias指令与URI请求生成。
18.$request_body
这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。
19.$request_body_file
客户端请求主体信息的临时文件名。
20.$request_method
这个变量是客户端请求的动作,通常为GET或POST。
包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
21.$request_uri
这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。
22.$scheme
HTTP方法(如http,https)。按需使用,例:
rewrite ^(.+)
23.$server_addr
服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
24.$server_name
服务器名称。
25.$server_port
请求到达服务器的端口号。
26.$server_protocol
请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
27.$uri
请求中的当前URI(不带请求参数,参数位于
Location区段
location区段,通过制定模式来与客户端请求的URI相匹配,基本语法如下:location[=|~|~*|^~|@] pattern{……}
1. 没有修饰符表示:必须以制定模式开始
如:
server{ server_name localhot; location /abc{ …… } }
那么,如下的URI是匹配的:
https://localhost/abc
https://localhost/abc?a=1
https://localhost/abc/
https://localhost/abcd
2.表示必须与制定的模式精确匹配
如:
server{ server_name localhost; location = /abc{ …… } }
那么,如下的URI是匹配的:
https://localhost/abc
https://localhost/abc?a=1
如下的URI是不匹配的:
https://localhost/abc/
https://localhost/abcd
3.~表示:制定的正则表达式要区分大小写
如
server{ server_name localhost; location ~^/abc${ …… } }
那么,如下的URI是匹配的:
https://localhost/abc
https://localhost/abc?a=1
如下的URI是不匹配的:
https://localhost/ABC
https://localhost/abc/
https://localhost/abcd
4.~*表示:制定的正则表达式不区分大小写
如
server{ server_name localhost; location ~*^/abc${ …… } }
那么,如下的URI是匹配的:
https://localhost/abc
https://localhost/abc?a=1
https://localhost/ABC
如下的URI是不匹配的:
https://localhost/abc/
https://localhost/abcd
5.^~类似于无修饰符的行为,也是以制定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了。
6.@:定义命名location区段,这些区段客户端不能访问,只可以由内部昌盛的请求来访问,如:try_files或error_page等。