将NGINX Plus配置为Web服务器

本文介绍了如何将NGINX Plus配置为Web服务器,并包括以下部分:

  • 设置虚拟服务器
  • 配置位置
    • 位置优先
  • 使用变量
  • 返回特定状态码
  • 重写请求中的URI
  • 重写HTTP响应
  • 处理错误

有关如何调整NGINX Plus和NGINX开源软件的更多信息,请观看我们的免费网络研讨会,按需安装和调整NGINX。

在较高的级别上,将NGINX Plus配置为Web服务器只是定义它处理的URL以及如何处理这些URL上的HTTP请求资源的问题。在较低级别,该配置定义了一组虚拟服务器,这些虚拟服务器控制对特定域或IP地址的请求的处理。有关配置文件的更多信息,请参见创建NGINX Plus配置文件。

每个用于HTTP流量的虚拟服务器都定义了称为位置的特殊配置实例,这些实例控制对特定URI集的处理。每个位置都定义了自己的情形,即映射到该位置的请求将如何处理。NGINX Plus提供了对该过程的完全控制。每个位置都可以代理请求或返回文件。另外,可以修改URI,以便将请求重定向到另一个位置或虚拟服务器。另外,可以返回特定的错误代码,并且您可以配置特定的页面以与每个错误代码相对应。

设置虚拟服务器

NGINX Plus配置文件必须至少包含一个server指令以定义虚拟服务器。当NGINX Plus处理请求时,它首先选择将为请求服务的虚拟服务器。

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

