location配置参考
- location 配置方法 :
o 前缀 + uri(字符串/正则表达式):location [ = | ~ | ~* | ^~ ] uri { ... }
o @ + namelocation @name { ... }
- 前缀含义:
a. = :精确匹配(必须全部相等)
location = / {
#规则
}
b. ~ :大小写敏感:
location ~ /Example/ {
#规则
}
#请求示例#http://www.example.com/Example/ [成功]
#http://www.example.com/example/ [失败]
c. ~* :忽略大小写
location ~* /Example/ {
#规则
}
# 则会忽略 uri 部分的大小写#http://www.example.com/Example/ [成功]
#http://www.example.com/example/ [成功]
d. ^~ :只需匹配uri部分
location ^~ /img/ {
#规则
}
#以 /img/ 开头的请求,都会匹配上#http://www.example.com/img/a.jpg [成功]
#http://www.example.com/img/b.mp4 [成功]
e. @ :内部服务跳转
location /img/ {
error_page 404 @img_err;
}
location @img_err {
# 规则
}
#以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。
f. / :通用匹配
location /testwx {
proxy_pass http://127.0.0.1:8080/wx;
proxy_cookie_path /wx /testwx;
}
nginx处理get请求参数丢失
- 使用内置变量$args将请求参数传递到后端
location ~ ^/(.+)$ {
proxy_pass http://xx.xx.xx/$1?$args;
}
nginx常用变量参考
$arg_PARAMETER 这个变量包含GET请求中,如果有变量PARAMETER时的值。
$args 这个变量相当于请求行中(GET请求)的参数,例如foo=123&bar=blahblah 。
$binary_remote_addr 二进制的客户地址。
$body_bytes_sent 响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
$content_length 请求头中的Content-length字段。
$content_type 请求头中的Content-Type字段。
$cookie_COOKIE cookie COOKIE变量的值。
$document_root 当前请求在root指令中指定的值。
$host 请求主机头字段,否则为服务器名称。
$is_args 如果有$args参数,这个变量等于”?”,否则等于”",空值。
$http_user_agent 客户端agent信息。
$http_cookie 客户端cookie信息。
$limit_rate 这个变量可以限制连接速率。
$request_body_file 客户端请求主体信息的临时文件名。
$request_method 客户端请求方法,通常为GET或POST。
$remote_addr 客户端的IP地址。
$remote_port 客户端的端口。
$remote_user 已经经过Auth Basic Module验证的用户名。
$request_completion 如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
$request_filename 当前请求的文件路径,由root或alias指令与URI请求生成。
$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
$scheme HTTP方法(如http,https)。
$server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name 服务器名称/绑定的域名。
$server_port #请求到达服务器的端口号。
$uri 不带请求参数的当前URI,uri不包含主机名,如”/foo/bar.html”。该值有可能和request_uri 不一致。request_uri是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。
注意:内部变量$request_uri和$uri,$query_string是不可以直接修改的。
并且$request_uri 能够收到完整的请求链接