码迷,mamicode.com
首页 > 其他好文 > 详细

nginx反向代理

时间:2018-08-02 19:21:22      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:实现   cal   说明   公网地址   修改   mil   .com   image   localhost   

Nginx反向代理

第1章 需求:

公司产品app端新上线的功能,用户自己在app上上传图片,通过PC端可以读取到图片,但是app上传图片的地址是阿里云的OSS对象存储,用户可以正常访问,但是PC端上是只可以访问我们阿里云ECS服务器的地址的,安全需求比较高,不可以开放OSS地址的访问,想通过ECS来代理OSS

即访问:ecsport/image 可以到达oss.aliyun.com/hug

用户网络环境说明:

用户程序分别部署在两台机器上,分别是前置机和应用机,两台机器不在一个内网网段,这两台机器中间有网闸,通过网闸转发来实现互通,前置机有公网ip的映射,并且只有对应端口对外,只可以访问我们阿里云ecs的地址

第2章 配置过程

我这里程序中是通过/image来访问的,但是实际的访问请求中是没有image这个目录的,也就是匹配成功之后要去掉这个目录,刚开始是这样配的

   server {

       listen       8110;

       server_name  公网ip;

       location /image/ {

       rewrite ^/image/hug/questionnaire/(.*)$ http://oss.aliyun.com/hug/questionnaire/$1 permanent;

       }

       }

然后我在测试机器上也配置nginx反向代理,把本地的请求转发到阿里云正式服务器上

   server {

       listen       8110;

       server_name  localhost;

       location /image/ {

           proxy_pass http://公网ip/image;

      }

}

配置好以后我在本地访问ecs服务器进行测试,并进行抓包,发现匹配后uri中的image目录地址是去掉了,但是请求的ip地址还是我自己的地址,这在用户的程序上的话是根本无法访问到的

技术分享图片

个人理解nginx中的proxy_passrewrite模块的区别是:

proxy_pass是将请求交给第三方,由第三方去目标中请求,得到返回结果后将结果交给你

rewrite只是帮你修改请求的地址,但是访问者还是自己


所以想我这种需求只能用proxy_pass来进行配置,在阿里云ecs上如下配置:

          location /image/ {

               proxy_pass http://oss.aliyun.com/;

          }

在用户的前置机和应用服务器上分别添加如下的配置:

server {

       listen       3002;

       server_name  前置机服务器内网地址;

       location /image/ {

            proxy_pass http://ecs服务公网地址/image;

       }

       }

server {

       listen       3002;

       server_name  应用服务器内网地址;

       location /image/ {

           proxy_pass http://前置机内网地址/image;

       }

       }

部署成功之后访问图片正常


nginx反向代理

标签:实现   cal   说明   公网地址   修改   mil   .com   image   localhost   

原文地址:http://blog.51cto.com/13520772/2153775

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!