http {server {# Server configuration}
}

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

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

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

server {listen 127.0.0.1:8080;# The rest of server configuration
}

如果省略端口,则使用标准端口。同样,如果省略地址,则服务器将侦听所有地址。如果listen根本不包含该指令,则取决于超级用户特权,“标准”端口为80/tcp,“默认”端口为8000/tcp

如果有多个服务器与请求的IP地址和端口相匹配,则NGINX Plus会根据块Host中的server_name指令测试请求的标头字段server。要使用的参数server_name可以是完整(准确)名称,通配符或正则表达式。通配符是一个字符串,在字符串*的开始,结尾或同时包含和都包含星号()。星号匹配任何字符序列。NGINX Plus对正则表达式使用Perl语法;在其前面加上波浪号(~)。本示例说明了确切的名称。

server {listen      80;server_name example.org www.example.org;#...
}

如果多个名称与Host标题匹配,则NGINX Plus将按照以下顺序搜索名称并使用找到的第一个匹配项来选择一个:

  1. 确切的名字
  2. 以星号开头的最长通配符,例如 *.example.org
  3. 以星号结尾的最长通配符,例如 mail.*
  4. 第一个匹配的正则表达式(在配置文件中出现的顺序)

如果Host标题字段与服务器名称不匹配,则NGINX Plus将请求路由到请求到达的端口的默认服务器。缺省服务器是nginx.conf文件中列出的第一个服务器,除非您default_serverlisten指令中包含参数以明确指定服务器为缺省服务器。

server {listen 80 default_server;#...
}

配置位置

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

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

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

注意:在本指南中,位置一词是指单个location上下文。

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

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

location /some/path/ {#...
}

在正则表达式前加上波浪号(~)表示区分大小写,或在tilde-asterisk(~*)时区分大小写。以下示例匹配在任意位置包含字符串.html.htm的 URI 。

location ~ \.html? {#...
}

NGINX位置优先

为了找到与URI最匹配的位置,NGINX Plus首先将URI与带有前缀字符串的位置进行比较。然后,它使用正则表达式搜索位置。

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

  1. 针对所有前缀字符串测试URI。
  2. =(等号)改性剂限定所述URI的精确匹配和前缀字符串。如果找到完全匹配的内容,搜索将停止。
  3. 如果^~(插入符)修饰符加上最长的匹配前缀字符串,则不检查正则表达式。
  4. 存储最长的匹配前缀字符串。
  5. 针对正则表达式测试URI。
  6. 中断第一个匹配的正则表达式并使用相应的位置。
  7. 如果没有正则表达式匹配,请使用与存储的前缀字符串相对应的位置。

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

location = / {#...
}

一个location环境可以包含定义如何解决的请求指令-要么成为一个静态文件或将请求与代理服务器。在以下示例中,与第一个location上下文匹配的请求是/ data目录中的服务文件,与第二个上下文匹配的请求被传递到托管www.example.com域内容的代理服务器。

server {location /images/ {root /data;}location / {proxy_pass http://www.example.com;}
}

root伪指令指定要在其中搜索要服务的静态文件的文件系统路径。与该位置关联的请求URI被附加到路径中以获得要服务的静态文件的全名。在上面的示例中,响应于对/images/example.png的请求,NGINX Plus提供了文件/data/images/example.png

proxy_pass指令将请求传递到所配置的URL访问的代理服务器。然后,来自代理服务器的响应将被传递回客户端。在上面的示例中,所有带有不以/ images /开头的URI的请求都将传递到代理服务器。

使用变量

您可以在配置文件中使用变量,以根据定义的环境使NGINX Plus处理请求有所不同。变量是在运行时计算的命名值,用作指令的参数。变量名称的开头用\(\)(美元)符号表示。变量根据NGINX的状态定义信息,例如当前正在处理的请求的属性。

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

返回特定状态码

某些网站URI要求立即返回带有特定错误或重定向代码的响应,例如当页面被临时或永久移动时。最简单的方法是使用return指令。例如:

location /wrong/url {return 404;
}

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

location /permanently/moved/url {return 301 http://www.example.com/moved/here;
}

return指令可以包含在这两个locationserver上下文。

重写请求中的URI

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

location /users/ {rewrite ^/users/(.*)$ /show?user=$1 break;
}

如本示例所示,第二个参数users通过匹配正则表达式来捕获。

您可以rewriteserverlocation上下文中包含多个指令。NGINX Plus会按指令的执行顺序依次执行它们。选择上下文后,上下文中的rewrite指令server将执行一次。

NGINX处理了一组重写指令后,它将location根据新的URI 选择上下文。如果所选位置包含rewrite指令,则会依次执行它们。如果URI与任何一个都匹配,rewrite则在处理所有定义的指令之后,将开始对新位置的搜索。

以下示例显示rewrite了与return指令结合使用的指令。

server {#...rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;return  403;#...
}

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

有两个参数可中断rewrite指令的处理:

  • last–停止rewrite在当前serverlocation上下文中执行指令,但是NGINX Plus搜索与重写的URI匹配的位置,并rewrite应用新位置中的所有指令(这意味着可以再次更改URI)。
  • break–与break指令一样,停止rewrite在当前上下文中处理指令,并取消对与新URI匹配的位置的搜索。rewrite新位置中的指令不会执行。

重写HTTP响应

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

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

location / {sub_filter      /blog/ /blog-staging/;sub_filter_once off;
}

另一个示例将方法从更改http://http_s_://,并将localhost地址从请求标头字段替换为主机名。该sub_filter_once指令告诉NGINX sub_filter在一个位置内连续应用指令:

location / {sub_filter     'href="http://127.0.0.1:8080/'    'href="https://$host/';sub_filter     'img src="http://127.0.0.1:8080/' 'img src="https://$host/';sub_filter_once on;
}

请注意,sub_filter如果sub_filter发生其他匹配,则已经用修改的响应部分将不会再次替换。

处理错误

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

error_page 404 /404.html;

请注意,此伪指令并不意味着立即返回错误(return伪指令这样做),而只是指定错误发生时的处理方式。错误代码可能来自代理服务器,也可能是在NGINX Plus处理期间发生的(例如,404NGINX Plus无法找到客户端请求的文件时的结果)。

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

location /old/path.html {error_page 404 =301 http:/example.com/new/path.html;
}

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

server {...location /images/ {# Set the root directory to search for the fileroot /data/www;# Disable logging of errors related to file existenceopen_file_cache_errors off;# Make an internal redirect if the file is not founderror_page 404 = /fetch$uri;}location /fetch/ {proxy_pass http://backend/;}
}

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

例如,如果未找到/images/some/file,则将其替换为/fetch/images/some/file,并开始对位置的新搜索。结果,请求在第二个location上下文中结束,并被代理到http://backend/

open_file_cache_errors如果找不到文件,该伪指令可防止编写错误消息。这里没有必要这样做,因为正确处理了丢失的文件。

将NGINX Plus配置为Web服务器相关推荐

  1. nginx系列之四:web服务器

    ** 前言 ** nginx系列之一:nginx入门 nginx系列之二:配置文件解读 nginx系列之三:日志配置 nginx系列之四:web服务器 nginx系列之五: 负载均衡 nginx系列之 ...

  2. Nginx高性能反向代理web服务器

    基础 Nginx简介 背景介绍 Nginx("engine x")一个具有高性能的[HTTP]和[反向代理]的[WEB服务器],同时也是一个[POP3/SMTP/IMAP代理服务器 ...

  3. 隐藏web服务器信息,nginx 隐藏版本号与WEB服务器信息的解决方法

    nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看看最终的隐藏结果吧 具体怎么实现呢,其实也很简单,请往下看 1 官网下载最新稳定版 wget http://nginx.org/dow ...

  4. linux安装web服务器httpd,Linux_linux构建动态WEB服务器安装篇,基本配置 安装web服务器:httpd-2. - phpStudy...

    linux构建动态WEB服务器安装篇 基本配置 安装web服务器:httpd-2.X.X 先优化吧 根据CPU设置变量 #export CFLAGS="-O2 -march=pentium4 ...

  5. Tomcat结合Apache、Nginx实现高性能的web服务器

    一.Tomcat为什么需要与apache.nginx一起结合使用? Tomcat虽然是一个servlet和jsp容器,但是它也是一个轻量级的web服务器.它既可以处理动态内容,也可以处理静态内容.不过 ...

  6. Tomcat服务器安装配置与web服务器介绍

    一.web服务器 也是计算机程序,驻留在因特网上.它的作用是接收客户端(浏览器)的请求,给客户端做出响应.可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览:可以放置数据文件,让全世 ...

  7. 2、nginx常用配置----作为web服务端

    目录 环境及目的 nginx配置文件特点和结构 1 特性 2 主配置文件结构 常用全局配置 1 main段 2 events段 web服务相关配置 1 server_namerootlisten 11 ...

  8. 超越 Nginx,号称下一代 Web 服务器,用起来够优雅~

    Nginx是一款非常流行的Web服务器,在Github上已有16K+Star,我们经常用它来做静态资源托管或反向代理.最近发现了一款全新的Web服务器Caddy,Star数超越Nginx,标星38K+ ...

  9. Nginx + PHP 搭建高性能web服务器

    写在前面: 1. Issue: *** 'libmcrypt-config --version' returned 2.4.0, but LIBMCRYPT (2.5.8) *** was found ...

最新文章

  1. 《数据科学家养成手册》傅里叶变换与反傅里叶变换笔记
  2. ttf能改成gfont吗_粉丝喊话岳云鹏改回本名 小岳岳在线蒙圈:我还能改成岳云啥...
  3. Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息。
  4. 意想不到的有趣linux命令
  5. Vue2.x通用条件搜索组件的封装及应用
  6. Cocos Creator 的实现拖尾效果
  7. pytorch: torch.Tensor.view ------ reshape
  8. C++ string与vectorfloat类型相互转换之stringstream
  9. English trip V1 - 20.Look at me 看着我 Teacher:Solo Key: 声调(英语默认就声调[rising]和降调[falling]两种)...
  10. 51单片机实现简单计算器
  11. 详解正向代理与反向代理
  12. coverity代码检测工具介绍_Coverity功能介绍
  13. 会员数据化运营应用场景与分析模型
  14. 联想笔记本桌面计算机不见了,联想电脑任务栏不见了怎么还原
  15. 关于FTP服务器出现227 Entering Passive Mode错误的解决思路
  16. f5服务器维护,F5-LTM(服务器的负载均衡)网络结构和功能
  17. AI相关英语词汇(持续更新)
  18. 新学问教育php,神墨教师的教育梦——让梦想与爱同行
  19. 数据雪崩和数据穿透、击穿
  20. 初识C语言(1)(2)(3)(4) C语言入门 保姆级教程 变量 常量 字符串 转义字符 操作符 关键字 字符串 指针 函数 结构体 数组 选择语句 循环语句

热门文章

  1. iframe框架页面实现自适应高度解决方案
  2. Swift中文教程(一)基础数据类型
  3. 在Linux上将视频转换成动态gif图片 (附:ffmpeg和ImageMagick安装方法)
  4. jquery csv2table 插件
  5. Elasticsearch整理笔记(三)
  6. linux内存操作--ioremap和mmap
  7. 华为机试——质数因子
  8. 浏览器打开PDF调整亮度和颜色的小技巧
  9. 【今日CV 视觉论文速览】28 Nov 2018
  10. HTML5中id、name、class 区别