加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

你真的了解如何将 Nginx 配置为Web服务器吗

发布时间:2018-08-31 12:03:33 所属栏目:外闻 来源:今日头条
导读:副标题#e# 技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 阅读之前,建议先阅读初识 Nginx。 之后,我们来了解一下 Nginx 配置。 抽象来说,将 Nginx 配置为 Web 服务器就是定义处理哪些 URLS 和如何处理这些URLS 对应的请求。具
副标题[/!--empirenews.page--] 技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

阅读之前,建议先阅读初识 Nginx。 之后,我们来了解一下 Nginx 配置。

抽象来说,将 Nginx 配置为 Web 服务器就是定义处理哪些 URLS 和如何处理这些URLS 对应的请求。具体来说,就是定义一些虚拟服务器(Virtual Servers),控制具有特定 IP 和域名的请求。

更具体的来说, Nginx 通过定义一系列 locations 来控制对 URIS 的选择。每一个 location 定义了对映射到自己的请求的处理场景:返回一个文件或者代理请求,或者根据不同的错误代码返回不同的错误页面。另外,根据 URI 的不同,请求也可以被重定向到其它 server 或者 location 。

你真的了解如何将 Nginx 配置为Web服务器吗

设置虚拟服务器

listen:

Nginx 配置文件至少包含一个 server 命令 ,用来定义虚拟服务器。当请求到来时, Nginx 会首先选择一个虚拟服务器来处理该请求。

虚拟服务器定义在 http 上下文中的 server 中:

  1. http { server { # Server configuration 

注意: http 中可以定义多个 server

server 配置块使用 listen 命令监听本机 IP 和端口号(包括 Unix domain socket and path),支持 IPv4、IPv6,IPv6地址需要用方括号括起来:

server { listen 127.0.0.1:8080; # IPv4地址,8080端口

# listen [2001:3CA1:10F:1A:121B:0:0:10]:80; # IPv6地址,80端口

# listen [::]:80; # 听本机的所有IPv4与IPv6地址,80端口

# The rest of server configuration}

上述配置,如果不写端口号,默认使用80端口,如果不写 IP ,则监听本机所有 IP。

server_name:

如果多个 server 的 listen IP 和端口号一模一样, Nginx 通过请求头中的 Host

你真的了解如何将 Nginx 配置为Web服务器吗

与 server_name 定义的主机名进行比较,来选择合适的虚拟服务器处理请求:

  1. server { listen 80; 
  2.  
  3. server_name lufficc.com www.lufficc.com; 
  4.  
  5. ... 
  6.  

server_name 的参数可以为:

  • 完整的主机名,如:api.lufficc.com 。
  • 含有通配符(含有 *),如:*.lufficc.com 或 api.* 。
  • 正则表达式,以 ~ 开头。

通配符只能在开头或结尾,而且只能与一个 . 相邻。www.*.example.org 和 w*.example.org均无效。 但是,可以使用正则表达式匹配这些名称,例如 ~^www..+.example.org$ 和~^w.*.example.org$ 。 而且 * 可以匹配多个部分。 名称 * .example.org 不仅匹配www.example.org,还匹配www.sub.example.org。

对于正则表达式:Nginx 使用的正则表达式与 Perl 编程语言(PCRE)使用的正则表达式兼容。 要使用正则表达式,且必须以 ~ 开头。

命名的正则表达式可以捕获变量,然后使用:

  1. server { server_name ~^(www.)?(?<domain>.+)$; location / { root /sites/$domain;  
  2. }  

小括号 () 之间匹配的内容,也可以在后面通过 $1 来引用,$2 表示的是前面第二个 () 里的内容。因此上述内容也可写为:

  1. server { server_name ~^(www.)?(.+)$; location / { root /sites/$2; 

一个 server_name 示例:

  1. server { listen 80; 
  2. server_name api.lufficc.com *.lufficc.com; 
  3. ... 

同样,如果多个名称匹配 Host 头部, Nginx 采用下列顺序选择:

  • 完整的主机名,如 api.lufficc.com。
  • 最长的,且以 * 开头的通配名,如:*.lufficc.com。
  • 最长的,且以 * 结尾的通配名,如:api.* 。
  • 第一个匹配的正则表达式。(按照配置文件中的顺序)

即优先级:api.lufficc.com > *.lufficc.com > api.* > 正则。

如果 Host 头部不匹配任何一个 server_name ,Nginx 将请求路由到默认虚拟服务器。默认虚拟服务器是指:nginx.conf 文件中第一个 server 或者 显式用 default_server 声明:

  1. server { server_name ~^(www.)?(.+)$; location / { root /sites/$2; 

配置 location

URI 与 location 参数的匹配

当选择好 server 之后,Nginx 会根据 URIs 选择合适的 location 来决定代理请求或者返回文件。

location 指令接受两种类型的参数:

  • 前缀字符串(路径名称)
  • 正则表达式

对于前缀字符串参数, URIs 必须严格的以它开头。例如对于 /some/path/ 参数,可以匹配/some/path/document.html ,但是不匹配 /my-site/some/path,因为 /my-site/some/path 不以/some/path/ 开头。

  1. location /some/path/ {  
  2. ...  

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读