您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
Nginx反向代理、负载均衡、缓存、URL重写及读写分离
发布时间:2019-07-07 17:18:15编辑:雪饮阅读()
反向代理实例:
location /apache/{
proxy_pass http://192.168.2.227/;
}
该location定义了当访问/apache/的时候就会将192.168.2.227的内容返回给客户,也就是说该location为192.168.2.227提供了反向代理服务,那么该location所在服务器也可以说是192.168.2.227的反向代理服务器。
上游服务器组与反向代理实现应用层负载均衡
upstream websrvs {
server 192.168.2.216 weight=1;
server 192.168.2.227 weight=1;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://websrvs/;
}
上游服务器组的备用节点
upstream websrvs {
server 192.168.2.216 weight=1 max_fails=2 fail_timeout=2;
server 192.168.2.227 weight=1 max_fails=2 fail_timeout=2;
server 127.0.0.1:8080 backup;
}
nginx缓存的应用
定义缓存
proxy_cache_path /nginx/cache/first levels=1:2 keys_zone=first:20m max_size=1g;
注意:
(1)levels中的1表示first目录中第一层子文件夹的文件夹名长度,2表示第二层文件的文件夹名的长度,如果要定义更多层,则以此类推。
(2)自定义文件夹/nginx/cache/first需要自己创建
使用缓存
add_header X-Cache $upstream_cache_status;
location / {
root html;
index index.html index.htm;
proxy_pass http://websrvs/;
proxy_cache first;
proxy_cache_valid 200 10m;
}
注意:
(1) X-Cache变量在header中添加后用于在请求中查看缓存对象是否命中,命中则表示从缓存中读取,否则就是源数据
(2)缓存清除则直接删除自定义缓存/nginx/cache/firs文件夹下的文件即可
测试
当缓存有效时
清理缓存后
url重定向
定义
location / {
root html;
index index.html index.htm;
rewrite ^/bbs/(.*)$ http://192.168.2.216/bbs/$1;
#proxy_pass http://websrvs/;
#proxy_cache first;
#proxy_cache_valid 200 10m;
}
本实例将该项目下bbs中的任何文件都重定向到了http://192.168.2.216/bbs下的对应文件
$1表示匹配前面正则的模。
测试
这里访问的url是192.168.2.155/bbs/cs.html结果浏览器很快就跳转到192.168.2.216/bbs/cs.html了,但在network中的all中可以看到多个请求,其中第一个请求中可以分析到该链接是重定向了的。
nginx文件上传读写分离前奏曲-配置httpd的put文件上传
在rpm形式的httpd默认安装下Dav功能模块是默认被载入的
那么在默认配置文件中的'<Directory "/var/www/html">'配置中添加一项' Dav on'
即可开启Dav功能。
接下来设置默认的目录对于我们要做的put文件上传及后续的读写分离的权限
setfacl -m u:apache:rwx /var/www/html/
然后另外找一个linux做为客户端测试put方法的文件上传
[root@localhost sbin]# curl -T /usr/local/src/mysql-5.6.10-linux-glibc2.5-i686.tar.gz http:/ /192.168.2.216
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>201 Created</title>
</head><body>
<h1>Created</h1>
<p>Resource /mysql-5.6.10-linux-glibc2.5-i686.tar.gz has been created.</p>
<hr />
<address>Apache/2.2.15 (Red Hat) Server at 192.168.2.216 Port 80</address>
</body></html>
注意:网页中的表单仅支持get、post不支持put。
上传成功后就可以在默认的/var/www/html/中能够看到了。
nginx文件上传的读写分离
配置
location / {
root html;
index index.html index.htm;
proxy_pass http://192.168.2.227/;
if ($request_method = "PUT"){
proxy_pass http://192.168.2.216;
}
#rewrite ^/bbs/(.*)$ http://192.168.2.216/bbs/$1;
#proxy_pass http://websrvs/;
#proxy_cache first;
#proxy_cache_valid 200 10m;
}
测试
向nginx以put方法进行上传文件
[root@localhost ~]# curl -T /etc/fstab http://192.168.2.155
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>201 Created</title>
</head><body>
<h1>Created</h1>
<p>Resource /fstab has been created.</p>
<hr />
<address>Apache/2.2.15 (Red Hat) Server at 192.168.2.216 Port 80</address>
</body></html>
从nginx以get方法取文件
[root@localhost ~]# curl http://192.168.2.155/fstab
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /fstab was not found on this server.</p>
</body></html>
在从服务器上对应默认站点目录提供要取的文件后再次测试从nginx以get方法取文件
[root@localhost ~]# curl http://192.168.2.155/fstab
#
# /etc/fstab
# Created by anaconda on Sat Jun 22 10:16:46 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=37cc8d9b-5c0b-4def-bd86-63da5f031071 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
总结
同一个ip上传能成功,而取的时候却失败,当从服务器中默认站点中对应要取的文件准备好之后又能取了,所以目前来说读写分离是成功了,但是这样还是美中不足,要配合rsync进行同步就更好了。
关键字词:nginx,反向代理,负载均衡,缓存,url重写,读写分离