Nginx Location 配置讲解

Nginx Location 配置讲解,第1张

Location 是 Nginx 中一个非常核心的配置,这篇重点讲解一下 Location 的配置问题以及一些注意事项。

关于 Location,举个简单的配置例子:

大致的意思是,当你访问 www.yayujs.com 的 80 端口的时候,返回 /home/www/ts/index.html 文件。

我们看下 Location 的具体语法:

location [ = | ~ | ~* | ^~ ] uri { ... }

重点看方括号中的 [ = | ~ | ~* | ^~ ] ,其中 | 分隔的内容表示你可能会用到的语法,其中:

而当你不使用这些语法的时候,只写 uri 的时候:

/ 表示通用匹配:

当存在多个 location 的时候,他们的匹配顺序引用 Nginx 官方文档 就是:

翻译整理后就是:

location 的定义分为两种:

而匹配 location 的顺序为:

再总结一下就是:

在顺序上,前缀字符串顺序不重要,按照匹配长度来确定,正则表达式则按照定义顺序。

在优先级上, = 修饰符最高, ^~ 次之,再者是正则,最后是前缀字符串匹配。

我们举几个简单的例子复习下:

当我们这样设置 root 的时候:

当请求 /i/top.gif , /data/w3/i/top.gif 会被返回。

当我们这样设置 alias 的时候:

当请求 /i/top.gif , /data/w3/images/top.gif 会被返回。

乍一看两者很像,但细一看,就能看出两者的区别,root 是直接拼接 root + location 而 alias 是用 alias 替换 location ,所以 root 中最后的路径里有 /i/ ,而 alias 中最后的路径里没有 /i/ 。

所以如果你这样使用 allias 定义一个路径:

其实使用 root 会更好:

server 和 location 中都可以使用 root,举个例子:

如果两者都出现,是怎样的优先级呢?

简单的来说,就是就近原则,如果 location 中能匹配到,就是用 location 中的 root 配置,忽略 server 中的 root,当 location 中匹配不到的时候,则使用 server 中的 root 配置。

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

location是Nginx对HTTP请求中的URI进行匹配处理的指令,location的语法形式如下:

示例

修饰语“@”:定义一个只能内部访问的location区域,可以被其他内部跳转指令使用,如try_files或 error_page。

CGI是一种通用网关接口规范,该规范详细描述了Web服务器和请求处理程序(脚本解析器)在获取及返 回数据过程中传输数据的标准,如HTTP协议的参数名称等。大多数Web程序以脚本形式接收并处理请求,然 后返回响应数据,如脚本程序PHP、JSP、Python等。

FastCGI是Web服务器和动态脚本程序间的一个高速、可 伸缩的接口,它采用C/S架构,将Web服务器和动态脚本解析器分离,同时启动一个或多个脚本解析器守护进 程接收Web服务器的动态脚本解析请求。当用户向Nginx服务器发起动态脚本请求时,Nginx服务器将动态脚本解析任务交由FastCGI进程来执行,并将FastCGI解析的结果返回给用户。PHP-FPM是一个被编译到PHP内 核中的FastCGI应用,因为它是作为PHP的补丁开发的,所以它在PHP脚本的解析上更加高效。

SCGI是CGI的替代版本,它与FastCGI类似,同样是将请求处理程序独立于Web服务器之外,但更容易实 现,性能比FastCGI要弱一些。

WSGI是为Python语言中定义的Web服务器与Python应用程序或框架间的通用通信接口,可以使Python 应用程序或框架与支持这一协议的不同Web服务器进行通信。常见的Python Web框架都实现了该协议的封 装。

uWSGI是Python实现WSGI、uWSGI(uWSGI独有的协议)、HTTP等协议功能的Web服务器,Nginx 通过ngx_http_uwsgi_module模块实现与uWSGI服务器的数据交换并完成Python网站的请求处理。该模块 默认编译在Nginx二进制文件中,无须单独编译。

location中root指定的只是 相对路径 ,需要和路径结合起来映射地址,比如

alias指定的是绝对路径,不会和location中的路径结合使用,而是直接使用地址映射到文件,比如

1、用前缀字符串(前缀location)匹配URL,并且选中并记住最长匹配前缀的location(注意:是在匹配的里面记住最长的那个)

2、按照正则表达式在配置文件中出现的顺序依次去匹配,当匹配到第一个以后立即停止,并使用与之相应的那个location。如果没有一个正则表达式匹配,则使用之前记住的那个前缀location。

以上,我们可以得出一个结论:优先使用正则表达式,如果没有匹配的正则表达式发现,则使用匹配的最长前缀字符串location

在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11768974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存