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中你应该指的是server_name指令吧,这个是会匹配http请求头中的Host字段。
3、所以完全不是⼀回事。
4、不⼀定需要同时配置,设置了hosts后,浏览器默认访问80端⼝,如果nginx中配置了80端⼝,直接就可以访问了,不⽤设置
server_name。但是有种情况是,多个域名访问相同的ip端⼝,这时候需要通过server_name去区分访问的是哪个server域。
也就是说你要访问的端⼝不是默认80情况就要另外配置nginx!
情景2
windows中hosts中的映射项和nginx中配置的server的host的关系是什么?当使⽤浏览器进⾏访问时,域名是否先在hosts⽂件中进⾏查,然后通过ip地址去访问资源,那nginx是不是不会对该请求进⾏匹配(因为是ip地址)?
1、nginx中的server_name 也会⾛⼀遍 hosts,看是否对应,hosts就相当于⼀个⼩型的域名服务器。应该是这样
2、你在浏览器中 输⼊⼀个⽹址 会先check⼀下你本地的hosts ⽂件 如果有做映射的话 就直接通过映射的ip访问你的 web服务器(这边是nginx) 当这个请求被nginx 获得后 他会check⼀下请求的域名和servername是否匹配,匹配到的话 就根据相应的配置返回内容, 没有匹配到的话 就根据默认的配置返回内容。
nginx、本地host、域名解析之间的关系
客户端通过域名请求服务,如果你在本地的hosts⽂件中配置了该域名与ip的映射关系,那么,请求就会直接发送到hosts⽂件中对应的ip,不会通过dns解析(如果本地hosts⽂件中没有配置,就会通过dns解析域名)。
这时,请求到达了服务端,服务端的nginx拦截了该请求,然后在本地通过域名匹配server_name,然后,根据proxy_pass返回相应的服务给客户端。
1.如果在本地的hosts⽂件中配置了该域名与ip的映射关系,nginx拦截了该请求 serverName只认IP地址。如果本地hosts⽂件中没有配置,就会通过dns解析域名,nginx拦截了该请求 serverName认IP地址,同时也认识域名。
2.⼀般云服务器上,我们不光要域名解析⾄服务器就好了,还要向服务商申请添加⽩名单,把域名添加⾄⽩名单中,才可以通过域名跳到Nginx。
假设客户端A--------》浏览器url请求域名--------》域名被host解析对应的IP--------》到对应IP的服务器--------》先被nginx反向代理拦截--------》到nginx上⼀样域名(f配置⽂件中server⾥的server_name)--------》对应的反向映射地址(f配置⽂件中同左server⾥的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 account.jetbrains
127.0.0.ind
域名服务器解析
本地解析失败,才会进⾏域名服务器解析,域名服务器就是⽹络中的⼀台计算机,⾥⾯记录了所有注册备案的域名和ip映射关系,⼀般只要域名是正确的,并且备案通过,⼀定能到。
3.解决域名解析问题
我们不可能去购买⼀个域名,因此我们可以伪造本地的hosts⽂件,实现对域名的解析。修改本地的host为:
127.0.0.
127.0.0.
这样就实现了域名的关系映射了。
每次在C盘寻hosts⽂件并修改是⾮常⿇烦的,给⼤家推荐⼀个快捷修改host的⼯具,
(管理员运⾏)
效果:
我们添加了两个映射关系:
127.0.0.1 manage.boss :我们的后台系统地址
127.0.0.1 crm.boss:我们的系统客户关系管理系统地址
现在,ping⼀下域名试试是否畅通:
OK!
这⾥就要⽤到反向代理⼯具:Nginx
安装⾮常简单,把nginx直接解压即可
⽬录结构:
使⽤
nginx可以通过命令⾏来启动,操作命令:(修改之后重启)
启动:
停⽌: -s stop
重新加载: -s reload
反向代理配置
nginx中的每个server就是⼀个反向代理配置,可以有多个server
实例讲解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配置⽂件结构
#user nobody;
worker_processes 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_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server 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 server 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;
#}
nginx和apache区别}
# another virtual host using mix of IP-, name-, and port-based configuration
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论