本来觉得是个挺简单的事情,仔细看了下还是有一些细节需要注意的。网上基本都是仅nginx环境下的配置,这里给一个用Nginx+Tomcat结构的配置及其简要说明,主要有以下两个步骤,选任意一个方案即可。


1. Nginx防盗链的配置

  a. 方法一:增加ngx_http_accesskey_module模块,但是需要相应的配置,网上相关资料很多,不赘述。

         优点:控制的逻辑严密,非常可靠地解决方案。

        ■ 缺点:需要做较多的修改。

  b. 方法二:直接增加Refer的判断,对于不符合设定的请求予以禁止。这里有个地方需要注意,后端有Tomcat,所以还要加上proxy pass的相关配置。

        # 防止图片盗链,只判断refer是否为本站
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
            valid_referers none blocked    *.taoximao.com taoximao.com;
            if ($invalid_referer) {
                return 403;
            }
            # 要加上后端访问的地址
            proxy_redirect     off;
            proxy_pass         http://web_server;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        ■ 优点:配置相当简单,也不用安装其他模块。

        ■ 缺点:无法防止别人伪造Refer信息,也就是说人家真的想去偷窃,稍微麻烦点还是阻止不了;另外还发现如果refer为空还是能正常访问到,控制放的很宽。


2. Tomcat禁止直接访问的配置

(注:如果Tomcat还能直接访问,其实Nginx的那个防盗链就没意义了,加个端口就跳过配置了)

  a. 方法一:在Linux下配置iptables,将8080的端口禁止外网访问即可,这样就只能通过Nginx来访问。网上很多资料,不赘述。

        ■ 优点:直接系统级别配置,与应用本身无关,高度可靠。

        ■ 缺点:额外配置,配置起来也有点麻烦。

  b. 方法二:直接配置Tomcat允许的访问IP,精确到每个Host。只要修改tomcat下的conf/server.xml文件,在Host之间加上允许的访问IP即可,直接访问会返回403错误。

      <Host name="test1.taoximao.com"  appBase="webapps_test1"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
        <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1" deny=""/>
      </Host>

        ■ 优点:配置简单,实现的效果也能满足需要。

        ■ 缺点:有时候会出现图片不显示。