目录
1.动静分离
1.1概念
1.2准备环境
1.3.测试访问
2.Nginx防盗链问题
2.1nginx 防止网站资源被盗用模块
2.2防盗链配置
2.3准备两台机器
2.4测试
①开启防盗链
②让盗链ip可一访问服务资源
③防盗链不设置none参数
1.动静分离
1.1概念
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的tomcat的时候比较明显,因为tomcat解析静态很慢,其实这些原理的话都很好理解,简单来说,就是使用正则表达式匹配过滤,然后交个不同的服务器。
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服务处理请求。
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
<html>
<head>
<meta charset="utf-8">
<title>qf.com</title>
</head>
<body style="background-color:white;">
<img src="http://192.168.134.160/111.jpg"/>
</body>
</html>
2.4测试
①开启防盗链
因为我们在服务器上配置了防盗链所以访问做了盗链的ip图片加载不出来,并且状态码也是我们设定的502。
②让盗链ip可一访问服务资源
如果在服务器上将做了盗链的机器ip写入白名单(server_names),这样就可以访问到了,状态码为200。
③防盗链不设置none参数
如果在服务器上设置有防盗链但不设置none参数,也就是Referer为空,那么直接访问服务器上资源(192.168.134.160/111.jpg)则访问不到。