没有合适的资源?快使用搜索试试~ 我知道了~
nginx正向代理与反向代理详解
29 下载量 105 浏览量
2020-09-29
20:34:01
上传
评论
收藏 2.93MB PDF 举报
温馨提示
试读
16页
本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
资源推荐
资源详情
资源评论
nginx正向代理与反向代理详解正向代理与反向代理详解
本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
正向代理正向代理
就是假设有一个内网
内网有两台机器,这两台机器只有 a 可以上网
b 不能上网,但是 a 和 b 通过网络相连接
这时如果 b 想访问外网,就可以通过 a 来正向代理访问外网
正向代理就是在内网中模拟目标服务器,把内网中其它机器的请求
转发给外网中的真正的目标服务器
所以正向代理是接受内网其它机器的请求的
反向代理则是反过来
也是一个内网,有几台机器,只有其中一台与外网连接
但是反向代理接受的不是内网机器的访问请求
反向代理接受的是外网过来的访问请求
然后把请求转发到内网中的其它机器上去
外网发出请求的用户并不知道反向代理的服务器把请求转发给了谁
要在一台机器上设置正向代理的功能
如图,编辑一个nginx配置文件
上图就是配置文件内容
如果配置一台服务器作为正向代理服务器
那么这个虚拟主机配置文件就必须是默认虚拟主机
因为所有访问这台机器的网络请求应该先访问这个虚拟主机才对
所以这里要设置 default_server
然后还要把原来的 默认虚拟主机 配置文件名称修改掉
如图,把 default.conf 配置文件的名称修改一下
这样就取消了原来的默认虚拟主机配置文件了
因为默认的默认虚拟主机配置文件就是 default.conf
配置文件里面的 resolver 119.29.29.29
意思是配置一个 dns 地址
因为是做正向代理,接受了内网请求的域名后
要把请求发送给真正要访问的服务器
但是内网发送的域名是没有包含 ip 地址的
所以还要把域名发送给 dns 服务器解析 ip 地址
拿到 ip地址后才能转发到要访问的服务器上去
所以这里需要配置一个 dns 地址
接受了内网域名后,就会把域名发送到这个 dns 上去解析
下面的 location 按照图中设置就可以了
这样正向代理服务器接受内网机器请求后
就会把域名发到配置的dns上解析,然后访问真正的服务器
再把真正服务器返回的内容发送给发出请求的内网机器
nginx反向代理反向代理
做一个反向代理的例子
如图建立一个测试的虚拟主机配置文件
监听 8080 端口,域名为 www.test.com
根目录是 /data/wwwroot/test.com
访问虚拟主机显示的首页文件是 index.html
如图,创建虚拟主机的根目录 /data/wwwroot/test.com
然后使用 echo "test.com_8080" > !$/index.html
创建一个内容为 test.com_8080 的首页文件
这个文件在 /data/wwwroot/test.com 目录里面
如图,新建一个反向代理的虚拟主机配置文件
监听 80 端口,域名为 www.test.com
下面的 location / 里面就是反向代理的配置
当访问这个虚拟主机的时候,就会把访问请求发送给 127.0.0.1:8080
如图,使用 curl 访问 127.0.0.1:8080 虚拟主机
成功返回了 test.com_8080 这说明这个虚拟主机能够被访问
如图,再创建一个虚拟主机配置文件
跟之前的 test 虚拟主机差不多
但是这个虚拟主机并没有设置 域名
location 设置返回的内容是 8080 default 字符串
保存退出,重载 nginx
还要把 test虚拟主机的 default server 设置取消掉
那么现在 127.0.0.1:8080 对应两个虚拟主机
一个是 test 虚拟主机,另外一个是 8080 default 虚拟主机
这两个虚拟主机的 ip 端口都是一模一样的
它们的区别是 test 虚拟主机是有域名的
而 8080 default 虚拟主机是没有域名的
现在已经设置了 8080 default 为默认虚拟主机
所以如果只访问 127.0.0.1:8080 的话
访问的一定是 8080 default 虚拟主机
如果想访问 test 虚拟主机,就需要加上 test 虚拟主机的域名
才能成功访问 test 虚拟主机
如图,可以看到访问 curl 127.0.0.1:8080/ 返回的结果是 8080 default
使用 curl -x127.0.0.1:8080 www.test.com
这里带上了域名,返回的就是 test.com_8080
说明想访问 test 虚拟主机,ip端口还需要绑定域名才行
如图,curl 访问 127.0.0.1:80 域名 www.test.com
返回的是 test.com_8080 说明这个反向代理成功了
我们访问的是 80 端口,实际却返回了 8080 端口的虚拟主机的内容
如图,这里把反向代理虚拟主机里面的 proxy_pass 行下面的都注释掉
保存退出,重载 nginx
如图,再使用 curl 访问 127.0.0.1:80 域名 www.test.com
实际返回的却是 8080 default
而我们想访问的却是 test 虚拟主机
如图,proxy_set_header Host $host;
这一行代码就是指定访问的域名
上面设置了 127.0.0.1:8080
反向代理的时候就会指向这个 ip端口
如果不设置 host 那就只会访问 127.0.0.1:8080 的虚拟主机
如果设置了 host ,那么就会指向跟指定的 host 绑定的 127.0.0.1:8080
这里的 $host 是系统变量,实际的值就是当前的虚拟主机的 server_name
也就是 www.test.com ,server_name 是什么,host的值就是什么
这里设置了 host 就相当于 curl -x127.0.0.1:8080 www.test.com
如果这里不设置 host 那么就只会访问 127.0.0.1:8080
这样就可以把 域名 跟 ip端口进行绑定
如图,除了写 ip端口之外,proxy_pass 也可以直接写域名
这里写的是 www.123.com:8080/
但是这样写的话, nginx 并不知道这个域名指向哪里
所以还需要在系统里面绑定对应的 ip
例如在 /etc/hosts 文件里面,写入对应的 域名和 ip 进行绑定
这样nginx 里面的 proxy_pass 的域名系统就会解析出一个 Ip 地址
然后再访问这个 ip端口
下面的 proxy_header Host 作用就是设置一个 域名
这个域名会与上面的 ip端口绑定访问
如果上面的 ip端口 写的不是 ip 而是域名
跟下面指定的域名是不冲突的,因为上面写的域名的作用是用来解析ip的
下面指定的域名才会跟上面解析出来的 ip端口进行绑定访问
这个例子使用的是 $host 这是 nginx全局变量
这个变量实际是对应了一个值的,就是当前虚拟主机 server_name 的值
但是一般来说,还是直接写 ip 端口方便一些
上面就是指定 ip端口
下面指定跟 ip端口绑定的 host 域名
nginx反向代理反向代理02
如图,proxy_pass 指令后面可以跟 url
有三种格式,传输协议+域名+uri (访问路径)
传输协议+ip端口+uri
传输协议+socket
这里 unix ,http ,https 都是传输协议的种类
域名+uri 和 ip端口+uri 还有 socket 都是访问的路径
socket 一般是某个程序专用的访问端口
访问某个socket就是访问某个特定的程序,所以不需要使用路径
剩余15页未读,继续阅读
资源评论
weixin_38663036
- 粉丝: 4
- 资源: 930
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功