本地nginx多域名映射

前言:

  工作两年多了,一直感觉技术上没有太大的长进,好多东西感觉会但是给别人讲起来的时候又感觉和没学过一样。以后希望能坚持写博客,把看过的东西都一点一滴积累下来。言归正传,今天要说的是nginx与hosts以及hosts的一个小插件的使用,此文只是便于开发理解,并不会涉入太深的东西。有错误的地方,还望大家多指正。

1.几个概念

1)DNS

  DNS是Domain Name System的缩写,即域名系统。DNS是internet的一项服务,一般叫域名服务或者域名解析服务,主要是提供网站域名与ip地址的相互转换的服务。

2)域名与ip之间的关系

  域名与IP地址之间是呈一一对应的关系,但多个域名可以对应同一个IP地址。就像一个人的姓名和身份证号码之间的关系,显然记忆人的名字要比身份证号容易的多。IP地址是网络上标识用户站点的数字地址,为了简单好记,采用域名来代替IP地址表示站点地址,DNS讲域名解析成IP地址,使其一一对应。

3)DNS是如何工作的?

  在Internet上,一个域名要由两台域名服务器提供“权威性的”域名解析。如果是国际域名,域名注册管理机构就是Interinc,如果是国内域名,域名注册管理机构就是CNNIC。所有的域名必须在两个注册机构上注册才能正常使用。

  下面用详细事例说明:

  比如,你现在要访问一个网站,例如www.baidu.com,你的电脑需要知道这个站点的IP地址是多少才能访问。于是它会自动向您所在区域的“主控DNS”服务器发出询问,即“www.baidu.com”的IP是多少?如果该服务器上没有该域名的记录,它会到上一级的DNS去查找,一直重复进行直到找到为止,如果到最后一级仍然没有找到。此时会到权威性的DNS上查找,然后把对应的ip信息返回给你的电脑。你的电脑就可以与www.baidu.com对应的服务器进行通信了。这样一级一级的查询被称为“递归式”的查询。

4)hosts文件。

  hosts文件是本地的一个无后缀的系统文件,需要管理员权限才能修改其内容。从上面DNS的解析过程可以看出,每次DNS解析可能会经过很多DNS服务器的转发最终才能获取到真正的IP地址,这样会很没效率。所以在计算机的本地也有一个DNS解析文件,即hosts文件。当你把hosts中的   www.baidu.com指向正确的百度服务器地址的时候,电脑会与正确的服务器进行交互。如果本地hosts,没有配置映射关系,那么它会到局域网的DNS服务器寻找对应的映射关系。如果仍然没有,它就会在本地对应节点的DNS去查找,重复上面所说的步骤。

2.nginx的反向代理

   代理:其实就是中介,A和B本来可以直连,但是在A和B之间加入了C。

  正向代理:即上面的dns,它代理的是客户端,为客户端收发请求,对server断是透明的。用浏览器访问  时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。

   

   反向代理:即nginx的一个功能,它代理的是服务器,它为server端转发请求,对client端是透明的。当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

     

3.使用nginx加hosts在本机做多域名映射

  比如你的两个应用的域名是mem.test.com和memsys.test.com。

  1)找到C:WindowsSystem32driversetc目录下的hosts文件,用超级管理员权限打开。在文件尾部加入

    mem.test.com 127.0.0.1

    memsys.test.com 127.0.0.1

  2)修改nginx.conf文件(由于nginx.conf的配置很多,这里只是用最简单的事例说明)

    在http的{}内部加入server。加入内容如下:

server {
  listen 80;
  server_name mem.test.com;   //填入自己项目对应的域名
  charset utf-8;
  error_log logs/error.log;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://127.0.0.1:8082; //填入自己项目的ip加端口号(此处的项目没有工程上下文,只有端口号)
  }
}

 

server {
  listen 80;
  server_name memsys.test.com;   //填入自己项目对应的域名
  charset utf-8;
  error_log logs/error.log;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://127.0.0.1:8083; //填入自己项目的ip加端口号(此处的项目没有工程上下文,只有端口号)
  }
}

    修改完以后,再重新加载nginx配置文件,nginx.exe -s reload

  

4.chrome的hosts小插件

   平时在开发的时候经常需要在不同的环境切换,每次切换的时候还得修改hosts文件。由于hosts在操作系统和浏览器中都有缓存,有时候修改hosts以后,dns解析不一定生效。造成开发的时候很麻烦。现在可以使用chrome的hosts小插件。

   在google chrome的应用商店里面搜索"HostAdmin App",直接安装即可。安装完成以后,在浏览器输入chrome://apps/,打开就能看到刚刚安装的插件。点击进入如下界面:该插件支持单域名ip的切换,使用哪个域名直接在对应的ip上打钩即可,添加新的映射关系的时候可以直接在hosts文件里添加即可。另外在该插件中还有一个groups的概念,一个groups下面可以定义多个域名与ip的映射关系。如果你的你有你的每个环境下面有多个域名与ip的映射关系,你可以采取这种方式。语法如下:在groups开始前加#====,在groups结束时加#====即可。

     

    修改以后hostAdmin效果

   

  

原文地址:https://www.cnblogs.com/jpfss/p/9944823.html