Nginx多用于配置Web服务器。抽象来说,将Nginx配置为Web服务器就是定义处理哪些 URLS 和如何处理这些URLS 对应的请求,定义一些虚拟服务器,控制具有特定 IP 和的请求。Nginx 通过定义一系列 locations 来控制对 URIS 的选择。每一个 location 定义了对映射到自己的请求的处理场景,返回一个文件或者代理请求,或者根据不同的错误代码返回不同的错误页面。另外,根据 URI 的不同,请求也可以被重定向到其它。下面就由小编和大家讲一讲nginx安装配置。
一、设置虚拟服务器
listen:
Nginx 配置文件至少包含一个 server 命令 ,用来定义虚拟服务器。当请求到来时, Nginx 会首先选择一个虚拟服务器来处理该请求。
虚拟服务器定义在 http 上下文中的 server 中:
http{
server{
#Serverconfiguration
}
}
注意: http 中可以定义多个 server
server 配置块使用 listen 命令监听本机 IP 和端口号(包括 Unix domain socket and path),支持 IPv4、IPv6,IPv6地址需要用方括号括起来:
server{
listen127.0.0.1:8080;#IPv4地址,8080端口
#listen[2001:3CA1:10F:1A:121B:0:0:10]:80;#IPv6地址,80端口
#listen[::]:80;#听本机的所有IPv4与IPv6地址,80端口
#Therestofserverconfiguration
}
上述配置,如果不写端口号,默认使用80端口,如果不写 IP ,则监听本机所有 IP。
server_name:
如果多个 server 的 listen IP 和端口号一模一样, Nginx 通过请求头中的 Host
与 server_name 定义的主机名进行比较,来选择合适的虚拟服务器处理请求:
server{
listen80;
server_namelufficcwww.lufficc.com;
...
}
server_name 的参数可以为:
1、完整的主机名,如:api.lufficc.com 。
2、含有通配符(含有 *),如:*.lufficc.com 或 api.* 。
3、正则表达式,以 ~ 开头。
通配符只能在开头或结尾,而且只能与一个 . 相邻。www.*.example 和 w*.example.org均无效。 但是,可以使用正则表达式匹配这些名称,例如 ~^www.. .example.org$ 和~^w.*.example.org$ 。 而且 * 可以匹配多个部分。 名称 * .example.org 不仅匹配www.example.org,还匹配www.sub.example.org。
对于正则表达式:Nginx 使用的正则表达式与 Perl 编程语言(PCRE)使用的正则表达式兼容。 要使用正则表达式,且必须以 ~ 开头。
命名的正则表达式可以捕获变量,然后使用:
server{
server_name~^(www.)?(?. )$;
location/{
root/sites/$domain;
}
}
小括号 () 之间匹配的内容,也可以在后面通过 $1 来引用,$2 表示的是前面第二个 () 里的内容。因此上述内容也可写为:
server{
server_name~^(www.)?(. )$;
location/{
root/sites/$2;
}
}
一个 server_name 示例:
server{
listen80;
server_nameapi.lufficc.com*.lufficc.com;
...
}
同样,如果多个名称匹配 Host 头部, Nginx 采用下列顺序选择:
1、完整的主机名,如 api.lufficc.com。
2、最长的,且以 * 开头的通配名,如:*.lufficc.com。
3、最长的,且以 * 结尾的通配名,如:api.* 。
4、第一个匹配的正则表达式。(按照配置文件中的顺序)
即优先级:api.lufficc.com > *.lufficc.com > api.* > 正则。
如果 Host 头部不匹配任何一个 server_name ,Nginx 将请求路由到默认虚拟服务器。默认虚拟服务器是指:nginx.conf 文件中第一个 server 或者 显式用 default_server 声明:
server{
listen80default_server;
...
}
二、配置 location
URI 与 location 参数的匹配
当选择好 server 之后,Nginx 会根据 URIs 选择合适的 location 来决定代理请求或者返回文件。
location 指令接受两种类型的参数:
1、前缀字符串(路径名称)
2、正则表达式
对于前缀字符串参数, URIs 必须严格的以它开头。例如对于 /some/path/ 参数,可以匹配/some/path/document.html ,但是不匹配 /my-site/some/path,因为 /my-site/some/path 不以/some/path/ 开头。
server{
listen80default_server;
...
}
对于正则表达式,以 ~ 开头表示大小写敏感,以 ~* 开头表示大小写不敏感。注意路径中的 . 要写成 . 。例如一个匹配以 .html 或者 .htm 结尾的 URI 的 location:
location~.html?{
...
}
正则表达式的优先级大于前缀字符串。如果找到匹配的前缀字符串,仍继续搜索正则表达式,但如果前缀字符串以 ^~ 开头,则不再检查正则表达式。
三、具体的搜索匹配流程如下:
1、将 URI 与所有的前缀字符串进行比较。
2、= 修饰符表明 URI 必须与前缀字符串相等(不是开始,而是相等),如果找到,则搜索停止。
3、如果找到的最长前缀匹配字符串以 ^~ 开头,则不再搜索正则表达式是否匹配。
4、存储匹配的最长前缀字符串。
5、测试对比 URI 与正则表达式。
6、找到第一个匹配的正则表达式后停止。
7、如果没有正则表达式匹配,使用 4 存储的前缀字符串对应的 location。
= 修饰符拥有最高的优先级。如网站首页访问频繁,我们可以专门定义一个 location 来减少搜索匹配次数(因为搜索到 = 修饰的匹配的 location 将停止搜索),提高速度:
location=/{
...
}
四、静态文件和代理
一些常用的变量如下:
免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。
Copyright © 2009-2022 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 特网科技 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 百度云 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站