Nginx rewrite规则
Rewrite规则含义就是某个URL重写成特定的URL,从某种意义上说为了美观或者对搜索引擎友好,提高收录量及排名等。
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
Rewrite规则的flag标记主要有以下几种:
1) last : 相当于Apache里的(L)标记,表示完成rewrite;
2) break: 本条规则匹配完成后,终止匹配,不再匹配后面的规则
3) redirect: 返回302临时重定向,浏览器地址会显示跳转后的URL地址
4) permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last和break用来实现URL重写,浏览器地址栏URL地址不变
以下是两个例子
a) 例如用户访问www.james1.com,想直接跳转到网站下面的某个页面,www.james1.com/new.index.html如何来实现呢? 我们可以使用Nginx Rewrite 来实现这个需求,具体如下:在server中加入如下语句即可:
rewrite ^/$ http://www.test.com/index01.html permanent;
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
*代表前面0或更多个字符 +代表前面1或更多个字符
?代表前面0或1个字符 ^代表字符串的开始位置
$代表字符串结束的位置 。为通配符,代表任何字符
b) 例如多个域名跳转到同一个域名,nginx rewrite规则写法如下:
server
{
listen 80;
server_name www.james1.com;
if ($host != ‘www.james1.com’ ) {
rewrite ^/(.*)$ http://www.james1.com/$1 permanent;
}
格式:
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
说明:
rewrite为固定关键字,表示开始进行rewrite匹配规则、
regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是http://www.james1.com/$1,$1是取自regex部分( )里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.james1.com/$1 地址上
Nginx 防盗链
什么是防盗链
比如http://www.james1.com/download/Tokyohot.rmvb 这个视频下载地址
加上以下配置,实现防盗链
server {
listen 80;
server_name www.james1.com *.james.com;
location ~* \.(rmvb|jpg|png|swf|flv)$ {
valid_referers none blocked www.james1.com;
root html/b;
if ($invalid_referer) {
#rewrite ^/ http://www.james1.com/403.html;
return 403;
}
}
}
第一行:rmvb|jpg|png|swf|flv表示对rmvb|jpg|png|swf|flv后缀的文件实行防盗链
第二行:www.james1.com表示对此域名开通白名单,比如在www.test.com的index.html引用download/Tokyohot.rmvb,无效
if{$invalid_referer}里面内容的意思是,如果请求不是从www.james.com白名单发出来的请求,直接返回403也是可以。
如果在服务器端用 http://127.0.0.1:8080/download/Tokyohot.rmvb, 是不可以访问到的。
或者用如下设置也可以:
location ~* \.(rmvb|jpg|png|swf|flv)${
if ($host != 'www.james1.com') {
return 403;
}
}
动静分离
Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。原理如下图
注意事项:
1,WEB项目开发时要注意,将静态资源尽量放在一个static文件夹
2,将static静态资源文件夹放到Nginx可以取到的位置
3,页面要建立全局变量,方便修改路径
4,修改nginx.conf的location, 匹配静态资源请求
Ps: 前端引用文件js或css文件时,最好路径前加一个公共变量,以便跨服务器时一处修改多处作用。
Nginx+keepalived 实现高可用
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件
如何实现故障转移?
Keepalived高可用服务对之间的故障切换转移,是通过 VRRP 来实现的。
在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
实验环境配置如下:同学们根据自己机器IP来设置
192.168.1.110:nginx + keepalived master 主
192.168.1.111:nginx + keepalived backup 从
192.168.1.111:tomcat_8080
192.168.1.111:tomcat_8081
虚拟ip(VIP):192.168.1.200,对外提供服务的ip,也可称作浮动ip,各个组件之间的关系图如下:
1,下载地址:https://pan.baidu.com/s/1G7sLL-YkZGSMu8G76yz1Rw 密码:adbw。
2.keepalived安装步骤:192.168.1.110:nginx + keepalived master节点:
A./configure --prefix=/data/program/keepalived --sysconf=/etc
##因为keepalive启动时候会默认读取/etc/keepalived/keepalived.conf
B.make && make install
3,修改/etc/keepalived/keepalived.conf配置文件信息
global_defs { #全局配置
notification_email {
james@qq.com #设置报警邮件地址,可以设置多个,每行一个。需要开启sendmail服务。
}
notification_email_from sns-lvs@gmail.com
smtp_server smtp.hysec.com #设置SMTP Server地址
smtp_connection_timeout 30 #设置SMTP Server的超时时间
router_id nginx_master #表示运行Keepalived服务器的一个标识,唯一的
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2
}
vrrp_instance VI_1 { #vrrp 实例定义部分
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.1.200 # 定义虚拟ip(VIP),可多设,每行一个
}
}
以上主节点的配置, 从节点backup配置和主节点一样,只是state要改成backup, priority 值要比master小点即可
4,启动keepalived
/data/program/keepalived/sbin/keepalived
5,启动顺序:
1,启动192.168.1.111服务器上的tomcat8080和tomcat8081
2,启动Master 192.168.1.110的Keepalived节点,sh脚本也会被执行并自动启动Nginx
3,启动Backup 192.168.1.111的Keepalived节点,sh脚本也会被执行并自动启动Nginx
注:不需要手动启动Nginx
6,查看keepalived日志: tail -f /var/log/messages
7,KEEPLIVED主从故障测试
1,两组Keepalied+Nginx应用都启动成功后,使用VIP以负载均衡方式访问两个Tomcat
2,停止192.168.1.110主节点的Nginx应用,观察Nginx状态,并访问Tomcat;
3,停止192.168.1.110主节点的Keepalived应用,观察日志/var/log/messages,并访问tomcat
4,观察1.111从节点的日志,角色变更情况。
HTTPS与Nginx
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer)。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密
Nginx 与 HTTPS操作
1.生成证书与私钥
Ø 创建服务器私钥
openssl genrsa -des3 -out server.key 1024
Ø 创建签名请求的证书(CSR)
openssl req -new -key server.key -out server.csr
Ø 加载SSL支持的Nginx并使用私钥时去除口令:
cp server.key server.key.bak
openssl rsa -in server.key.bak -out server.key
Ø 自动签发证书:
openssl x509 -req -days 10240 -in server.csr -signkey server.key -out server.crt
2.Nginx配置修改
把证书和私钥加入到nginx配置里
server {
listen 443 ssl;
server_name www.james1.com localhost;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
3.重启nginx
/usr/local/nginx/sbin/nginx -s reload