Nginx + keepalived 实现高可用 + 防盗链 + 动静分离,写得太好了!(1)

本文涉及的产品
.cn 域名,1个 12个月
简介: Nginx + keepalived 实现高可用 + 防盗链 + 动静分离,写得太好了!

一、Nginx Rewrite 规则

1. Nginx rewrite规则

Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好,提高收录量及排名等。

语法:

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地址不变

2. Nginx rewrite例子

a) 例如用户访问www.dbspread.com,想直接跳转到网站下面的某个页面,www.dbspread.com/new.index.html如何来实现呢? 我们可以使用Nginx Rewrite 来实现这个需求,具体如下:在server中加入如下语句即可:

server {
    listen       80; #监听80端口
    server_name  www.dbspread.com; #域名
    #rewrite规则
    index  index.jsp index.html index.htm;
    root   /usr/local/nginx/html; #定义服务器的默认网站根目录位置
    #监听完成以后通过斜杆(/)拦截请求转发到后端的tomcat服务器
    location /
        {
            #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_set_header Host  $host; #获取客户端的主机名存到变量Host里面,从而让tomcat取到客户端机器的信息
            proxy_set_header X-Real-IP $remote_addr; #获取客户端的主机名存到变量X-Real-IP里面,从而让tomcat取到客户端机器的信息
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            rewrite     ^/$    http://www.dbspread.com/new.index.html  permanent;
            proxy_pass http://web1; #跳转到对应的应用web1
        }
}

效果图如下:

image.png

rewrite     ^/$    http://www.dbspread.com/new.index.html  permanent;
对应如下语法:
rewrite    <regex>    <replacement>                 [flag];关键字      正则        替代内容                      flag标记

正则表达式说明:

*代表前面0或更多个字符                +代表前面1或更多个字符
?代表前面0或1个字符                  ^代表字符串的开始位置
$代表字符串结束的位置                 。为通配符,代表任何字符

b)例如多个域名跳转到同一个域名,nginx rewrite规则写法如下:

server {
    listen       80; #监听80端口
    server_name  www.dbspread.com; #域名
    #rewrite规则
    index  index.jsp index.html index.htm;
    root   /usr/local/nginx/html; #定义服务器的默认网站根目录位置
    if ($host != 'www.dbspread.com' ){
            rewrite ^/(.*)$  http://www.dbspread.com/$1  permanent;
            }
}

格式:

rewrite <regex> <replacement> [flag];
关键字   正则     替代内容 flag标记• 1


说明:

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 {
    listen       80;
    server_name  www.dbspread.com *.dbspread.com;
    location ~* \.(rmvb|jpg|png|swf|flv)$ { #rmvb|jpg|png|swf|flv表示对rmvb|jpg|png|swf|flv后缀的文件实行防盗链
            valid_referers none blocked  www.dbspread.com; #表示对www.dbspread.com此域名开通白名单,比如在www.test.com的index.html引用download/av123.rmvb,无效
            root   html/b;
            if ($invalid_referer) { #如果请求不是从www.dbspread.com白名单发出来的请求,直接重定向到403.html这个页面或者返回403
                 #rewrite ^/ http://www.dbspread.com/403.html;
                 return 403;
            }
    }
}

三、Nginx 动静分离

1. 动静分离是什么

Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

2. 动静分离原理图

image.png

3. Nginx动静分离应该注意的地方

1). WEB项目开发时要注意,将静态资源尽量放在一个static文件夹


2). 将static静态资源文件夹放到Nginx可以取到的位置


3). 页面要建立全局变量路径,方便修改路径


4). 修改nginx.conf的location, 匹配静态资源请求


4. Nginx动静分离步骤

4.1 准备一个静态资源button.css

body {margin: 10px 20px;text-align: center;font-family: Arial, sans-serif;background-color: red;}

4.2 在/var/local下新建一个static文件夹用来存放静态资源button.cssimage.png

4.3 在tomcat-8080/webapps/ROOT下的index.html里面引入button.css

