浏览器访问的URL会根据两种方式去进行域名解析:
1、hosts
2、DNS
如果本地配置了hosts就不会去访问DNS了
举例:
访问jisumall.com这个域名,会先到hosts中去地址解析,hosts中有配置的话,那么根据hosts中的配置进行解析。
hosts配置文件
我们这里hosts文件有配置,所以这个域名访问的地址会被转发到本地的127.0.0.1(默认80端口)。(如果hosts没有配置,那么就会到网上的DNS服务器上面找域名)。
由于本地开启了nginx,本地的80端口被nginx接管了,所以这个域名(jisumall.com)又会被nginx接管。
在nginx中可以配置多个80的端口的,在不同的server里面配置
访问到nginx的80端口之后,nginx会根据80端口下面配置的server_name去进行域名解析,比如 jiusmall.com ,刚好一个80端口下面有配置了 server_name 为 jisumall.com 的域名,所以说 jisumall.com这个域名 会落在这个server上。
然后再去读取这个server配置的location配置
location配置如下
可以看到,这里有 jisumall.com/ 的配置,
即
location / {
proxy_set_header Host $host;
proxy_pass http://jisumall;
}
配置的就是域名后面的根目录 jisumall.com/
这里进行host进行host请求头重写
proxy_set_header Host $host
(这条配置没有修改host请求头,上面的
proxy_set_header Host order.jisumall.com
就是修改了host请求头,上面配置的意思是将含有/payed/的路径,重写为
order.jisumall.com/payed/* )
proxy_pass的意思是去访问http://jisumall 这个上游服务器。
而我们配置文件里面配置的上游服务器是
即jisumall这个服务器(和proxy_pass一一对应),里面配置的server,就是我们反向代理到的路径,即127.0.0.1:88 ,如果像上面一样配置了两条server,就是实现nginx的负载均衡。
统一一下走过的路径:
jisumall.com -> hosts(被解析到本地的127.0.0.1) -> nginx(ngxin的80端口,再根据server_name去选择哪个server) -> location(根据location的配置看是否有重写请求头,寻找到配置的上游服务器) -> upstream(根据里面配置的server 去访问 IP:端口)
所以说,最后jisumall.com访问的就是 127.0.0.1:88 端口
感谢农信互联刘宗宁老师耐心教导~~~~~