简单梳理一下nginx中关于server 和location的配置.
比如URL:www.mask_dev2.com:9999/login/
server管的前半部分,即:www.mask_dev2.com:9999
location管的是后半部分,即:/login/
一个nginx可以配置多个server。
每个server可以配置多个location。
URL的前半部分控制选择哪一个server,后半部分控制选择哪一个location,最终决定往哪里去请求.
server的配置
server { listen 9999; server_name www.mask_dev2.cn; location / { default_type text/html; content_by_lua ' ngx.say("<p>first</p>") '; }}server { listen 9999; server_name www.mask_dev2.*; location / { default_type text/html; content_by_lua ' ngx.say("<p>second</p>") '; }}server { listen 9998; server_name _; location / { default_type text/html; content_by_lua ' ngx.say("<p>third</p>") '; }}
首先,请求nginx的地址,肯定是请求的nginx所在的服务器,也就是说ip是固定的。
也就是说,无所谓server_name是什么,都是指的当前服务器.
那么当前服务器是怎样对应多个域名呢,这个只需要在相应的dns服务器中进行添加,就行了,比如暂时把本机当成dns服务器,修改hosts
127.0.0.1 localhost
127.0.0.1 www.mask_dev2.cn
127.0.0.1 www.mask_dev2.com
server匹配顺序
server_name与host匹配优先级如下:
1、完全匹配
2、通配符在前的,如*.test.com
3、在后的,如www.test.*
4、正则匹配,如~^/.www/.test/.com$
如果都不匹配
1、优先选择listen配置项后有default或default_server的
2、找到匹配listen端口的第一个server块
location配置
找到server之后,再去找具体的location
server { listen 9998; server_name _; location = / { #规则A } location = /login { #规则B } location ^~ /static/ { #规则C } location ~ /.(gif|jpg|png|js|css)$ { #规则D } location ~* /.png$ { #规则E } location !~ /.xhtml$ { #规则F } location !~* /.xhtml$ { #规则G } location / { #规则H }
语法规则:
location [=||*|^~] uri { … }
新闻热点
疑难解答