hosts和nginx配置详细对⽐
⽂章⽬录
说明
DNS服务器:
把域名解析为IP地址,保存的就是域名和ip的映射关系。⼀个域名和⼀个ip地址绑定,⼀个ip地址可以被多个域名绑定。
域名:
开始的时候是通过ip来访问⽹站,但ip是⼀串数字不容易记忆。后来就弄了个域名。
其他:
1、修改hosts⽂件实现域名本地解析–相当于本地DNS服务器,正常是先⾛本地(hosts),本地失败再⾛⽹络的DNS服务器
2、hosts⽂件⾥边只能配置ip和域名的映射关系,不能配端⼝号。
情景1
⽐如我部署了⼀项⽬到服务器上,不想通过IP来访问,那么在hosts中进⾏域名和IP的映射,与在ngnix中配置IP和域名映射有什么关系?是不是能实现相同的效果?需要同时都配置吗?
1、在hosts中配置,是相当于dns解析,浏览器中访问了该域名,会在hosts中找映射关系,然后把ip返回给浏览器,再访问该ip地址。
给同学的一封信2、⽽nginx中你应该指的是rver_name指令吧,这个是会匹配http请求头中的Host字段。
3、所以完全不是⼀回事。
4、不⼀定需要同时配置,设置了hosts后,浏览器默认访问80端⼝,如果nginx中配置了80端⼝,直接就可以访问了,不⽤设置
rver_name。但是有种情况是,多个域名访问相同的ip端⼝,这时候需要通过rver_name去区分访问的是哪个rver域。
也就是说你要访问的端⼝不是默认80情况就要另外配置nginx!
情景2
windows中hosts中的映射项和nginx中配置的rver的host的关系是什么?当使⽤浏览器进⾏访问时,域名是否先在hosts⽂件中进⾏查找,然后通过ip地址去访问资源,那nginx是不是不会对该请求进⾏匹配(因为是ip地址)?
1、nginx中的rver_name 也会⾛⼀遍 hosts,看是否对应,hosts就相当于⼀个⼩型的域名服务器。应该是这样
2、你在浏览器中 输⼊⼀个⽹址 会先check⼀下你本地的hosts ⽂件 如果有做映射的话 就直接通过映射的ip访问你的 web服务器(这边是nginx) 当这个请求被nginx 获得后 他会check⼀下请求的域名和rvername是否匹配,匹配到的话 就根据相应的配置返回内容, 没有匹配到的话 就根据默认的配置返回内容。
nginx、本地host、域名解析之间的关系
茅箭区客户端通过域名请求服务,如果你在本地的hosts⽂件中配置了该域名与ip的映射关系,那么,请求就会直接发送到hosts⽂件中对应的ip,不会通过dns解析(如果本地hosts⽂件中没有配置,就会通过dns解析域名)。
这时,请求到达了服务端,服务端的nginx拦截了该请求,然后在本地通过域名匹配rver_name,然后,根据proxy_pass返回相应的服务给客户端。
1.如果在本地的hosts⽂件中配置了该域名与ip的映射关系,nginx拦截了该请求 rverName只认IP地址。如果本地hosts⽂件中没有配置,就会通过dns解析域名,nginx拦截了该请求 rverName认IP地址,同时也认识域名。
2.⼀般云服务器上,我们不光要域名解析⾄服务器就好了,还要向服务商申请添加⽩名单,把域名添加⾄⽩名单中,才可以通过域名跳到Nginx。
假设客户端A--------》浏览器url请求域名--------》域名被host解析对应的IP--------》到对应IP的服务器--------》先被nginx反向代理拦截--------》找到nginx上⼀样域名(f配置⽂件中rver⾥的rver_name)--------》对应的反向映射地址(f配置⽂件中同左rver⾥的proxy_pass 就是对应的Tomcat⾥WEB的发布路径如 http:localhost:8080)--------》对应8080端⼝的项⽬
实例讲解1
1.统⼀环境
如果不同环境使⽤不同的ip去访问,可能会出现⼀些问题。为了保证所有环境的⼀致,我们会在各种环境下都使⽤域名来访问。
但是最终,我们希望这些域名指向的还是我们本机的某个端⼝。那么,当我们在浏览器输⼊⼀个域名
时,浏览器是如何找到对应服务的ip和端⼝的呢?
2.域名解析
⼀个域名⼀定会被解析为⼀个或多个ip。这⼀般会包含两步:
本地域名解析
浏览器会⾸先在本机的hosts⽂件中查找域名映射的IP地址,如果查找到就返回IP ,没找到则进⾏域名服务器解析,⼀般本地解析都会失败,因为默认这个⽂件是空的。
Windows下的hosts⽂件地址:C:/Windows/System32/drivers/etc/hosts
Linux下的hosts⽂件所在路径: /etc/hosts
样式:
# My hosts
127.0.0.1 localhost
0.0.0.0
127.0.0.
域名服务器解析
本地解析失败,才会进⾏域名服务器解析,域名服务器就是⽹络中的⼀台计算机,⾥⾯记录了所有注册备案的域名和ip映射关系,⼀般只要域名是正确的,并且备案通过,⼀定能找到。
3.解决域名解析问题
我们不可能去购买⼀个域名,因此我们可以伪造本地的hosts⽂件,实现对域名的解析。修改本地的host为:
127.0.0.
127.0.0.m
这样就实现了域名的关系映射了。
三根香
每次在C盘寻找hosts⽂件并修改是⾮常⿇烦的,给⼤家推荐⼀个快捷修改host的⼯具,
(管理员运⾏)
效果:
我们添加了两个映射关系:
127.0.0.1 :我们的后台系统地址
127.0.0.1 :我们的系统客户关系管理系统地址
现在,ping⼀下域名试试是否畅通:
OK!
这⾥就要⽤到反向代理⼯具:Nginx
安装⾮常简单,把nginx直接解压即可
⽬录结构:
使⽤
nginx可以通过命令⾏来启动,操作命令:(修改之后重启)
启动:
停⽌: -s stop
重新加载: -s reload
反向代理配置
nginx中的每个rver就是⼀个反向代理配置,可以有多个rver
实例讲解2
hosts⽂件在各pc系统⾥都是有的,⽐如Windows默认在C:\Windows\System32\drivers\etc⽬录,他⾥⾯的有效内容,就是⼀个个的ip和域名映射关系。
把⼀个⾮https的站点域名映射为别的ip地址,最简单的地址就是你的本地127.0.0.1。如果你本地没启对应的可访问服务,你在访问这个站点,就会变成什么也访问不到了,因为实际在访问你配置的这个地址127.0.0.1。
淘宝网女装店铺排行榜再来说nginx。上⾯说到修改hosts来访问你想要的域名映射到的ip。这⾥先启⽤ng配置⼀个监听本地127.0.0.1默认80端⼝的服务,把这个资源定位到你本地的⼀个浏览器可展⽰⽂件,⽐如这⾥的D盘/home⽬录下的index.html⽂件。
location / { root D:/home; index index.html; } 再访问这个域名时,你的浏览器展⽰的,就是这个页⾯内容了。
这在⼀些前后端分离的应⽤中,运⽤得⾮常⼴泛。⽐如在服务器上监听⾃⼰的ip和某个对外端⼝,将它指定到某个前端⽂件,就可以给访问者展⽰你的内容了。
这些内容,也经常被⼀些⿊客利⽤,使你在访问某个域名时,实际到达的确实⼀个伪造的⽹站,这个⽹站往往会把外表做得很真站点的⼀模⼀样,但它背后的数据,却都是假的,这时你若输⼊⽤户名密码登录,或是其他数据输⼊,就会很危险。
Nginx配置⽂件结构
#ur nobody;
worker_process 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
金错刀行http {
http {
include pes;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_ur [$time_local] "$request" ' # '$status $body_bytes_nt "$http_referer" '
# '"$http_ur_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
ndfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
醉驾如何处罚
rver {
listen 80;
rver_name localhost;
#chart koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
发际线高index index.html index.htm;
}
#error_page 404 /404.html;
# redirect rver error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass 127.0.0.1;止咳最快的偏方
#}
# pass the PHP scripts to FastCGI rver listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-bad configuration