Nginx基础操作(2):nginx反向代理

反向代理

  • 简述
  • 一、反向代理的配置
    • 1.反向代理单个后台服务端口
    • 2.反向代理单多后台服务端口
    • 3.通过域名完成反向代理
    • 4.nginx自己代理自己的端口
  • 总结

简述

  • 反向代理:其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求地址发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,
    此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏拿过来真实服务器地址。如下图所示,代理服务器可能会连接到了许多其他的内部服务器,但是对于客户端来说只需要访问代理服务器就行了。

一、反向代理的配置

下面以windows操作系统为例,修改nginx.conf的配置在文件,完成反向代理的配置。

1.反向代理单个后台服务端口

例如:将本机的80端口代理到百度的服务器的域名。如下图所示。在location下面增加需要代理的服务器的地址:

增加一行:proxy_pass http://xxx.xx.xx.xx:port/

修改完nginx.conf 的时候,先执行下nginx -t命令,测试下配置文件修改的格式是否正确,如果正确,重新加载下nginx。nginx -s  reload

然后在本机的浏览器输入: 127.0.01  会自动跳转到百度的页面。(注意:每一行结束需要一个分号(;)结束,否则语法会无法通过)

2.反向代理多个后台服务端口

例如:将本机的8090的端口,通过不同的访问的路径,代理到多个服务器的后端端口。如下图所示:

本机浏览器访问:

       127.0.0.1:8090 访问到本机的nginx的主页面

       127.0.0.1:8090/baidu  :代理访问到百度页面
可使用ffplay播放在线的flv的视频流:

       http://127.0.0.1:8090/video/3.flv 代理访问到公司内部搭建的一个发布flv视频的流媒体.
       实际会访问到http://192.168.10.247:7001/live/3.flv

如果继续增加代理的端口,继续增加location即可。一个http的模块可以对应多个server模块,一个server模块会对应多个location的模块。
本地的server_name  应该填127.0.0.1 .来回修改配置文件,截图错了。

3.通过域名完成反向代理

既然涉及到了域名,那么首先我们需要了解下,操作系统是如何解析域名。(以windows为例)

  • 当输入一个网址的时候,浏览器会先查看windows的host文件。查看是否有对应的域名和IP地址的对应关系。
    如果没有对应的域名,然后通过dns域名服务器进行转换。
  • 对于需要通过域名完成代理的,可以先设置本地的域名和ip地址的映射关系。
  • win 10系统中的hosts文件在C:/Windows/System32/drivers/etc/的目录下面。现在需要修改hosts的文件。
    如下图所示,增加一个ip地址对应的域名的关系。当访问www.cg.com的时候相当于访问了127.0.0.1.这个ip地址。然后保存退出

备注:win10 下面的这个文件默认是不允许修改的。需要右键文件的属性,修改对应的用户组的权限就可以对hosts的文件进行修改。

然后修改nginx.conf的配置文件,如下图所示。server_name的地方,填写本机的域名。
例如访问flv的视频流就可以访问: http://www.cg.com:8090/video/3.flv 

4.nginx自己代理自己的端口

有些时候服务器需要对外开放只一个端口,用于接口的访问,而内部的服务器访问的接口很多,也跳转到机器的内部局域网的相关服务器上面,
为了简化nginx的代理的复杂逻辑了,可以本机监听一个端口,然后代理本机的端口,转发给nginx监听的另一个端口,进行代理访问,本质上是没有
什么其他的变化。固定了统一的入口的标准。如下图所示:将本机的80端口转发到本机的8090端口,
假如现在需要访问flv的视频: 
              可以直接访问:  http://www.cg.com/test/video/3.flv
              http://www.cg.com/test 会跳转到  http://www.cg.com:8090的端口,然后在代理到流媒体的访问路径。
              对这台服务器访问的入口必须是:  http://xxxx.xx.xx/test/


总结

总而言之:nginx的反向代理就是提供一个对外的访问的接口,隐藏了内部的数据的交互的过程,对于客户端来说,是没有任何影响的。主要的配置项都在nginx.conf的文件中。nginx.conf的配置文件也只有三大块,对于配置文件模块划分不理解的,可以参考我写的另一篇博客
Nginx基础操作(1):nginx的基本概念。:https://blog.csdn.net/qq_37103755/article/details/111146630

猜你喜欢

转载自blog.csdn.net/qq_37103755/article/details/111147824