nginx与hosts配置对比

597 阅读3分钟

问题描述

在项目开发过程中,需要启动两个项目(项目A需要访问项目B)。使用hosts做域名绑定,端口都默认是80(hosts不支持端口号的绑定),而本地端口80不能同时存在。那么只能通过nginx做代理的方式,实现两个项目都可以通过80端口进行访问。

相关概念

DNS服务器

一个把域名解析成IP地址的服务器。存储的是域名和IP的映射关系。一个域名绑定一个IP地址,一个IP可以绑定多个域名。

Hosts

相当于一个本地的DNS服务器。如果本地开启了hosts,正常流程是 先走本地hosts配置,本地查询失败再走网络DNS服务器。

host只能配置域名与IP的映射关系,不能配置端口号

Nginx

通过配置文件,执行反向代理

开发情景

情景1:部署项目到服务器上,想通过域名进行访问。

  1. 通过配置hosts进行域名和IP的映射
  2. nginx中配置域名和IP的映射

上述两种配置的区别是什么?联系是什么?实现的效果是否相同?需要同时配置吗?

【区别】

  • hosts是通过类似于DNS解析,通过映射关系,找到域名对应的IP地址,返回IP地址给到浏览器,浏览器访问该IP地址
  • nginx是通过server_namelisten以及location中的proxy_pass,进行反向代理

两者不是一回事

【另外】

不一定需要同时配置。

  • hosts配置之后,浏览器默认是访问的是80端口;如果nginx配置了80端口,直接就可以访问了,无需配置server_name。
  • 但是,多个域名访问同一个IP端口,此时需要通过server_name区分访问哪个server域

你要访问的端口不是默认的80,就需要另外配置nginx!

情景2:hosts中的映射与nginx中的server的host有什么关联

【执行流程】

【前提】:开启hosts配置,nginx反向代理

1. 客户端A发起请求
2. 浏览器请求域名
3. hosts解析对应的IP
4. 找到对应IP的服务器
5. 被服务器中的nginx反向代理拦截
6. 找到nginx配置文件中相同的域名(server中的server_name)
7. 定位对应的反向映射地址(location中的proxy_pass,如http://localhost:8081)
8. 指向对应的8081项目

【如果】

没有开启hosts,只配置了nginx。那么在域名解析IP的过程,就会去网络DNS中进行。而找到的IP主机不一定有nginx的配置,那么就不会执行相应的反向代理!

【最后】

线上搭建nginx服务的问题。

当我们前端打包项目,发布到线上服务器。打包后的文件会生成一个入口文件(如:index.html)。通常nginx做的反向代理,就是代理到这个入口文件