您的位置: 翼速应用 > 业内知识 > 服务器 > 正文

Nginx Web服务器配置块有哪些方面?

    Nginx Web服务器配置块是:


    1.建立虚拟服务器


    Nginx配置文件必须包含至少一个服务器指令来定义虚拟服务器。当Nginx处理请求时,它首先选择提供请求的虚拟服务器。


    虚拟服务器是由http上下文中的服务器指令定义的,例如:

Nginx Web服务器配置块有哪些方面?1.png

    可以将多个server指令添加到http上下文中以定义多个虚拟服务器。


    server配置块通常包括一个listen指令,用于指定服务器侦听请求的IP地址和端口(或Unix域套接字和路径)。IPv4和IPv6地址均被接受; 将方括号(。


    下面的示例显示了监听IP地址127.0.0.1和端口8080的服务器的配置:

Nginx Web服务器配置块有哪些方面?2.png

    如果省略端口,则使用标准端口。 同样地,如果省略一个地址,服务器将侦听所有地址。 如果没有包含listen指令,则“标准”端口为80/tcp,“default”端口为8000/tcp,具体取决于超级用户权限。


    如果有多个服务器与请求的IP地址和端口相匹配,则NGINX将根据服务器块中的server_name指令测试请求的主机头域。 server_name的参数可以是完整(精确)名称,通配符或正则表达式。


    通配符是一个字符串,其开头,结尾或两者都包含星号(*); 星号匹配任何字符序列。 NGINX将Perl语法用于正则表达式; 在它们之前使用波浪号(〜)。 此示例说明了一个确切的名称。

Nginx Web服务器配置块有哪些方面?3.png

    如果匹配主机头几个名称,则NGINX通过按以下顺序搜索名称并使用其找到的第一个匹配来选择一个:


    确切的名字(完整准确的名称)


    以星号开头的最长通配符,例如:*.example.org


    以星号结尾的最长通配符,如:mail.*


    第一个匹配正则表达式(按照出现在配置文件中的顺序)


    如果主机头字段与服务器名称不匹配,则NGINX会将请求路由到请求到达端口的默认服务器。 默认服务器是nginx.conf文件中列出的第一个服务器,除非您将listen_server参数包含在listen指令中以明确指定服务器为默认值。

Nginx Web服务器配置块有哪些方面?4.png

    一个完整的Nginx虚拟机配置示例,这里我们演示配置两个虚拟机,对应域名分别为:vhost1.com 和 vhost2.com,vhost1.com网站的主目录在/data/www/vhost1,vhost2.com网站的主目录在/data/www/vhost2:

Nginx Web服务器配置块有哪些方面?5.png

    2. 配置位置


    NGINX可以根据请求URI向不同的代理发送流量或提供不同的文件。 这些块是使用放置在server指令中的location指令来定义的。


    例如,您可以定义三个location块,以指示虚拟服务器向一个代理服务器发送一些请求,将其他请求发送到不同的代理服务器,并通过从本地文件系统传递文件来提供其余请求。


    NGINX测试根据所有location指令的参数请求URI,并应用匹配location中定义的指令。 在每个location块内,通常可能(除了一些例外)放置更多的location指令以进一步细化特定组请求的处理。


    注意:在本教程文章中,单词location是指单个location上下文。


    location指令有两种类型的参数:前缀字符串(路径名)和正则表达式。 对于要匹配前缀字符串的请求URI,必须以前缀字符串开头。


    具有pathname参数的以下示例位置匹配以/some/path/开头的请求URI,例如/some/path/document.html,它不匹配/my-site/some/path,因为/some/path不在该URI的开头出现。

Nginx Web服务器配置块有哪些方面?6.png

    正则表达式之前是区分大小写匹配的波形符号(~),或者不区分大小写匹配的波形符号(~*)。 以下示例将包含字符串.html或.html的URI与任何位置相匹配。

Nginx Web服务器配置块有哪些方面?7.png

    要找到最符合URI的位置,NGINX首先将URI与前缀字符串的位置进行比较。然后用正则表达式搜索位置。


    除非使用^~修饰符对正则表达式给予更高的优先级。在前缀字符串中,NGINX选择最具体的字符串(也就是最长和最完整的字符串)。 下面给出了选择处理请求的位置的确切逻辑:


    测试所有URI的前缀字符串。


    =(等号)修饰符定义了URI和前缀字符串完全匹配。如果找到完全匹配,则搜索停止。


    如果^~(插入符号)修饰符预先添加最长匹配前缀字符串,则不会检查正则表达式。


    存储最长匹配的前缀字符串。


    根据正则表达式测试URI。


    断开第一个匹配的正则表达式并使用相应的位置。


    如果没有正则表达式匹配,则使用与存储的前缀字符串相对应的位置。


    =修饰符的典型用例是/(正斜杠)的请求。 如果请求/是频繁的,则指定=/作为location指令的参数加速处理,因为搜索匹配在第一次比较之后停止。

Nginx Web服务器配置块有哪些方面?8.png

    location上下文可以包含定义如何解析请求的指令 - 提供静态文件或将请求传递给代理的服务器。 在以下示例中,匹配第一个location上下文的请求将从/data/images目录中提供文件,并将匹配第二个位置的请求传递给承载 www.example.com 域内容的代理服务器。

Nginx Web服务器配置块有哪些方面?9.png

    root指令指定要在其中搜索要提供的静态文件的文件系统路径。 与该位置相关联的请求URI将附加到路径,以获取要提供的静态文件的全名。 在上面的示例中,要响应/images/logo.png的请求,NGINX提供服务器本地实际对应文件是:/data/images/logo.png。


    proxy_pass指令将请求传递给使用配置的URL访问代理服务器。然后将代理服务器的响应传回客户端。在上面的示例中,所有不以/images/开头的URI的请求都将被传递给代理的服务器(也就是:www.example.com)。


    3. 使用变量


    可以使用配置文件中的变量,使NGINX进程的请求根据定义的情况而有所不同。 变量是在运行时计算的命名值,用作指令的参数。 一个变量由它的名字开头的$(美元)符号表示。 变量根据NGINX的状态定义信息,例如正在处理的请求的属性。


    有许多预定义的变量,如核心HTTP变量,您可以使用set,map和geo指令定义自定义变量。 大多数变量在运行时计算的,并包含与特定请求相关的信息。 例如,$remote_addr包含客户端IP地址,$uri保存当前的URI值。


    4. 返回特定状态码


    一些网站URI需要立即返回具有特定错误或重定向代码的响应,例如当页面被暂时移动或永久移动时。 最简单的方法是使用return指令。 例如返回未找到的404状态码:

Nginx Web服务器配置块有哪些方面?10.png

    返回的第一个参数是响应代码。可选的第二个参数可以是重定向的URL(代码301,302,303和307)或在响应体中返回文本。 例如:

Nginx Web服务器配置块有哪些方面?11.png

    返回指令可以包含在 location 和 server 上下文中。


    重写URI请求


    可以通过使用rewrite指令在请求处理期间多次修改请求URI,该指令具有一个可选参数和两个必需参数。 第一个(必需)参数是请求URI必须匹配的正则表达式。 第二个参数是用于替换匹配URI的URI。 可选的第三个参数是可以停止进一步重写指令的处理或发送重定向(代码301或302)的标志。例如:

Nginx Web服务器配置块有哪些方面?12.png

    如该示例所示,用户通过匹配正则表达式捕获第二个参数。


    您可以在location 和 server上下文中包含多个rewrite指令。 NGINX按照它们发生的顺序逐个执行指令。 当选择该上下文时,server上下文中的rewrite指令将被执行一次。


    在NGINX处理一组rewrite指令之后,它根据新的URI选择一个location上下文。 如果所选location块包含rewrite指令,则依次执行它们。 如果URI与其中任何一个匹配,则在处理所有定义的rewrite指令之后,将搜索新location块。


    以下示例显示了与返回指令相结合的rewrite指令。

Nginx Web服务器配置块有哪些方面?13.png

    此示例配置区分两组URI。 诸如/download/some/media/file之类的URI更改为/download/some/mp3/file.mp3。由于最后一个标志,所以跳过后续指令(第二次rewrite和return指令),但NGINX继续处理该请求,该请求现在具有不同的URI。类似地,诸如/download/some/audio/file的URI被替换为/download/some/mp3/file.ra。 如果URI与rewrite指令不匹配,则NGINX将403错误代码返回给客户端。


    有两个中断处理重写指令的参数:


    last - 停止执行当前服务器或位置上下文中的重写指令,但是NGINX会搜索与重写的URI匹配的位置,并且应用新位置中的任何重写指令(URI可以再次更改,往下继续匹配)。


    break - 像break指令一样,在当前上下文中停止处理重写指令,并取消搜索与新URI匹配的位置。新位置(location)块中的rewrite指令不执行。


    5. 重写HTTP响应


    有时您需要重写或更改HTTP响应中的内容,将一个字符串替换为另一个字符串。 您可以使用sub_filter指令来定义要应用的重写。 该指令支持变量和替代链,使更复杂的更改成为可能。


    例如,您可以更改引用除代理服务器之外的绝对链接:

Nginx Web服务器配置块有哪些方面?14.png

    另一个示例将方法从http://更改为http://,并从请求头域替换本地主机地址到主机名。 sub_filter_once指令告诉NGINX在一个位置(location)内连续应用sub_filter伪指令:

Nginx Web服务器配置块有哪些方面?15.png

    请注意,如果发生另一个sub_filter匹配,则使用sub_filter修改的响应部分将不再被替换。


    处理错误


    使用error_page指令,您可以配置NGINX返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他URI。 在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。

Nginx Web服务器配置块有哪些方面?16.png

    请注意,此伪指令并不立即返回该错误(返回指令执行该操作),而仅仅是指定发生时如何处理错误。 错误代码可以来自代理服务器,或者在NGINX处理期间发生(例如,当NGINX找不到客户端请求的文件时,显示404对应的结果)。


    在以下示例中,当NGINX找不到页面时,它会将代码301替换为代码404,并将客户端重定向http:/example.com/new/path.html。 当客户端仍尝试访问其旧URI的页面时,此配置非常有用。 301代码通知浏览器页面已经永久移动,并且需要在返回时自动替换旧地址。

Nginx Web服务器配置块有哪些方面?17.png

    以下配置是在未找到文件时将请求传递给后端的示例。 因为在error_page指令的等号之后没有指定状态代码,所以对客户机的响应具有代理服务器返回的状态代码(不一定是404)。

Nginx Web服务器配置块有哪些方面?18.png

    当找不到文件时,error_page指令指示NGINX执行内部重定向。error_page指令的最终参数中的$ uri变量保存当前请求的URI,该URI在重定向中传递。  

 

    例如,如果未找到/ images / some / file,则将其替换为/ fetch / images / some / file,然后将开始新的搜索位置(位置)。最终请求最终位于第二个位置上下文中,并被代理到http:// backend /。  

 

    如果找不到该文件,则open_file_cache_errors命令可以防止写入错误消息。因为丢失的文件可以正确处理,但这不是必需的。

我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题