IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> nginx的限流、配置管理、重定向以及防盗链 -> 正文阅读

[系统运维]nginx的限流、配置管理、重定向以及防盗链

目录

一、nginx的限流

1.限制并发连接数

2.限制每秒的请求数

3.设置排队(超过指定数量则排队访问)

4.设置无延迟(只能访问一次)

5.限制带宽

二、nginx的配置管理

1.自动索引

2.expire 缓存设置

3.日志轮询

4.禁用不必要的日志记录

5.限制ip访问

6.中文乱码

三、nginx的重定向

1.防止恶意解析

2.端口重定向

3.虚拟主机重定向

四、盗链与防盗链

1.盗链:

2.防盗链:


一、nginx的限流

NGINX限流使用漏桶算法(leaky bucket algorithm),该算法广泛应用于通信和基于包交换计算机网络中,用来处理当带宽被限制时的突发情况。和一个从上面进水,从下面漏水的桶的原理很相似;如果进水的速率大于漏水的速率,这个桶就会发生溢出。

server1的nginx默认发目录下的download/有一个文件,我们以它来测试。

正常情况下在客户端进行压力测试,请求全部接受:

ab -c10 -n 20 http://172.25.0.1/download/test.jsp  ##并发数为10,请求总数为20

1.限制并发连接数

在server1的主配置文件里设置并发数为1

vim /usr/local/nginx/conf/nginx.conf

limit_conn_zone $binary_remote_addr zone=addr:10m;   ##可以在http的全局写,也可以在某个server的模块里写