<html><head><link rel="stylesheet" type="text/css" href="http://www.static.com/button.css" /><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="renderer" content="webkit"><meta name="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节点新增静态资源分离的配置

server {
    listen       80; #监听80端口
    server_name  www.dbspread.com; #域名
    #rewrite规则
    index  index.jsp index.html index.htm;
    root   /usr/local/nginx/html; #定义服务器的默认网站根目录位置
    #重定向
    if ($host != 'www.dbspread.com' ){
            rewrite ^/(.*)$  http://www.dbspread.com/$1  permanent;
            }
    #防盗链
     location ~* \.(rmvb|jpg|png|swf|flv)$ { #rmvb|jpg|png|swf|flv表示对rmvb|jpg|png|swf|flv后缀的文件实行防盗链
                valid_referers none blocked  www.dbspread.com; #表示对www.dbspread.com此域名开通白名单,比如在www.test.com的index.html引用download/av123.rmvb,无效
                root   html/b;
                if ($invalid_referer) { #如果请求不是从www.dbspread.com白名单发出来的请求,直接重定向到403.html这个页面或者返回403
                     #rewrite ^/ http://www.dbspread.com/403.html;
                     return 403;
                }
        }
    #监听完成以后通过斜杆(/)拦截请求转发到后端的tomcat服务器
    location /
        {
            #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_set_header Host  $host; #获取客户端的主机名存到变量Host里面,从而让tomcat取到客户端机器的信息
            proxy_set_header X-Real-IP $remote_addr; #获取客户端的主机名存到变量X-Real-IP里面,从而让tomcat取到客户端机器的信息
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #rewrite     ^/$    http://www.dbspread.com/new.index.html  permanent;#用户访问www.dbspread.com,想直接跳转到网站下面的某个页面:www.dbspread.com/new.index.html
            proxy_pass http://web1; #跳转到对应的应用web1
        }
       # location ~ .*\.(php|jsp|cgi|shtml)?$ #动态分离 ~匹配 以.*结尾(以PHP JSP结尾走这段)
       #  {
       #     proxy_set_header Host  $host;
       #        proxy_set_header X-Real-IP $remote_addr;
       #        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       #        proxy_pass http://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_pass http://www.static.com; #静态资源也可存放在远程服务器上
            expires    30d; #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.log main;
        error_log   /usr/local/logs/web2/error.log  crit;
    }

4.5 访问页面查看效果

image.png





相关文章
|
4月前
|
应用服务中间件 nginx
Nginx Location 深入剖析及动静分离简易配置
Nginx Location 深入剖析及动静分离简易配置
71 3
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
109 0
|
5月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
3月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
71 1
|
4月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
129 1
|
5月前
|
前端开发 Java 应用服务中间件
若依分离板nginx配置
若依分离板nginx配置
396 1
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
负载均衡 容灾 应用服务中间件
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
最近同学出去面试经常会被问到一个问题。 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像很牛逼的样子,但是我问你,如果主机也就是部署了nginx那台机器并发过大导致宕机了怎么办? 答曰:不考虑带宽峰值的话,比较新的 CPU 跑 nginx 单核每秒能接近 2 万请求,而且nginx如果纯做 HTTP 转发的话,Nginx 的性能高到恐怖,会挂掉很不科学。。。。 面试官:好吧,算你会忽悠,那如果插头被扫地大妈踢掉了怎么办,因为没电导致服务器宕机 答曰:阿里云机房会断电。。。你特么在逗我吧。。
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
|
6月前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
84 2
|
缓存 运维 负载均衡
Keepalived+LVS+nginx搭建nginx高可用集群
  nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万。nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不足的情况下,应用服务器可以通过加机器的方式扩展流量。此时,对于一些特大型的网站,性能的瓶颈就来自于nginx了,因为单机的nginx的并发能力是有上限的,而nginx本身是不支持集群模式的,因而此时对nginx的横向扩展就显得尤为重要。
754 1