盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
为了模拟盗链,在这里让101为服务站点,102为网关服务器,103访问102进行盗链。
101的nginx.cfg
- worker_processes 1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个
-
- events {
- #单个进程最大连接数(最大连接数=连接数*进程数)
- #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
- worker_connections 1024;
- }
-
-
- http {
- #文件扩展名与文件类型映射表(是conf目录下的一个文件)
- include mime.types;
- #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
- default_type application/octet-stream;
-
- #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
- sendfile on;
-
- #长连接超时时间,单位是秒
- keepalive_timeout 65;
-
- #定义一组服务器
- upstream httpds{
- server 192.168.8.102 weight=10;
- server 192.168.8.103 weight=1;
- }
-
- #虚拟主机的配置
- server {
- #监听端口
- listen 80;
- #域名,可以有多个,用空格隔开
- server_name test80.xzj520520.cn;
-
- #配置根目录以及默认页面
- location / {
- proxy_pass http://httpds;
- # root /www/test80;
- # index index.html index.htm;
- }
-
- #出错页面配置
- error_page 500 502 503 504 /50x.html;
- #/50x.html文件所在位置
- location = /50x.html {
- root html;
- }
-
- }
-
-
- }
-
102的nginx.cfg
- worker_processes 1;
-
-
-
- events {
- worker_connections 1024;
- }
-
-
- http {
- include mime.types;
- default_type application/octet-stream;
-
- sendfile on;
-
- keepalive_timeout 65;
-
-
- server {
- listen 80;
- server_name localhost;
-
-
- location / {
- proxy_pass http://192.168.8.101:8080;
- }
-
-
- location ^~/images/ {
- root /www/resources;
- }
-
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
-
- }
-
-
103的nginx.cfg
- worker_processes 1;
-
-
-
- events {
- worker_connections 1024;
- }
-
-
- http {
- include mime.types;
- default_type application/octet-stream;
-
- sendfile on;
- keepalive_timeout 65;
-
-
- server {
- listen 80;
- server_name localhost;
-
- location / {
- proxy_pass http://192.168.8.102;
- }
-
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
-
- }
-
- }
-
访问http://192.168.8.103/:
如果不想被盗链,可以对网关服务器102做如下配置:
nginx.cfg
- worker_processes 1;
-
-
-
- events {
- worker_connections 1024;
- }
-
-
- http {
- include mime.types;
- default_type application/octet-stream;
-
-
- sendfile on;
-
- keepalive_timeout 65;
-
-
- server {
- listen 80;
- server_name localhost;
-
-
- location / {
- proxy_pass http://192.168.8.101:8080;
- }
-
-
-
- location ^~/images/ {
- valid_referers 192.168.8.102; #valid_referers 指令,配置是否允许 referer 头部以及允许哪些 referer 访问。192.168.8.102不是ip而是域名(去掉http:// 前缀)
- if ($invalid_referer) { # 注意这里if后要加空格
- return 403; ## 返回错误码
- }
-
- root /www/resources;
- }
-
-
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
-
- }
-
-
- }
-
-
测试,访问http://192.168.8.103/:
可以同时携带多个参数,表示多个 referer 头部都生效。
参数值
invalid_referer 变量
例
- server {
- server_name referer.test.com;
- listen 80;
-
- error_log logs/myerror.log debug;
- root html;
- location / {
- valid_referers none server_names
- *.test.com www.test.org.cn/nginx/;
- if ($invalid_referer) {
- return 403; # 返回错误码
- }
- return 200 'valid\n';
- }
- }
-
- # none:表示没有 referer 的可以访问
- # server_names:表示本机 server_name 也就是 referer.test.com 可以访问
- # *.test.com:匹配上了正则的可以访问
- # www.test.org.cn/nginx/:该页面发起的请求可以访问
-
设置为none的情况:
从baidu访问过来的请求:
如果添加了baidu.com,发现访问成功:
在102nginx的html目录中添加403.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>Error</title>
- <style>
- html { color-scheme: light dark; }
- body { width: 35em; margin: 0 auto;
- font-family: Tahoma, Verdana, Arial, sans-serif; }
- </style>
- </head>
- <body>
- <h1>An error occurred.</h1>
- <p>非法请求.</p>
-
- </body>
- </html>
-
-
修改nginx.conf
代码如下:
- worker_processes 1;
-
-
-
- events {
- worker_connections 1024;
- }
-
-
- http {
- include mime.types;
- default_type application/octet-stream;
-
-
-
- sendfile on;
-
- keepalive_timeout 65;
-
-
-
- server {
- listen 80;
- server_name localhost;
-
- location / {
- proxy_pass http://192.168.8.101:8080;
- }
-
-
- location ^~/images/ {
- valid_referers 192.168.8.102 baidu.com;
- if ($invalid_referer) {
- return 403; # 返回错误码
- }
-
- root /www/resources;
- }
-
-
- error_page 403 /403.html;
- location = /403.html {
- root html;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
-
-
- }
-
- }
-
-
访问http://192.168.8.103/images/bg.jpg
修改网关服务器102
将403.png保存到/www/resources/images中
访问192.168.8.103: