Nginx
Posted 小企鹅推雪球!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx相关的知识,希望对你有一定的参考价值。
location 配置块
-
location 配置块用来配置匹配的不同请求 URL 的处理方式
http #... server listen 8080; #... location / root html; index index.html index.htm; location /example1 // 匹配请求 URL 为 /example1 的请求 // 在这里为该请求定义配置信息 location /example2 proxy_pass http://localhost:8080/demo/mng/; proxy_cookie_path /demo /; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect ~^http://localhost:8080/demo/mng/(.*) https://www.demo.com/mng/$1; proxy_connect_timeout 4s; proxy_read_timeout 60s; proxy_send_timeout 8s; #...
-
location 配置块只能在 server 配置块中配置
-
location 指令的功能是用来匹配不同的 URI 请求,进而对请求做不同的处理和响应
-
location 指令匹配 URI 类型,有四种参数可选,例如
location [ = | ~ | ~* | ^~ ] /URI # ...
-
空:location 后没有参数直接跟着标准 URI,表示前缀匹配,代表跟请求中的 URI 从头开始匹配
-
=:用于标准 URI 前,要求请求字符串与其精准匹配,成功则立即处理,nginx 停止搜索其他匹配
-
^~:用于标准URI前,并要求一旦匹配到就会立即处理,不再去匹配其他的那些个正则 URI,一般用来匹配目录
-
~:用于正则 URI 前,表示 URI 包含正则表达式,区分大小写
-
~*:用于正则 URI 前,表示 URI 包含正则表达式,不区分大小写
-
@用来定义一个命名location。主要用于内部重定向,不能用来处理正常的请求
location @/name/ # ...
-
@ 定义一个命名的 location,@ 定义的 location 名字一般用在内部定向例如:error_page、try_files
location / try_files $uri $uri/ @custom location @custom # ...do something
-
当尝试访问 url 找不到对应的文件就重定向到我们自定义的命名 location(此处为 custom),命名 location 中不能再嵌套其它的命名 location。
Nginx URL匹配顺序
-
nginx 用两层指令匹配请求URL,
-
第一层匹配:使用server指令,通过域名,ip和端口来做第一层匹配,当找到匹配的 server 后就进入此 server 的 location 匹配。
-
第二层:location 的匹配并不完全按照其在配置文件中出现的顺序来匹配,请求 URI 会按如下规则进行匹配:
- 先精准匹配 = , 精准匹配成功则会立即停止其他类型的匹配
- 没有精准匹配成功时,进行前缀匹配。先查找带有 ^~ 的前缀匹配,带有 ^~ 的前缀匹配成功则立即停止其他类型匹配
- 前缀匹配未成功,再进行普通前缀匹配(不带参数 ^~ )成功则会暂存,继续查找正则匹配
- = 和 ^~ 均未匹配成功前提下,查找正则匹配 ~ 和 ~* 。当同时有多个正则匹配时,按其在配置文件中出现的先后顺序优先匹配,命中则立即停止其他类型匹配
- 所有正则匹配均未成功时,返回步骤(2)中暂存的普通前缀匹配(不带参数 ^~ )结果;
-
匹配规则优先级从高到低依次
location = # 精准匹配,优先级最高 location ^~ # 带参前缀匹配 location ~ # 正则匹配(区分大小写) location ~* # 正则匹配(不区分大小写) location /a # 普通前缀匹配,优先级低于带参数前缀匹配。 location / # 任何没有匹配成功的,都会匹配这里处理,优先级最低
location配置块指令
-
proxy_pass指令用于设置代理服务器的映射地址,映射地址可以使用http或者https协议,映射地址可以使用域名,IP,以及可选的端口号
例如: proxy_pass http://localhost:8080/demo/mng/; proxy_cookie_path;proxy_cookie_path path replacement; 在单词 “unix” 之后指定并用冒号括起来的 UNIX 域套接字路径: proxy_pass http://unix:/tmp/backend.socket:/uri/;
-
proxy_cookie_path指令用于改变cookie的路径
语法 proxy_cookie_path path replacement; path:是要替换的路径 replacement:就是要替换的值 样例 location /example2 proxy_pass http://localhost:8080/demo/mng/; proxy_cookie_path /demo /;
```
3. proxy_connect_timeout指令定义与代理服务器建立连接的超时时间,注意:这个超时时间通常不能超过 75 秒
以上是关于Nginx的主要内容,如果未能解决你的问题,请参考以下文章