专栏首页零基础自学Java【微服务】142:nginx反向代理的使用

【微服务】142:nginx反向代理的使用

一、SwitchHosts解决域名

要知道在实际开发中会有不同的环境。

  • 开发环境:自己的电脑。
  • 测试环境:提供给测试人员使用的环境。
  • 预发布环境:数据是和生成环境的数据一致,运行最新的项目代码进去测试。
  • 生产环境:项目最终发布上线的环境。

如果不同环境使用不同的ip去访问,可能会出现一些问题。所以要统一环境。

1统一环境

现在条件有限,不可能说去注册一个域名来使用,因此我们可以伪造本地的hosts文件。

首先找到电脑中的hosts文件:

  • Windows下的hosts文件地址:C:/Windows/System32/drivers/etc/hosts
  • Linux下的hosts文件所在路径:/etc/hosts

然后再修改本地的hosts为:

  • 127.0.0.1 api.liuxiaoai.com :我们的网关Zuul。
  • 127.0.0.1 manage.liuxiaoai.com:我们的后台系统地址。

这样的话就能解决一个问题,以后在浏览器上访问设定的域名即可,而不是直接使用ip。

一个域名会被解析为一个或多个ip,浏览器会在hosts文件中查找域名映射的ip地址。

3SwitchHosts的使用

每次都要去找到host文件,路径繁琐,非常麻烦,所以可以使用SwitchHosts来完成:

注意,再次强调:

真正地做项目会去买一个域名,配置好后,所有人通过该域名访问即可。

但是现在没有买域名,所以使用SwitchHosts来自己骗自己,目的是知道有这回事。

二、nginx解决端口问题

虽然域名解决了,但是现在如果我们要访问,还得自己加上端口9001。

那么问题来了,比如说我们去访问淘宝,它怎么就不需要加上一个端口号呢?

所以我们希望实现的是只需要域名就能直接实现访问:manage.liuxiaoai.com。

如果不输入端口,浏览器会将其默认设成80,那如何才能把请求转移到9001端口呢?

这里就要用到反向代理工具:Nginx

①nginx作为web服务器

Web服务器分2类:

  • web应用服务器,如:Tomcat。
  • web服务器,如:Apache 服务器,Nginx

它们的区分在于:

  • Nginx不能解析jsp等页面,只能处理js、css、html等静态资源。
  • 但是Nginx的并发能力要远高于Tomcat这些web应用服务器。

所以项目中使用Nginx + Tomcat两者结合。

②nginx作为反向代理服务器

什么是反向代理?

用一台服务器代理真实服务器,用户访问的不再是真实服务器而是代理服务器。

利用反向代理,就可以解决端口问题:

注意:浏览器中输入任意路径如果没有指定端口,浏览器会默认配置端口为80。

在nginx中配置好反向代理的规则:

根据不同的请求交给不同的真实服务器处理。

当请求到达nginx,nginx会根据已经定义的规则进行请求的转发,从而实现反向代理。

③nginx安装和使用

安装非常简单,网上一堆资料,不再赘述,我们在本地安装一台nginx,目录结构如下:

nginx可以直接点击,但是会闪一下导致以为它没启动,实际上它已经后台启动了。

这样的坏处在于如果多次点击会启动多个nginx服务器。

所以一般会通过命令行来启动,命令如下:

  • 启动:start nginx.exe
  • 停止:nginx.exe -s stop
  • 重新加载:nginx.exe -s reload

其中在conf文件夹中可以完成配置:

在浏览器上输入manage.liuxiaoai.com,因为没有加端口,浏览器会默认配置端口80。

而我们在nginx中配置的监听端口又是80,所以会访问到nginx服务器。

nginx服务器就会根据配置,反向代理到我们设置本地路径+9001端口。

三、实现流程分析

现在实现了域名访问网站,分析一遍流程:

①浏览器准备发起请求,访问对应域名,但需要进行域名解析。

②本地域名解析,因为修改了hosts,所以解析成功,得到地址:127.0.0.1,请求被发往解析得到的ip,并且默认使用80端口。

③nginx监听80端口,因此捕获这个请求。

④nginx中配置了反向代理规则,将manage.liuxiaoai.com代理到了本地ip+9001端口。

⑤后台系统端口是9001,得到请求并处理,完成后将响应返回到nginx服务器。

⑥nginx将得到的结果返回到浏览器。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务】155:商品新增业务(完)

    这也很好理解,get请求是将参数拼接到路径后面的,而新增的请求参数是有很多的,如果用get请求,那请求路径就很长一串的了。

    刘小爱
  • 【Java】基础38:什么叫递归?

    目录,自然也就是指我们常说的文件夹了,一个文件夹里面是可以有很多个子文件夹和子文件的。

    刘小爱
  • 【Java】基础29:出现异常怎么办?死了都要try

    try:尝试的意思,也就是说这块代码可能有问题,我就尝试着把它用大括号框起来,以防它出错。

    刘小爱
  • Python模拟登录多种实现方式

    py3study
  • Nginx的这些妙用,你肯定有不知道的!

    macrozheng
  • 2018年国庆长假微信数据报告

    国庆7天难得的长假,自然要放松一下,有人选择出游,有人宅家里朋友圈出游。人生百态,微信可以略知一二。昨日微信发布《2018年国庆长假微信数据报告》,关注国庆期间...

    ytkah
  • 开发者应该了解的 10 个 Linux 命令

    作为一名软件工程师,我做过的最明智的投资就是学习 Linux。因为,在日常工作中,我们会经常与 Linux 系统打交道。而今天,作为一名 30 多岁的工程师,我...

    开发者技术前线
  • nginx的n种用法,你都会吗?

    nginx作为一个高性能的web服务器,想必大家垂涎已久,蠢蠢欲动,想学习一番了吧,语法不多说,网上一大堆。下面博主就nginx的非常常用的几个功能做一些讲述和...

    Java识堂
  • Windows下如何查看某个端口被占用,以及如何杀死某个进程

    CherishTheYouth
  • GitLab CI / CD管道的5个优势

    许多CI / CD系统工具为开发团队和DevOps团队提供了源代码控制,构建工件和部署功能等功能。GitLab就是其中之一,但是该产品为CI / CD管道带来了...

    用户7466307

扫码关注云+社区

领取腾讯云代金券