菜鸟学Linux 第097篇笔记 nginx配置文件
内容总览
nginx反向代理
nginx负载均衡
nginx缓存 proxy_cache_path
location里的一些模块
webDAV模块
nginx读写分离(使其指向不同的服务器上)
nginx反向代理
是一个类似于访问某网站的子目录,它可以指引到其它服务器以使该网站实现将一台服务器无法
满足用户的请求时,使其中一部分的用户请求指到其它服务器节点上
proxy_pass
定义访问http://192.168.11.141/forum 将其定位到后台服务器http://192.168.11.142/bbs
并转发时附带原客户端IP 使后端server可记录客户端IP httpd.conf logformat %{X-Real-IP}i
location /forum {
proxy_pass http://192.168.11.142/bbs;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* /forum {
proxy_pass http://192.168.11.142;
proxy_set_header X-Real-IP $remote_addr;
}
此为匹配到http://192.168.11.142/forum 切记proxy_pass后边不可带目录
nginx负载均衡
可以实现将网站某页面定义至后端多台服务器上 upstream
(注意要定义在http里server外)
upstream webserver {
ip_hash;
server 192.168.11.142 weight=1 max_fails=2 fail_timeout=2;
server 192.168.11.143 weight=1 max_fails=2 fail_timeout=2;
# server 127.0.0.1:8080 backup;
}
此为定义负载均衡要指向的server和后端的server健康状态检查
ip_hash 此项定义当用户初次访问该网站所指向的后端server
下次再访问依然定义到原先所指向的server(破坏了负载均衡,但保留了会话)、
server 指定的后端web服务器
weight 权重
max_fails 当后端web服务器健康状态检测失败两次时,即该服务器失联,并不再指向此服务器
fail_timeout 指定健康状态检测超时时长,即发送一次健康检查,多少秒未收到即为超时
backup 当所有后端web服务器失效时,所指引的server,但是和ip_hash有冲突(不清楚为何)
上边的upstream只是定义负载均衡的后端web服务器,在真正的webserver还需要指引什么时候使用此负载均衡,如在
location / {
proxy_pass http://webserver; (指定的名字便为upstream所指定的名字)
proxy_set_header X-Real-IP $remote_addr;
}
定义好后便可当用户访问此服务器时指定到后台的两个webserver
upstream ups-name {} 定义负载均衡服务器,这里列出几个定义到后端的负载均衡的例子
以.php结尾的文件指向以phpserver所命名的upstream后端负载均衡
location ~* \.php$ { fastcgi_pass http://phpserver; ...}
访问图片时指向以pictureserver所命令的upstream后端负载均衡
location ~* "\.(jpg|jpeg|gif|png)$" { proxy_pass http://pictureserver; ...}
还可以再定义一个静态的服务器,这里不作详细解释,和上边区别不大呵呵。
nginx缓存 proxy_cache_path
用于将后端的web服务器所发送过来的数据缓存到本地nginx当下次用户再访问此路径或文件时
nginx可以直接提供给用户而不需要再向后端服务请求数据,nginx缓存分为3级子目录1:2:1
其含义是一级目录包含一个字符,二级目录包含2个字符,三级目录包含一个字符,
keys_zone定义其缓存名字和缓存大小, max_size定义最大缓存空间
在nginx.conf定义缓存功能
proxy_cache_path /nginx/cache/first levels=1:2 keys_zone=first:20m max_size=1g;
(注意此项只是定义nginx具有缓存功能,还得在具体的server下启用缓存才可以)
add_header X-Via "$upstream_cache_status from $server_addr";
(此项可查看缓存是否命中)
在server中启用缓存
location / {
proxy_pass http://webserver/; (指定的名字便为upstream所指定的名字)
proxy_set_header X-Real-IP $remote_addr;
proxy_cache first; 此条便为引用上边所定义缓存,keys_zone后边的名字
proxy_cache_valid 200 10m; 此条定义200状态的缓存保存时间
}
常用的三种nginx缓存
open_log_cache 打开日志的缓存
open_file_cache 打开文件缓存
fastcgi_cache
压缩请求的文件(节约带宽,当开的带宽小的时候可以使用)
gzip on;
location里的一些模块
rewrite: URL重写模块
if (condition) {}
此模块一般用在location 当中,用来做URL重写的
break 在if中使用
return 直接返回某代码
referer可以防止其它网站盗链接此网站
rewrite示例 rewrite支持正则表达式
location / {
root /web;
index index.html index.htm;
rewrite "^/forum/(.*)$" /bbs/$1 last;
}
含义当用户访问http://192.168.11.141/forum/ 就会被定位到http://192.168.11.141/bbs/
last含义是本次URL重写完成后,再重启下一轮检查,即重新访问以/bbs/的目录
但last有一个问题就是如下所定义的URL重写
rewrite "^/bbs/(.*)/p_w_picpaths/(.*).jpg$" /bbs/$2/p_w_picpaths/$1.jpg last;
此条所定义的url重写会循环,为何循环就看各位的眼力了哈哈,由此而产生了另一个选项
break 即当URL第一次重写时直接匹配,而不进行再次重新一轮检查
rewrite "^/bbs/(.*)/p_w_picpaths/(.*).jpg$" /bbs/$2/p_w_picpaths/$1.jpg break;
webDAV模块
此模块可以使网站支持put等request_method
使nginx读写分离(使其指向不同的服务器上)
location / {
proxy_pass http://webserver;
index index.html index.htm;
rewrite ^/forum/(.*)$ /bbs/$1;
if ($request_method = "PUT") {
proxy_pass http://192.168.11.143;
}
}
当用户的请求方式为PUT时,则会直接指向后端某台服务器,即此方式即可实现将用户的请求,读
写分离,即当后端服务器使用rsync + inotify方式实现的文件同步时,将用户的写操作全部指到
rsync的主服务器上,此时便可实现让rsync来将用户的写数据同步到其它节点中