①匹配IP地址和listen指令指定的IP和端口;
②将Host头字段作为字符串匹配server_name指令;
③将Host头字段与server_name指令值字符串的开始部分做匹配;
④将Host头字段与server_name指令值字符串的结尾部分做匹配;
⑤将Host头字段与server_name指令值进行正则表达式匹配;
⑥如果所有Host头匹配失败,那么将会转向listen指令标记的default server;
⑦如果所有Host头匹配失败,并且没有default_server,那么将会转向满足第一步的第一个server的listen指令。
①精确匹配
server_name www.xuegod.cn
②泛解析
server_name *.xuegod.cn; #替代部分子域名
server_name www.xuegod.*; #替代部分顶级域
③正则表达式匹配
#注意:正则匹配时~和要匹配的字符不要带空格,和location匹配有点区别
server_name ~^www\.example\.com$;
server_name ~^www(\d+)\ .example\.(com)$ ;
server_name ~^.*\.xuegod\.cn$; #以任何字符开头并xuegod.cn结尾的URL
④默认server
server_name localhost;
⑤拓展生产中应用
server_name ~^.*h5-pre\.edsmall\.com$;
return 301 https://$host$request_uri; #注意使用正则匹配servername时这里强制跳转就要用host,而不用server_name
①虚拟主机作用
在同一台服务器上部署多个网站,减免资源的占用
②实现方式
方式1、不同IP,相同端口,不同域名;
需要两个公网IP地址,两个域名
方式2、相同IP,相同端口,不同域名;(不同域名,监听同一个端口)
需要一个公网IP地址,两个域名
方式3、相同IP,相同域名,不同端口;
需要一个公网IP地址,一个域名
#显然最后一种方式最节约成本
server { listen 80; server_name ""; return 444; }
Note that the default server is a property of the listen port and not of the server name. More about this later.
①如果命中精确匹配,则优先精确匹配,并终止匹配;
②如果命中多个前缀匹配,则记住最长的前缀匹配,并继续匹配;
③如果最长的前缀匹配是优先前缀匹配,则命中此最长的优先前缀匹配,并终止匹配;
④如果最长的前缀匹配是非优先前缀匹配,并且命中多个正则匹配,使用第一个命中的正则匹配,并终止匹配。否则匹配最长的前缀匹配,终止匹配。
#注意location是没有默认location的,不管是后端还是proxy,没有找到对应的location就会返回404页面。(这里特别注意根“/”会匹配到所有,做proxy如果对跟“/”匹配到都给后端,那么404错误码是后端抛出的)
①精确匹配
方法1、等号为精确匹配
location = / #匹配到了马上停止匹配,如果一个网站访问这个比较多,可以提高访问速度
方法2、另一种精确匹配(完整的URI)
location /data/image.html #隐式的精确匹配
②模糊匹配
location /synchrony #模糊匹配,URI里已/synchrony开头的,已验证
例1、http://localhost/synchrony/app/index.html
例2、http://localhost/synchrony-pass/index.html
location ^~ / #指的非正则匹配,意思当被选为最长普通匹配时,就不要匹配正则了(我当老大了就没正则什么事了)
③正则匹配
区分大小写
location ~
④正则匹配,但是不区分大小写
location ~* \.TXT$
⑤命名location
location @fallback #不是用来处理普通的HTTP请求的,专门用来内部重定向的(仅对内部访问重定向)
#在server上下文中配置
error_page 404 = @fallback;
location @fallback {
proxy_pass http://www.nginx.org;
}
#当访问不存在的http://192.168.7.3/en/ 时将会重定向到http://www.nginx.org/en/
正则 location 匹配让步普通location 的严格精确匹配结果;但覆盖普通 location 的最大前缀匹配结果
假设当前配置是:location /exact/match/test.html { 配置指令块1},location /prefix/ { 配置指令块2} 和 location ~ \.html$ { 配置指令块3} ,如果我们请求 GET /prefix/index.html ,则会被匹配到指令块3 ,因为普通location /prefix/ 依据最大匹配原则能匹配当前请求,但是会被后面的正则location 覆盖;当请求GET /exact/match/test.html ,会匹配到指令块1 ,因为这个是普通location 的exact match ,会禁止继续搜索正则location 。
location /htdocs {
alias /usr/share/phpldapadmin/htdocs;
index index.php;
location ~ \.php$ {
alias /usr/share/phpldapadmin;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
6、拓展Nginx分离location
7、localtion优先级案例
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。