NGINX(4)

我们继续对nginx做一些修改

限制连接数

 找到nginx安全控制,限制连接

limit_conn_zone $binary_remote_addr zone=addr:10m;
  限制连接数     匹配变量(客户IP地址)    在内存开辟了10M的内存区域(做出限制)

复制该实例 

        location /download/ {
            表示在访问该网站根目录download目录底下
            limit_conn addr 1;
            启用的并发连接数
        }

在server1/usr/loacl/nginx/html/创建download目录并添加图片

nginx -s reload 刷新

此时我们在server4安装httpd-tools

yum -y install httpd-tools

在server4进行压力测试

ab -c10 -n 10 http://172.25.0.11/download/photograph.jpg
    -c并发连接
        -n处理10个请求

 此时我们在sever1的/usr/local/nginx/access.log查看

只有一个200正确,剩下是503报错

当我们将并发改为1时

再次查看日志 

此时日志返回全部为200

我们还可以通过server_name来限制


限制访问速率

limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
                                                每秒处理一个请求

nginx -s reload 刷新

此时我们再次在server4执行

ab -c1 -n 10 http://172.25.0.11/download/photograph.jpg

此时产生报错,我们查看server1日志

此时限流成功

 在处理过多请求时

 我们进行添加

 nginx -s reload刷新

我们在server4再次测试

 此时无报错,我们查看server1日志

 全部为200,测试成功


此项设置会有延迟,如果设置不延迟

注意!此时我们应该使用nginx -s stop停掉服务

再起nginx,使用重载命令可能会不生效 

此时快速处理完,没有处理的请求会报错


限制带宽:

limit_rate 50k;

 我们做100k的限制,此时我们访问的照片大小约为1000k,

我们进行测试

ab -c1 -n 1 http://172.25.0.11/download/photograph.jpg

该测试大约需要10秒作业,此时应有明显延迟

 日志也应该是200表示成功


自动索引:

autoindex on;

 刷新

访问172.25.0.11


 nginx缓存配置:

缓存可以降低网站带宽,加速用户访问

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

nginx -s reload

此时我们测试出图片还有365天过期


日志轮询:

创建脚本

vim        /opt/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 /opt/nginxlog.sh
    加可执行权限

此时我们可以看到日志文件已按时间分类


日志可视化:

在浏览器下载https://tar.goaccess.io/goaccess-1.4.tar.gz

tar zxf goaccess-1.4.tar.gz
        解压
yum install -y GeoIP.x86_64

在下载geoip-devel时注意版本是否匹配

yum install -y GeoIP-devel-1.5.0-13.el7.x86_64.rpm
    相对路径
yum install -y /root/ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
    绝对路径

 以上三个rpm包如果通过yum search 找不到的话可以在阿里云的镜像站找

不建议在csdn寻找付费购买

cd goaccess-1.4/
./configure --enable-utf8 --enable-geoip=legacy
make
make install
goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
    将日志输出到nginx的默认发布目录    日志格式    显示时间

ctrl+z

bg打入后台访问http://172.25.0.11/report.html


禁用不必要日志记录:

 reload刷新

效果图:

 但是会在access.log中记录下来

 修改:

        location /status{
                stub_status on;
                access_log off;
        }

reload刷新

此时日志并不记录 

此日志应只有管理员可以看

        location /status{
                stub_status on;
                access_log off;
                allow 127.0.0.1;
                #allow 172.25.0.1;
                deny all;
        }

此时windows主机无法浏览

启用该IP刷新之后可以访问:


 乱码:

当我们在server1的nginx默认发布目录输入带有中文的字符集,并通过浏览器进行访问时

会发现浏览器并不能识别中文

 此时我们添加:

charset utf-8;

nginx -s reload

再次查看:

 乱码解决


nginx支持正则表达式

返回值自定义(状态码)

        if ($remote_addr = 172.25.0.1) {
                return 405;
        }


重定向:

防止域名恶意解析到服务器IP

server4解析

 此时我们添加return 500;

 此时我们在server4访问会出现

 我们做重定向

    server {
        listen       80;
        server_name  localhost;
        #return 500;
        rewrite ^(.*) http://www.westos.org permanent;

reload刷新


80重定向到443:

启用443虚拟主机

 

    server {
        listen       443 ssl;
        server_name  www.westos.org;
                        监听的虚拟主机

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.pem;  
                                    证书和私钥放在一个文件

        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;
        }
    }
cd /etc/pki/tls/certs/
make cert.pem
    自签名证书

 

umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2  ; \
cat $PEM1 >  cert.pem ; \
echo ""    >> cert.pem ; \
cat $PEM2 >> cert.pem ; \
rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
.........................................+++
....+++
writing new private key to '/tmp/openssl.m4OH16'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:westos
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:www.westos.org
Email Address []:root@westos.org
mv cert.pem /usr/local/nginx/conf/

禁用负载均衡,启用rewrite

        server{
                listen 80;
                server_name www.westos.org;
                rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
                #location / {
                #       proxy_pass http://westos;
                #}
        }

 nginx -s reload刷新

使用curl命令测试


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值