server {
        listen       80;
        server_name  localhost;


        location /download/ {
                limit_conn addr 1;     ##限制并发数为1
        }

nginx -s reload

?

压力测试有一个请求被拒绝:

2.限制每秒的请求数

在server1的主配置文件里设置每秒只能请求一次

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

limit_req zone=one;

?

在客户端中进行压力测试,因为每秒只能请求一次,所以9次被拒绝:

3.设置排队(超过指定数量则排队访问

在server1中设置一次访问5个

limit_req zone=one burst=5;

?

因为设置了每秒通过一个请求,所以10个请求需要访问2次,共计10秒:

4.设置无延迟(只能访问一次)

在server1中设置无延迟

limit_req zone=one burst=5 nodelay;

因为设置了排队一次访问5个,10个请求应该访问两次,但设置了无延迟,所以会有半数被拒绝

5.限制带宽

有时从某些网站下载东西会很慢,其实就是被限制了带宽所导致。

在server1中限制带宽为50k

limit_rate 1k;

test.jsp大小为584k,请求2次,限制带宽为50k,则大致需要22秒:

二、nginx的配置管理

1.自动索引

用浏览器访问某个目录时,会自动列出目录的内容,方便查询

location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                #limit_rate 50k;
                autoindex.on;
        }

?

测试效果:

2.expire 缓存设置

这样做可以降低网站带宽,加速用户访问。

编辑主配置文件,设定对图片等进行缓存,缓存365天

server {
        listen       80;
        server_name  localhost;


        location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                #limit_rate 50k;
                autoindex on;
        }

        location ~ .*\.(gif|jpg|png)$ {         ##对图片进行缓存
                expires 365d;
                root html;
        }
.....

测试效果:

3.日志轮询

编写一个脚本,并设置定时任务,实现日志的分割与保存

cd /opt
vim nginxlog.sh

#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

chmod +x nginxlog.sh
crontab -e

00 00 * * * sh /opt/nginxlog.sh &> /dev/null     ##每天24:00 执行

chmod -R 700 /usr/local/nginx/logs    ##为了安全,日志目录只有超级用户有访问权限

?

4.禁用不必要的日志记录

设置使用浏览器访问server1的某个目录时,不会产生日志

server {
        listen       80;
        server_name  localhost;


        location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                #limit_rate 50k;
                autoindex on;
        }

        location ~ .*\.(gif|jpg|png)$ {
                expires 365d;
                root html;
        }

        location /status {               ##访问该目录不被计入日志
                stub_status on;
                access_log off;
        }

在客户端用浏览器测试:用浏览器访问不会产生日志,使用curl 172.25.0.1/status 访问会产生日志

5.限制ip访问

对于server1的某个目录,限制哪些ip可以访问,哪些ip不可

location /status {
                stub_status on;
                access_log off;
                allow 172.25.0.1;   ##172.25.0.1可以访问
                deny all;           ##其他ip不可
        }

?

测试效果:

172.25.0.250访问,403拒绝

172.25.0.1访问成功

?

6.中文乱码

nginx默认是不支持中文的。文件有中文时,用浏览器访问会乱码

在主配置文件内设置支持中文即可

server {
        listen       80;
        server_name  localhost;
        charset utf-8;
.........

?

测试效果,清除浏览器缓存再次访问,中文正常显示:

?

三、nginx的重定向

1.防止恶意解析

(1)500拒绝访问

编辑server1的主配置文件。设置访问server1时,反馈500报错

server {
        listen       80;
        server_name  localhost;
        return 500;             ##返回报错500
.........

?

?测试效果,访问172.25.0.1反馈500报错:

(2)将所有访问重定向到其他域名

编辑server1的主配置文件。设置所有访问都被重定向到www.westos.com

server {
        listen       80;
        server_name  localhost;
        rewrite ^(.*) http://www.westos.com permanent;
.......

测试效果,请求被重定向到www.westos.com:

2.端口重定向

编辑server1的主配置文件,将80端口定向到443端口

server {
        listen 80;
        server_name www.westos.com;

        rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
        #location / {
                #proxy_pass http://westos;
        #}
    }


server {
        listen       443 ssl;
        server_name  www.westos.com;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        
        location / {
            root   html;
            index  index.html index.htm;
        }
    }

生成https加密证书,并移动到conf/目录下

cd /etc/pki/tls/certs/
make cert.pem                          ##生成加密证书,需要设置一些证书信息
mv cert.pem /usr/local/nginx/conf/     ##移动到配置文件目录下
nginx -t
nginx -s reload

测试效果。用浏览器访问www.westos.com,出现https加密认证,说明定向到了443端口:

3.虚拟主机重定向

(1)将www.westos.com 定向到 bbs.westos.com

server {
        listen 80;
        server_name www.westos.com;

        #rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
        rewrite ^/(.*)$ http://bbs.westos.com/$1 permanent;

        #location / {
                #proxy_pass http://westos;
        #}
    }

server {
        listen 80;
        server_name bbs.westos.com;

        location / {
                 root /bbs;
        index index.html;
                 }
        }

用客户端测试:

?(2)将bbs.westos.com 定向到 www.westos.com

server {
        listen 80;
        server_name www.westos.com;

        #rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
        #rewrite ^/(.*)$ http://bbs.westos.com/$1 permanent;

        if ($host = "bbs.westos.com") {
                rewrite ^/(.*)$ http://www.westos.com/bbs/$1 permanent;
        }

        #location / {
                #proxy_pass http://westos;
        #}
    }

    #server { 
    #   listen 80;
    #   server_name bbs.westos.com;
    #
    #   location / {
    #            root /bbs;
    #   index index.html;
    #            }
    #   }

在客户端写本地解析,然后测试:

四、盗链与防盗链

1.盗链:

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。

我们先模拟一下盗链

server2是盗链机,server1是被盗链主机。

现在server1上有一张图

server2盗链这张图。编写本地解析,编写发文件进行盗链

vim /etc/hosts

172.25.0.1 www.westos.com

vim /usr/local/nginx/html/index.html

<html>
<body>
<br>盗链</br>
<img src="http://www.westos.com/download/redhat.png">
</body>
</html>
 
nginx -s reload

盗到了server1主机上的资源? :

2.防盗链:

WEB应用防火墙通过实现URL级别的访问控制,对客户端请求进行检测。如果发现图片、文件等资源信息的HTTP请求来自于其它网站,则阻止盗链请求,节省因盗用资源链接而消耗的带宽和性能。

以免被盗链,我们对server1主机部署防盗链。编辑主配置文件

server {
        listen 80;
        server_name www.westos.com;

        #rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
        #rewrite ^/(.*)$ http://bbs.westos.com/$1 permanent;

        #if ($host = "bbs.westos.com") {
        #       rewrite ^/(.*)$ http://www.westos.com/bbs/$1 permanent;
        #}

        location ~ \.(jpg|png)$ {
                valid_referers none blocked www.westos.com;
                if ($invalid_referer) {
                        return 403;   
                        #rewrite ^/ http://www.westos.com/fandaolian.jpg;  
                                        }                       
                       }
        location / {
                root html;
                index index.html;
        }

       
    }

此时,server2再进行盗链时,则会失败:

我们也可以给盗链主机重定向一张图

location ~ \.(jpg|png)$ {
                valid_referers none blocked www.westos.com;
                if ($invalid_referer) {
                        #return 403;   
                        rewrite ^/ http://www.westos.com/fandaolian.jpg;  
                                        }                       
                       }

此时server2再进行盗链

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:13:10  更:2021-09-11 19:13:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:07:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码