42 Nginx的server_name匹配执行顺序
42 Nginx的server_name匹配执行顺序
42.1 匹配执行顺序
由于server_name指令支持通配符和正则表达式,因此在包含多个虚拟主机的配置文件中,可能会出现一个名称被多个虚拟主机的server_name匹配成功,当遇到这种情况,当前请求交给谁来处理呢?
[root@nginx-100 /usr/local/nginx/conf]# cat nginx.conf user www; worker_processes 2; error_log logs/error.log; pid logs/nginx.pid; #daemon on; # 默认on events { accept_mutex on; multi_accept on; worker_connections 1024; use epoll; } http { include mime.types; default_type text/plain; sendfile on; keepalive_timeout 65; server { listen 80; server_name ~^www\.\w+\.com$; return 200 'regex_success'; # 正则匹配成功 } server { listen 80; server_name www.itheima.*; return 200 'wildcard_after_success'; # 通配符在后匹配成功 } server { listen 80; server_name *.itheima.com; return 200 'wildcard_before_success'; # 通配符在前匹配成功 } server { listen 80; server_name www.itheima.com; return 200 'exact_success'; # 精确匹配成功 } server { listen 80; server_name _; return 444 'default_server not found server!!!'; } } [root@nginx-100 /usr/local/nginx/conf]# nginx -t && nginx -s reload nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
浏览器访问:http://www.itheima.com/

[root@nginx-100 /usr/local/nginx/conf]# cat nginx.conf user www; worker_processes 2; error_log logs/error.log; pid logs/nginx.pid; #daemon on; # 默认on events { accept_mutex on; multi_accept on; worker_connections 1024; use epoll; } http { include mime.types; default_type text/plain; sendfile on; keepalive_timeout 65; server { listen 80; server_name ~^www\.\w+\.com$; return 200 'regex_success'; # 正则匹配成功 } server { listen 80; server_name www.itheima.*; return 200 'wildcard_after_success'; # 通配符在后匹配成功 } server { listen 80; server_name *.itheima.com; return 200 'wildcard_before_success'; # 通配符在前匹配成功 } # server { # listen 80; # server_name www.itheima.com; # return 200 'exact_success'; # 精确匹配成功 # } server { listen 80; server_name _; return 444 'default_server not found server!!!'; } } [root@nginx-100 /usr/local/nginx/conf]# nginx -t && nginx -s reload nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
浏览器访问:http://www.itheima.com/

[root@nginx-100 /usr/local/nginx/conf]# cat nginx.conf user www; worker_processes 2; error_log logs/error.log; pid logs/nginx.pid; #daemon on; # 默认on events { accept_mutex on; multi_accept on; worker_connections 1024; use epoll; } http { include mime.types; default_type text/plain; sendfile on; keepalive_timeout 65; server { listen 80; server_name ~^www\.\w+\.com$; return 200 'regex_success'; # 正则匹配成功 } server { listen 80; server_name www.itheima.*; return 200 'wildcard_after_success'; # 通配符在后匹配成功 } # server { # listen 80; # server_name *.itheima.com; # # return 200 'wildcard_before_success'; # 通配符在前匹配成功 # } # server { # listen 80; # server_name www.itheima.com; # return 200 'exact_success'; # 精确匹配成功 # } server { listen 80; server_name _; return 444 'default_server not found server!!!'; } } [root@nginx-100 /usr/local/nginx/conf]# nginx -t && nginx -s reload nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
浏览器访问:http://www.itheima.com/

[root@nginx-100 /usr/local/nginx/conf]# cat nginx.conf user www; worker_processes 2; error_log logs/error.log; pid logs/nginx.pid; #daemon on; # 默认on events { accept_mutex on; multi_accept on; worker_connections 1024; use epoll; } http { include mime.types; default_type text/plain; sendfile on; keepalive_timeout 65; server { listen 80; server_name ~^www\.\w+\.com$; return 200 'regex_success'; # 正则匹配成功 } # server { # listen 80; # server_name www.itheima.*; # # return 200 'wildcard_after_success'; # 通配符在后匹配成功 # } # server { # listen 80; # server_name *.itheima.com; # # return 200 'wildcard_before_success'; # 通配符在前匹配成功 # } # server { # listen 80; # server_name www.itheima.com; # return 200 'exact_success'; # 精确匹配成功 # } server { listen 80; server_name _; return 444 'default_server not found server!!!'; } } [root@nginx-100 /usr/local/nginx/conf]# nginx -t && nginx -s reload nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
浏览器访问:http://www.itheima.com/

[root@nginx-100 /usr/local/nginx/conf]# cat nginx.conf user www; worker_processes 2; error_log logs/error.log; pid logs/nginx.pid; #daemon on; # 默认on events { accept_mutex on; multi_accept on; worker_connections 1024; use epoll; } http { include mime.types; default_type text/plain; sendfile on; keepalive_timeout 65; # server { # listen 80; # server_name ~^www\.\w+\.com$; # # return 200 'regex_success'; # 正则匹配成功 # } # server { # listen 80; # server_name www.itheima.*; # # return 200 'wildcard_after_success'; # 通配符在后匹配成功 # } # server { # listen 80; # server_name *.itheima.com; # # return 200 'wildcard_before_success'; # 通配符在前匹配成功 # } # server { # listen 80; # server_name www.itheima.com; # return 200 'exact_success'; # 精确匹配成功 # } server { listen 80; server_name _; return 444 'default_server not found server!!!'; } } [root@nginx-100 /usr/local/nginx/conf]# nginx -t && nginx -s reload nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
浏览器访问:http://www.itheima.com/

42.2 总结
regex_success
wildcard_after_success
wildcard_before_success
exact_success
default_server not found server!!!
No.1:准确匹配 server_name
No.2:通配符在开始时匹配server_name成功
No.3:通配符在结束时匹配server_name成功
No.4:正则表达式匹配server_name成功
No.5:被默认的default_server处理,如果没有指定,默认匹配第一个server
———————————————————————————————————————————————————————————————————————————
无敌小马爱学习
浙公网安备 33010602011771号