rewrite和location都能实现地址跳转,但是两者还是有区别的,rewrite是在同一域名内改变资源路径,而location是对一类路径做访问控制,他们的执行顺序是server中rewrite->location-> location中rewrite。
rewrite重复执行超过10次还找不到资源就会返回500错误代码。
rewrite指令的格式:rewrite <regex> <替换后的URL> [flag]
重定向的标志位flag
last 表示完成rewrite,一般用在server和if中,浏览器地址栏的URL不变
break 通常使用在locating中,表示后续的rewrite不再执行,浏览器地址栏的URL不变
redirect 返回302临时重定向,浏览器地址栏显示跳转后的地址
permanent 返回301永久重定向,浏览器地址栏显示跳转后的地址
例子:
以上边LNMP搭建的博客为例,在浏览器中的域名后边随便输入一个字符串表示一个不存在的目录或者文件,然后浏览器默认会返回404的错误页面。
现在使用yum安装nginx时其默认提供的404错误页面,而不是使用浏览器提供的404错误页面。
cp /usr/share/nginx/html/404.html /data/web/
server {
listen 80;
server_name wordpress.linux.com;
...
if (!-e $request_filename) {
rewrite ^(.*)$ /404.html break;
}
...
}
如果访问的文件或者目录不存在,则重定向到404.html页面
server {
listen 80;
server_name wordpress.linux.com;
...
if ($http_user_agent ~ "Firefox") {
rewrite ^(.*)$ redirect;
...
}
域名跳转
现在使用火狐浏览器访问,结果成功的跳转到百度的首页。
然后使用360浏览器,结果域名没有跳转。
7.Nginx的负载均衡功能
Nginx拥有基于7层交换的负载均衡功能,对于后端10台左右的web服务器的情况,Nginx的负载均衡性能最佳。因此Nginx适用于小型网站的负载均衡。Nginx通过upstream命令实现负载均衡功能。Nginx的负载均衡模块支持的常用负载均衡算法如下,
轮询 Nginx默认调度算法,按请求时间将请求逐一分配到后端服务器
加权轮询 指定后端服务器的权值,权值越大,请求被分配的概率越大, 轮询是权值都为1的加权轮询
ip_hash 根据客户端IP的哈希结果分配请求,这样同一客户端的请求就可以分配到固定的后端服务器,可以解决session共享的问题
fair 根据后端服务器的响应时间分配请求,响应时间短的优先分配。
url_hash 根据访问的URL的哈希结果分配请求,这样同一URL的请求就可以分配到固定的后端服务器。
Nginx的负载均衡调度算法中,轮询、加权轮询、ip_hash是Nginx自身提供的,而fair、url_hash分别由第三方模块upstream_fair模块和hash软件包提供。
Nginx负载均衡功能的配置格式: