向用户屏蔽来源:使用nginx代理https网站,进行转发访问

要做什么

当我们的一些资源来源于其他网站的时候,尤其是图片等信息。我们往往不想让用户知道资源来自于哪里。这样方便公司对自己的业务和技术细节进行保密。我们就以图片信息举例说明,这时候我们一般有两种解决方案。

办法一:转存所有图片

即本地扮演一个缓存服务器的角色,把图片来源方的所有图片缓存到本地,用户访问的时候直接从本地获取,获取不到的时候直接去拿最新的进行缓存,拿不到返回404。

优点:

用户体验更好,因为绝大部分用户的访问速度很快

缺点:

工作量比较大,且在批量保存信息的时候会拖慢速度,并且浪费服务器存储空间。

办法二:使用nginx代理https网站,进行转发访问

即我们的服务器不缓存信息,只做网络转发。即扮演了代理的角色,用户访问的时候,是访问的我们的服务器,比如图片信息来源为http://img.other.com/a.jpg 用户访问http://img.my.com/a.jpg,我们的服务器作为代理把用户的请求都转发到http://img.other.com/a.jpg,拿到结果以后再转给用户。

优点:
  • 节省服务器空间因为不用存储。
  • 可以在中间的代理层做过滤或者其他处理。
  • 工作量相对较小,也能做到用户无感知。
缺点:
  • 因为用户不直接访问信息源,中间还增加了访问代理服务器,所以访问速度会变慢。
  • 也需要进行一定的处理,比如把图片链接由信息源替换为代理服务器的地址。当然这对比于缓存所有图片工作量小了很多。

具体操作流程

使用的工具

我们使用nginx的代理功能,会使用到工具:https://github.com/chobits/ngx_http_proxy_connect_module

此模块提供对CONNECT 方法请求的支持。该方法主要用于通过代理服务器对SSL 请求进行隧道传输。

安装

有两种方式,静态木块和动态模块,我建议,既然进行编译了,那就直接用静态吧。另外因为作者不知道你要在什么目录中使用,所以他的安装代码中是需要修改的。我进行了一下优化。步骤如下:

安装需要的组件
yum install -y git pcre-devel openssl openssl-devel zlib zlib-devel gcc-c++
安装nginx模块

操作跟目录请自选,然后运行下面的命令

wget http://nginx.org/download/nginx-1.9.2.tar.gz
tar -xzvf nginx-1.9.2.tar.gz
cd nginx-1.9.2/
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
patch -p1 < ngx_http_proxy_connect_module/patch/proxy_connect.patch
./configure --add-module=ngx_http_proxy_connect_module --with-http_ssl_module
make && make install
把nginx增加到环境变量中
vim /etc/profile

#文件中增加
PATH=$PATH:/usr/local/nginx/sbin
export PATH

#使配置生效
source /etc/profile
修改nginx配置文件
server {
        listen                         8888 ssl;
	    #ssl证书配置
	    ssl on;
        ssl_certificate /data/ssl/你的证书.pem;
        ssl_certificate_key /data/ssl/你的证书.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
       
        resolver                       8.8.8.8;

        proxy_connect;
        proxy_connect_allow            443 563;
        proxy_connect_connect_timeout  10s;
        proxy_connect_read_timeout     10s;
        proxy_connect_send_timeout     10s;
        
        #对错误进行拦截处理,即如果源图片返回了一些错误信息,包含了不想让用户看到的,可以在这里进行特殊化处理。
	    proxy_intercept_errors on;
	    error_page 404 403 = /404.html;
	    
        location / { 
            proxy_pass https://目的域名;
            proxy_set_header Host 目的域名;
        }   
    }

进行配置文件的修改后,测试配置文件nginx -t 然后重启nginx进行测试。

    原文作者:vinter-he
    原文地址: https://blog.csdn.net/winterfeng123/article/details/117953241
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