语法:
rewrite <regex> <replacement> [flag]关键字 || 正则 || 替代内容 || flag标记
Rewrite规则的flag标记紧张有以下几种:
last :相称于Apache里的(L)标记,表示完成rewrite;break:本条规则匹配完成后,终止匹配,不再匹配后面的规则redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last和break用来实现URL重写,浏览器地址栏URL地址不变
2. Nginx rewrite例子a) 例如用户访问www.dbspread.com,想直接跳转到网站下面的某个页面,www.dbspread.com/new.index.html如何来实现呢?我们可以利用Nginx Rewrite 来实现这个需求,详细如下:在server中加入如下语句即可:
server{listen80;#监听80端口server_namewww.dbspread.com;#域名#rewrite规则indexindex.jspindex.htmlindex.htm;root/usr/local/nginx/html;#定义做事器的默认网站根目录位置#监听完成往后通过斜杆(/)拦截要求转发到后真个tomcat做事器location/{#如果后真个做事器返回502、504、实行超时等缺点,自动将要求转发到upstream负载均衡池中的另一台做事器,实现故障转移。proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;proxy_set_headerHost$host;#获取客户真个主机名存到变量Host里面,从而让tomcat取到客户端机器的信息proxy_set_headerX-Real-IP$remote_addr;#获取客户真个主机名存到变量X-Real-IP里面,从而让tomcat取到客户端机器的信息proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;rewrite^/$http://www.dbspread.com/new.index.htmlpermanent;proxy_passhttp://web1;#跳转到对应的运用web1}}
效果图如下:
rewrite^/$http://www.dbspread.com/new.index.htmlpermanent;
对应如下语法:
rewrite <regex> <replacement> [flag];关键字 || 正则 || 替代内容 || flag标记
正则表达式解释:
代表前面0或更多个字符+代表前面1或更多个字符?代表前面0或1个字符^代表字符串的开始位置$代表字符串结束的位置。为通配符,代表任何字符
b)例如多个域名跳转到同一个域名,nginx rewrite规则写法如下:
server{listen80;#监听80端口server_namewww.dbspread.com;#域名#rewrite规则indexindex.jspindex.htmlindex.htm;root/usr/local/nginx/html;#定义做事器的默认网站根目录位置if($host!='www.dbspread.com'){rewrite^/(.)$http://www.dbspread.com/$1permanent;}}
格式:
rewrite <regex> <replacement> [flag];关键字 || 正则 || 替代内容 || flag标记
解释:
rewrite为固定关键字,表示开始进行rewrite匹配规则、regex部分是 ^/(.) ,这是一个正则表达式,匹配完全的域名和后面的路径地址replacement部分是http://www.dbspread.com/$1,$1是取自regex部分( )里的内容。匹配成功后跳转到的URL。flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.dbspread.com/$1 地址上二、Nginx 防盗链1. 什么是防盗链比如http://www.dbspread.com/download/av123.rmvb 这个视频下载地址被其他网站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盗链,我们要禁止这种引用就叫做防盗链
2. 怎么实现防盗链在nginx的nginx.conf的server里面配置如下代码
server{listen80;server_namewww.dbspread.com.dbspread.com;location~\.(rmvb|jpg|png|swf|flv)${#rmvb|jpg|png|swf|flv表示对rmvb|jpg|png|swf|flv后缀的文件实施防盗链valid_referersnoneblockedwww.dbspread.com;#表示对www.dbspread.com此域名开通白名单,比如在www.test.com的index.html引用download/av123.rmvb,无效roothtml/b;if($invalid_referer){#如果要求不是从www.dbspread.com白名单发出来的要求,直接重定向到403.html这个页面或者返回403#rewrite^/http://www.dbspread.com/403.html;return403;}}}
三、Nginx 动静分离1. 动静分离是什么
Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和常常变的资源区分开来,动静资源做好了拆分往后,我们就可以根据静态资源的特点将其做缓存操作,这便是网站静态化处理的核心思路。
2. 动静分离事理图3. Nginx动静分离该当把稳的地方WEB项目开拓时要把稳,将静态资源只管即便放在一个static文件夹将static静态资源文件夹放到Nginx可以取到的位置页面要建立全局变量路径,方便修正途径修正nginx.conf的location, 匹配静态资源要求4. Nginx动静分离步骤4.1 准备一个静态资源button.css
body{margin:10px20px;text-align:center;font-family:Arial,sans-serif;background-color:red;}
4.2 在/var/local下新建一个static文件夹用来存放静态资源button.css
4.3 在tomcat-8080/webapps/ROOT下的index.html里面引入button.css
<html><head><linkrel="stylesheet"type="text/css"href="http://www.static.com/button.css"/><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="renderer"content="webkit"><metaname="viewport"content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>test</title></head><body>欢迎来到8080端口tomcat</body></html>
4.4 在nginx的nginx.conf中server节点新增静态资源分离的配置
对付Nginx根本配置,推举之前的:后端实践:Nginx日志配置(超详细)
server{listen80;#监听80端口server_namewww.dbspread.com;#域名#rewrite规则indexindex.jspindex.htmlindex.htm;root/usr/local/nginx/html;#定义做事器的默认网站根目录位置#重定向if($host!='www.dbspread.com'){rewrite^/(.)$http://www.dbspread.com/$1permanent;}#防盗链location~\.(rmvb|jpg|png|swf|flv)${#rmvb|jpg|png|swf|flv表示对rmvb|jpg|png|swf|flv后缀的文件实施防盗链valid_referersnoneblockedwww.dbspread.com;#表示对www.dbspread.com此域名开通白名单,比如在www.test.com的index.html引用download/av123.rmvb,无效roothtml/b;if($invalid_referer){#如果要求不是从www.dbspread.com白名单发出来的要求,直接重定向到403.html这个页面或者返回403#rewrite^/http://www.dbspread.com/403.html;return403;}}#监听完成往后通过斜杆(/)拦截要求转发到后真个tomcat做事器location/{#如果后真个做事器返回502、504、实行超时等缺点,自动将要求转发到upstream负载均衡池中的另一台做事器,实现故障转移。proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;proxy_set_headerHost$host;#获取客户真个主机名存到变量Host里面,从而让tomcat取到客户端机器的信息proxy_set_headerX-Real-IP$remote_addr;#获取客户真个主机名存到变量X-Real-IP里面,从而让tomcat取到客户端机器的信息proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#rewrite^/$http://www.dbspread.com/new.index.htmlpermanent;#用户访问www.dbspread.com,想直接跳转到网站下面的某个页面:www.dbspread.com/new.index.htmlproxy_passhttp://web1;#跳转到对应的运用web1}#location~.\.(php|jsp|cgi|shtml)?$#动态分离~匹配以.结尾(以PHPJSP结尾走这段)#{#proxy_set_headerHost$host;#proxy_set_headerX-Real-IP$remote_addr;#proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#proxy_passhttp://jvm_web2;#}#静态分离~匹配以.结尾(以html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css结尾走这段),当然不是越久越好,如果有10000个用户在线,都保存几个月,系统托跨location~.\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)${root/var/local/static;#静态资源存放在nginx的安装机器上#proxy_passhttp://www.static.com;#静态资源也可存放在远程做事器上expires30d;#30天之内只要访问过一次就从缓存拿}#日志级别有[debug|info|notice|warn|error|crit]error_log级别分为debug,info,notice,warn,error,crit默认为crit,生产环境用error#crit记录的日志最少,而debug记录的日志最多access_log/usr/local/logs/web2/access.logmain;error_log/usr/local/logs/web2/error.logcrit;}
4.5 访问页面查看效果
四、Nginx+keepalived 实现高可用1. keepalived是什么
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个做事节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。
因此,Keepalived除了能够管理LVS软件外,还可以作为其他做事(例如:Nginx、Haproxy、MySQL等)的高可用办理方案软件。
2. keepalived紧张功能管理LVS负载均衡软件实现LVS集群节点的康健检讨作为系统网络做事的高可用性(failover)3. keepalived故障转移Keepalived高可用做事之间的故障切换转移,是通过 VRRP 来实现的。
在 Keepalived做事正常事情时,主 Master节点会不断地向备节点发送(多播的办法)心跳,用以见告备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳,备节点也便是以无法连续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及做事。
而当主 Master节点规复时,备Backup节点又会开释主节点故障时自身接管的IP资源及做事,规复到原来的备用角色。扩展一下,之前的实践类文章:搭建Redis集群和MySQL主从同步
解释:keepalived的主从切换和redis的主从切换是不一样的,keepalived的主节点挂了往后,从节点变为主节点,之前的主节点规复往后连续做主节点。redis的主节点挂了往后,重新规复往后变为从节点
4. keepalived高可用架构示意图解释:
虚拟ip(VIP):192.168.152.200,对外供应做事的ip,也可称作浮动ip192.168.152.130:nginx + keepalived master 主192.168.152.129:nginx + keepalived backup 从192.168.152.129:tomcat-8080192.168.152.129:tomcat-80815. keepalived安装环境准备:
centos6、jdk
虚拟ip(VIP):192.168.152.200,对外供应做事的ip,也可称作浮动ip192.168.152.130:nginx + keepalived master 主192.168.152.129:nginx + keepalived backup 从192.168.152.129:tomcat-8080192.168.152.129:tomcat-80815.1 安装keepalived的步骤:
注:192.168.152.129(keepalived从节点) 与 192.168.152.130(keepalived主节点)先安装好nginx + keepalived
下载压缩包:
wgetwww.keepalived.org/software/keepalived-1.3.5.tar.gz
解压缩:
tar-zxvfkeepalived-1.3.5.tar.gz
进入解压缩往后的文件目录:
cdkeepalived-1.3.5
编译安装:
./configure--prefix=/usr/local/keepalived
系统提示警告 WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS. yum -y install libnl libnl-devel
再次实行
./configure--prefix=/usr/local/keepalived
系统提示缺点 configure: error: libnfnetlink headers missing yum install -y libnfnetlink-devel
再次实行
./configure--prefix=/usr/local/keepalivedmake&&makeinstall
到此keepalived安装完成,但是接下来还有最关键的一步,如果这一步没有做后面启动keepalived的时候会报找不到配置文件的缺点
Configurationfile'/etc/keepalived/keepalived.conf'isnotaregularnon-executablefile
安装完成后,进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf配置文件
mkdir/etc/keepalivedcp/usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived
5.2 修正keepalived主节点192.168.152.130的/etc/keepalived/keepalived.conf配置文件
#全局配置global_defs{notification_email{leeSmall@qq.com#设置报警邮件地址,可以设置多个,每行一个。须要开启sendmail做事。}notification_email_fromsns-lvs@gmail.comsmtp_serversmtp.hysec.com#设置SMTPServer地址smtp_connection_timeout30#设置SMTPServer的超时时间router_idnginx_master#表示运行Keepalived做事器的一个标识,唯一的}#检测脚本vrrp_scriptchk_http_port{script"/usr/local/src/check_nginx_pid.sh"#心跳实行的脚本,检测nginx是否启动interval2#(检测脚本实行的间隔,单位是秒)weight2#权重}#vrrp实例定义部分vrrp_instanceVI_1{stateMASTER#指定keepalived的角色,MASTER为主,BACKUP为备interfaceeth0#当提高行vrrp通讯的网络接口卡(当前centos的网卡)用ifconfig查看你详细的网卡virtual_router_id66#虚拟路由编号,主从要一贯priority100#优先级,数值越大,获取处理要求的优先级越高advert_int1#检讨间隔,默认为1s(vrrp组播周期秒数)#授权访问authentication{auth_typePASS#设置验证类型和密码,MASTER和BACKUP必须利用相同的密码才能正常通信auth_pass1111}track_script{chk_http_port#(调用检测脚本)}virtual_ipaddress{192.168.152.200#定义虚拟ip(VIP),可多设,每行一个}}
5.3 修正keepalived从节点192.168.152.129的/etc/keepalived/keepalived.conf配置文件
#全局配置global_defs{notification_email{leeSmall@qq.com#设置报警邮件地址,可以设置多个,每行一个。须要开启sendmail做事。}notification_email_fromsns-lvs@gmail.comsmtp_serversmtp.hysec.com#设置SMTPServer地址smtp_connection_timeout30#设置SMTPServer的超时时间router_idnginx_backup#设置nginxbackup的id,在一个网络该当是唯一的}#检测脚本vrrp_scriptchk_http_port{script"/usr/local/src/check_nginx_pid.sh"#心跳实行的脚本,检测nginx是否启动interval2#(检测脚本实行的间隔)weight2#权重}#vrrp实例定义部分vrrp_instanceVI_1{stateBACKUP#指定keepalived的角色,MASTER为主,BACKUP为备interfaceeth0#当提高行vrrp通讯的网络接口卡(当前centos的网卡)用ifconfig查看你详细的网卡virtual_router_id66#虚拟路由编号,主从要一贯priority99#优先级,数值越大,获取处理要求的优先级越高advert_int1#检讨间隔,默认为1s(vrrp组播周期秒数)#授权访问authentication{auth_typePASS#设置验证类型和密码,MASTER和BACKUP必须利用相同的密码才能正常通信auth_pass1111}track_script{chk_http_port#(调用检测脚本)}virtual_ipaddress{192.168.152.200#定义虚拟ip(VIP),可多设,每行一个}}
5.4 检讨nginx是否启动的shell脚本
/usr/local/src/check_nginx_pid.sh
#!/bin/bash#检测nginx是否启动了A=`ps-Cnginx--no-header|wc-l`if[$A-eq0];then#如果nginx没有启动就启动nginx/usr/local/nginx/sbin/nginx#重启nginxif[`ps-Cnginx--no-header|wc-l`-eq0];then#nginx重启失落败,则停掉keepalived做事,进行VIP转移killallkeepalivedfifi
5.5 192.168.152.130(keepalived主节点)和 192.168.152.129(keepalived从节点)的nginx的配置文件nginx.conf
userrootroot;#利用什么用户启动NGINX在运行时利用哪个用户哪个组worker_processes4;#启动进程数,一样平常是1或8个,根据你的电脑CPU数,一样平常8个worker_cpu_affinity00000001000000100000010000001000;#CPU逻辑数——把每个进程分别绑在CPU上面,为每个进程分配一个CPU#pid/usr/local/nginx/logs/nginx.pidworker_rlimit_nofile102400;#一个进程打开的最大文件数目,与NGINX并发连接有关系#事情模式及连接数上限events{useepoll;#多路复用IO基于LINUX2.6以上内核,可以大大提高NGINX的性能uname-a查看内核版本号worker_connections102400;#单个workerprocess最大连接数,个中NGINX最大连接数=连接数进程数,一样平常1GB内存的机器上可以打开的最大数大约是10万旁边multi_accepton;#尽可能多的接管要求,默认是关闭状态}#处理http要求的一个运用配置段http{#引用mime.types,这个类型定义了很多,当web做事器收到静态的资源文件要求时,依据要求文件的后缀名在做事器的MIME配置文件中找到对应的MIME#Type,根据MIMETYPE设置并response相应类型(Content-type)includemime.types;default_typeapplication/octet-stream;#定义的数据流,有的时候默认类型可以指定为text,这跟我们的网页发布还是资源下载是有关系的fastcgi_intercept_errorson;#表示吸收fastcgi输出的http1.0responsecodecharsetutf-8;server_names_hash_bucket_size128;#保存做事器名字的hash表#用来缓存要求头信息的,容量4K,如果header头信息要求超过了,nginx会直接返回400缺点,先根据client_header_buffer_size配置的值分配一个buffer,如果##分配的buffer无法容纳request_line/request_header,那么就会##再次根据large_client_header_buffers配置的参数分配large_buffer,如果large_buffer还是无#法容纳,那么就会返回414(处理request_line)/400(处理request_header)缺点。client_header_buffer_size4k;large_client_header_buffers432k;client_max_body_size300m;#许可客户端要求的最大单文件字节数上传文件时根据需求设置这个参数#指定NGINX是否调用这个函数来输出文件,对付普通的文件我们必须设置为ON,如果NGINX专门做为一个下载真个话可以关掉,好处是降落磁盘与网络的IO处理数及#系统的UPTIMEsendfileon;#autoindexon;开启目录列表访问,适宜下载做事器tcp_nopushon;#防止网络壅塞#非常主要,根据实际情形设置值,超时时间,客户端到做事真个连接持续有效韶光,60秒内可避免重新建立连接,韶光也不能设太长,太长的话,若要求数10000##,都占用连接会把做事托去世keepalive_timeout60;tcp_nodelayon;#提高数据的实时相应性client_body_buffer_size512k;#缓冲区代理缓冲用户端要求的最大字节数(要求多)proxy_connect_timeout5;#nginx跟后端做事器连接超时时间(代理连接超时)proxy_read_timeout60;#连接成功后,后端做事器相应韶光(代理吸收超时)proxy_send_timeout5;#后端做事器数据回传韶光(代理发送超时)proxy_buffer_size16k;#设置代理做事器(nginx)保存用户头信息的缓冲区大小proxy_buffers464k;#proxy_buffers缓冲区,网页均匀在32k以下的话,这样设置proxy_busy_buffers_size128k;#高负荷下缓冲大小proxy_temp_file_write_size128k;#设定缓存文件夹大小,大于这个值,将从upstream做事器传gzipon;#NGINX可以压缩静态资源,比如我的静态资源有10M,压缩后只有2M,那么浏览器下载的就少了gzip_min_length1k;gzip_buffers416k;gzip_http_version1.1;gzip_comp_level2;#压缩级别大小,最小1,最大9.值越小,压缩后比例越小,CPU处理更快,为1时,原10M压缩完后8M,但设为9时,压缩完可能只有2M了。一样平常设置为2gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;#压缩类型:text,jscssxml都会被压缩gzip_varyon;#浸染是在http相应中增加一行目的是改变反向代理做事器的缓存策略#日志格式log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#ip远程用户当地韶光要求URL'$status$body_bytes_sent"$http_referer"'#状态发送的大小相应的头'"$http_user_agent"$request_time';#客户端利用的浏览器页面相应的韶光#动态转发upstreamweb1{#每个要求按访问ip的hash结果分配,这样每个访客固定访问一个后端做事器,可以办理session的问题。配置了ip_hash就没有负载均衡的效果了,每次访问的都是同一个tomcat#ip_hash;#转发的后真个tomcat做事器,weight表示转发的权重,越大转发的次数越多,机器性能不一样配置的weight值不一样server192.168.152.129:8080weight=1max_fails=2fail_timeout=30s;server192.168.152.129:8081weight=1max_fails=2fail_timeout=30s;}upstreamweb2{server192.168.152.129:8090weight=1max_fails=2fail_timeout=30s;server192.168.152.129:8091weight=1max_fails=2fail_timeout=30s;}server{listen80;#监听80端口server_namewww.dbspread.com;#域名#rewrite规则indexindex.jspindex.htmlindex.htm;root/usr/local/nginx/html;#定义做事器的默认网站根目录位置#重定向if($host!='www.dbspread.com'){rewrite^/(.)$http://www.dbspread.com/$1permanent;}#防盗链location~\.(rmvb|jpg|png|swf|flv)${#rmvb|jpg|png|swf|flv表示对rmvb|jpg|png|swf|flv后缀的文件实施防盗链valid_referersnoneblockedwww.dbspread.com;#表示对www.dbspread.com此域名开通白名单,比如在www.test.com的index.html引用download/av123.rmvb,无效roothtml/b;if($invalid_referer){#如果要求不是从www.dbspread.com白名单发出来的要求,直接重定向到403.html这个页面或者返回403#rewrite^/http://www.dbspread.com/403.html;return403;}}#监听完成往后通过斜杆(/)拦截要求转发到后真个tomcat做事器location/{#如果后真个做事器返回502、504、实行超时等缺点,自动将要求转发到upstream负载均衡池中的另一台做事器,实现故障转移。proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;proxy_set_headerHost$host;#获取客户真个主机名存到变量Host里面,从而让tomcat取到客户端机器的信息proxy_set_headerX-Real-IP$remote_addr;#获取客户真个主机名存到变量X-Real-IP里面,从而让tomcat取到客户端机器的信息proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#rewrite^/$http://www.dbspread.com/new.index.htmlpermanent;#用户访问www.dbspread.com,想直接跳转到网站下面的某个页面:www.dbspread.com/new.index.htmlproxy_passhttp://web1;#跳转到对应的运用web1}#location~.\.(php|jsp|cgi|shtml)?$#动态分离~匹配以.结尾(以PHPJSP结尾走这段)#{#proxy_set_headerHost$host;#proxy_set_headerX-Real-IP$remote_addr;#proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#proxy_passhttp://jvm_web2;#}#静态分离~匹配以.结尾(以html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css结尾走这段),当然不是越久越好,如果有10000个用户在线,都保存几个月,系统托跨location~.\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)${root/var/local/static;#静态资源存放在nginx的安装机器上#proxy_passhttp://www.static.com;#静态资源也可存放在远程做事器上expires30d;}#日志级别有[debug|info|notice|warn|error|crit]error_log级别分为debug,info,notice,warn,error,crit默认为crit,生产环境用error#crit记录的日志最少,而debug记录的日志最多access_log/usr/local/logs/web2/access.logmain;error_log/usr/local/logs/web2/error.logcrit;}}
到这一步环境准备已完成,干系的配置也修正完成,下面我们来查看效果
5.6 配置hosts域名映射
192.168.152.200www.dbspread.com
把稳:这里192.168.152.200 是keepalived里面virtual_ipaddress配置的虚拟ip
virtual_ipaddress{192.168.152.200#定义虚拟ip(VIP),可多设,每行一个}
到这一步环境准备已完成,干系的配置也修正完成,下面我们来查看效果
5.7 分别启动192.168.152.129的两个tomcat
5.8 分别启动192.168.152.130(keepalived主节点)和 192.168.152.129(keepalived从节点)的keepalived的
启动命令:
/usr/local/keepalived/sbin/keepalived
可以看到keepalived和nginx都启动了
在浏览器输入www.dpspread.com域名访问
5.9 下面我们停掉主节点192.168.152.130的keepalived和nginx
可以看到从节点变为主节点了
在浏览器输入地址www.dpspread.com访问,可以看到访问正常
5.10 下面我们重新启动主节点192.168.152.130
可以看到主节点重新启动往后变为主节点了
之前变为主节点的从节点又变回从节点了
到此keepalived+nginx的高可用完美完成,可以安安心心的睡个好觉了! Victory!!!!
Java知音,专注于Java实用文章推送,不容错过!
来源:cnblogs.com/cott/p/12373043.html