Nginx动静分离以及防盗链问题

目录

1.动静分离

1.1概念

 1.2准备环境

1.3.测试访问

2.Nginx防盗链问题

2.1nginx 防止网站资源被盗用模块

2.2防盗链配置

2.3准备两台机器

2.4测试

①开启防盗链

②让盗链ip可一访问服务资源

 ③防盗链不设置none参数


1.动静分离

1.1概念

        为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的tomcat的时候比较明显,因为tomcat解析静态很慢,其实这些原理的话都很好理解,简单来说,就是使用正则表达式匹配过滤,然后交个不同的服务器。

Nginx动静分离以及防盗链问题_第1张图片

 1.2准备环境

  • 准备一个nginx代理 两个http 分别处理动态和静态。

代理机192.168.134.157

[root@testhost ~]# vim /etc/nginx/conf.d/default.conf 
upstream static {
        server 192.168.134.160:80;
}
upstream php {
        server 192.168.134.156:80;
}

server{
        listen 80;
        server_name  localhost;
        location ~ .*\.(html|gif|jpg|png|bmp|swf|css|js)$ {
            proxy_pass http://static;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }
        location ~ \.(php|jsp)$ {
            proxy_pass http://php;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }

  • 静态资源配置在192.168.134.160上。
[root@testhost02 ~]# vim /etc/nginx/conf.d/default.conf
server {
        listen 80;
        server_name     localhost;

        location ~ \.(html|jpg|png|js|css|gif|bmp|jpeg) {
        root  /usr/share/nginx/html;
        }
}
  • 动态资源不是在有PHP服务的192.168.134.156上。
[root@testhost ~]# vim /etc/nginx/conf.d/default.conf
server {
        listen      80;
        server_name     localhost;
        location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
                        }
        }

1.3.测试访问

当访问静态页面的时候location 匹配到 (html|jpg|png|js|css|gif|bmp|jpeg) 通过转发到静态服务器,静态服务通过location的正则匹配来处理请求。

当访问动态页面时location匹配到 .php 结尾的文件转发到后端php服务处理请求。

Nginx动静分离以及防盗链问题_第2张图片


2.Nginx防盗链问题

2.1nginx 防止网站资源被盗用模块

ngx_http_referer_module

如何区分哪些是不正常的用户?

HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况.

比如在www.google.com 里有一个`www.baidu.com` 链接,那么点击这个`www.baidu.com` ,它的`header` 信息里就有:Referer=http://www.google.com.

2.2防盗链配置

要点!!!

[root@nginx-server ~]# vim /etc/nginx/nginx.conf
# 日志格式添加"$http_referer"
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
# valid_referers 使用方式                         
Syntax: 	valid_referers none | blocked | server_names | string ...;
Default: 	—
Context: server, location
  • ###!!!###

  • none : 允许没有http_referer的请求访问资源;

  • blocked : 允许不是http://开头的,不带协议的请求访问资源;

  • server_names : 只允许指定ip/域名来的请求访问资源(白名单)

2.3准备两台机器

  • 一台机器做服务,另一台机器做盗链。

服务机:192.168.134.160

[root@testhost02 ~]# vim /etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  localhost;

    location / {
         root   /usr/share/nginx/html;
         index  index.html 111.jpg;

         valid_referers none blocked  baidu.com;
                if ($invalid_referer) {
                   return 502;
                }
        }
}
                                                                                                                        
  • 做盗链的机器:192.168.134.156
[root@testhost html]# vim /etc/nginx/conf.d/default.conf 
server {
        listen      80;
        server_name     localhost;
        location / {
            root           /usr/share/nginx/html;
                index index.html;
                        }
        }

[root@testhost html]# vim /usr/share/nginx/html/index.html  


    
    qf.com


    


     

2.4测试

①开启防盗链

因为我们在服务器上配置了防盗链所以访问做了盗链的ip图片加载不出来,并且状态码也是我们设定的502。

Nginx动静分离以及防盗链问题_第3张图片

②让盗链ip可一访问服务资源

 如果在服务器上将做了盗链的机器ip写入白名单(server_names),这样就可以访问到了,状态码为200

Nginx动静分离以及防盗链问题_第4张图片

Nginx动静分离以及防盗链问题_第5张图片

 ③防盗链不设置none参数

如果在服务器上设置有防盗链但不设置none参数,也就是Referer为空,那么直接访问服务器上资源(192.168.134.160/111.jpg)则访问不到。

Nginx动静分离以及防盗链问题_第6张图片

Nginx动静分离以及防盗链问题_第7张图片

你可能感兴趣的:(1024程序员节)