Nginx的架构及功能部署(热部署,日志切割,gzip压缩,支持https,重写功能,防止盗链,图形化监控工具)

1.Nginx的介绍

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

Nginx的三个主要功能:
<1>Nginx作为静态资源服务器:可以处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。(缺点:不能处理动态页面)

<2>Nginx作为反向代理服务器:可以缓存和负载均衡服务。部署在不同的服务器上,但是通过统一的域名进入,nginx则对请求进行分发,减轻了服务器的压力。

<3>Nginx作为应用程序接口(API)

Nginx的优点:
Nginx具有高并发、高性能,可扩展性好,内存消耗少,配置文件简单,成本低(低于F5等硬件负载均衡),支持重写功能(http->https),具有健康检测功能,节省带宽,支持gzip压缩,模块化设计的特点。


2.Nginx的安装

环境:测试机中的firewalld、selinux、NetworkManager已关闭

tar zxf nginx-1.18.0.tar.gz解压包

使配置文件字体有颜色:
mkdir ~/.vim
cp -r /soft/nginx-1.18.0/contrib/vim/* ~/.vim

解决依赖性
yum install -y gcc
yum install -y pcre-devel
yum install -y openssl-devel

编译安装
./configure --prefix=/usr/local/nginx --with-http_ssl_module 预编译
make编译
make install安装

运行Nginx
cd /usr/local/nginx/sbin/
./nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3.Nginx版本的热部署

Ngnix中的进程分为两类,一类是master进程,一类是worker进程。   
其中master进程使用来管理监控控制其下边的worker进程的主进程,这个进程由root发起。。
worker进程是master进程的子进程,是真正处理请求的进程。
当通知ngnix重读配置文件的时候,master进程会进行语法错误的判断。如果存在语法错误的话,返回错误,不进行装载;如果配置文件没有语法错误,那么ngnix也不会将新的配置调整到所有worker中。而是,先不改变已经建立连接的worker,等待worker将所有请求结束之后,将原先在旧的配置下启动的worker杀死,然后使用新的配置创建新的worker。所以nginx 的热部署 ,是在不打断用户请求的情况下更新版本。

3.1 Nginx版本的查看

cd /usr/local/nginx/sbin/
./nginx -V
在这里插入图片描述


3.2 Nginx的版本的更新

实验环境:将nginx-1.18.0更新为nginx-1.17.10
1.备份旧版本(以访更新失败)
cd /usr/local/nginx/sbin/
cp nginx nginx.old

在这里插入图片描述
2.对新版本重新编译
./configure --prefix=/usr/local/nginx --with-http_ssl_module对新版预编译时功能不变,参数不变
make编译

注意:此时不需要再make installl,否则会覆盖原来的二进制程序,只有在第一次按装使需要
在这里插入图片描述
在这里插入图片描述
3.把新编好的二进制程序放安装目录覆盖原来的文件
cp -f objs/nginx /usr/local/nginx/sbin/nginx如果程序正常运行强制复制
在这里插入图片描述
4.将原先在旧的配置下启动的worker杀死,然后使用新的配置创建新的worker
ps -ef |grep nginx查看nginx进程
kill -USR2 20986旧版本停止接收请求,并开启新的master产生新的worker
kill -WINCH 20986等待旧版本处理完关闭worker进程

在这里插入图片描述


3.3 Nginx版本的回退

1.旧版本备份的二进制程序覆盖新版本
cp -f nginx.old nginx
在这里插入图片描述
2.关闭新版本的进程,开启旧版本进程
kill -HUP 20986启动旧版本的worker进程
kill -USR2 21225新版本不再接收请求
kill -WINCH 21225关闭新版本的worker进程
kill -9 21225关闭新版本的masterr进程

在这里插入图片描述
在这里插入图片描述


4.Nginx的日志切割

access.log: 记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;
error.log: 记录服务器错误的日志
工作中 Nginx 日志基本为 access_log,配置启动后就开始产生日志文件,日积月累的,这个日志文件会越来越大。针对这种情况,采用日志切割防止日志过大。

用户端增加访问测试:
ab -c 1 -n 100000 http://192.168.43.10/index.html一个并发十万次请求
在这里插入图片描述
在这里插入图片描述


日志切割
1.对日志备份

mv access.log `date +%F -d -1day`_access.log ###备份前一天日志

2.重新记录新日志

../sbin/nginx -s reopen ##重新打开一个access.log记录新日志

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


5.Nginx的gzip压缩

压缩前
在这里插入图片描述
在这里插入图片描述


设置gzip压缩

    gzip  on;
    gzip_min_length 1;
    gzip_comp_level 2;
    gzip_types text/plainapplication/x-javascript test/css application/xml text/javascript application/x-httpd-php image/gif image/png;

在这里插入图片描述
在这里插入图片描述


压缩后
在这里插入图片描述


6.设置nginx的systemctl启动方式

vim /usr/lib/systemd/system/nginx.service设置nginx的systemctl启动方式

[Unit]
Description=The Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl daemon-reload重新加载systemctl命令
在这里插入图片描述
在这里插入图片描述


7.Nginx的配置参数

7.1 指定开启用户

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

user  nginx nginx; ##指定开启用户

在这里插入图片描述

useradd nginx建立nginx用户
systemctl restart nginx.service重启nginx服务
ps -ef | grep nginx查看nginx运行用户

在这里插入图片描述


7.2 指定worker进程数

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

worker_processes  2;

在这里插入图片描述

systemctl restart nginx.service
ps -ef | grep nginx

在这里插入图片描述


7.3 指定最大连接数

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

events {
    worker_connections  65535;
}

在这里插入图片描述


7.4 限制并发连接数/速率/带宽

vim /usr/local/nginx/conf/nginx.conf
mkdir /usr/local/nginx/html/download/建立目录并放置访问内容
systemctl restart nginx.service

user  nginx nginx;
worker_processes  2;

events {
    worker_connections  65535;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    
    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /download/ {
            limit_conn addr 1;
            limit_req zone=one burst=5;
            limit_rate 50k;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

在这里插入图片描述


测试:在这里插入图片描述

1.限制并发数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.限制传输速率

在这里插入图片描述
在这里插入图片描述


3.限制带宽

在这里插入图片描述
在这里插入图片描述


7.5 Nginx日志的设置

vim /usr/local/nginx/conf/nginx.conf
在这里插入图片描述
在这里插入图片描述

systemctl restart nginx.service
测试:

[root@rhel7 ~]# curl 192.168.43.10

在这里插入图片描述


8.Nginx获取真正的用户ip

1.编译real_ip模块

cd /soft/nginx-1.18.0/
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module重新预编译
make编译
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/nginx.old备份二进制程序
cp -f nginx /usr/local/nginx/sbin/nginx新的二进制程序覆盖旧的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.配置nginx模块

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

http {
.......
server {
        listen 80;
        server_name servera.rhel7.com;
        set_real_ip_from 192.168.43.10;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        
        location / {
                return 200 "client real ip: $remote_addr\n";
        }
}
}

在这里插入图片描述

systemctl restart nginx.service
测试
在这里插入图片描述


9.Nginx的图片压缩

1.编译图片过滤模块

yum install -y gd-devel-2.0.35-26.el7.x86_64.rpm解决模块依赖性
cd /soft/nginx-1.18.0/
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module=dynamic重新预编译
make编译
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/nginx.old备份二进制程序
cp -f nginx /usr/local/nginx/sbin/nginx新的二进制程序覆盖旧的

在这里插入图片描述


2.建立目录存放模块

mkdir /usr/local/nginx/modules建立目录
cp /soft/nginx-1.18.0/objs/ngx_http_image_filter_module.so /usr/local/nginx/modules
在这里插入图片描述


3.编辑nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
systemctl restart nginx.service

load_module  modules/ngx_http_image_filter_module.so;

user  nginx nginx;
worker_processes  2;

events {
    worker_connections  65535;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /download/ {
            limit_conn addr 1;
            limit_req zone=one burst=5;
            #limit_rate 50k;
            image_filter resize 150 100;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

在这里插入图片描述
在这里插入图片描述


测试
在这里插入图片描述
在这里插入图片描述


10.Nginx实现https访问

1.支持ssl模块

在这里插入图片描述

2.生成证书

cd /etc/pki/tls/certs/
make cert.pem生成证书

在这里插入图片描述
在这里插入图片描述

3.配置文件

# HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  servera.rhel7.com;

        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   /web;
            index  index.html index.htm;
        }
    }

在这里插入图片描述


4.建立目录及发布内容

mkdir /web
vim /web/index.html
systemctl resatr nginx

在这里插入图片描述


测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


11.Nginx的重新功能

实现访问自动跳转到https
vim /usr/local/nginx/conf/nginx.conf

http {
...............

    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;
        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   /web;
            index  index.html index.htm;
        }
    }

server {
        listen 80;
        server_name servera.rhel7.com;
        #rewrite ^/(.*)$ https://servera.rhel7.com/$1;
        #rewrite ^/(.*)$ https://servera.rhel7.com/$1 permanent;
        rewrite ^/bbs$ https://bbs.rhel7.com/$1 permanent;
        }

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

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

测试
1.临时重写
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.永久重写
在这里插入图片描述

在这里插入图片描述


3.访问以bbs结尾时重定向
在这里插入图片描述
在这里插入图片描述


11.Nginx防止盗链

实验环境:配置两台Nginx服务器(servera/serverd)

11.1 盗链的实现

servera:提供访问资源
在这里插入图片描述
在这里插入图片描述


serverd:进行盗链操作
vim /usr/local/nginx/conf/nginx.conf

server {
        listen 80;
        server_name daolian.rhel7.com;

        charset utf-8;

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

mkdir /web
vim /web/index.html

<html>
<body>
<br>盗链图片</br>
<img src="http://servera.rhel7.com/test.jpeg">
</body>
</html>

/usr/local/nginx/sbin/nginx -s reload

在这里插入图片描述

在这里插入图片描述

盗链测试
图片资源在servera,但是访问serverd可以访问到
在这里插入图片描述


11.2 防止盗链

在server中设置
vim /usr/local/nginx/conf/nginx.conf

server {
        listen 80;
        server_name servera.rhel7.com;

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

        location ~*\.(gif|jpg|png|jpeg)$ {
                root /web;
                valid_referers none blocked servera.rhel7.com;
                if ($invalid_referer) {
                        #return 403;
                        rewrite ^/ http://bbs.rhel7.com/daolian.jpg;
                }
	}
}

在这里插入图片描述

在这里插入图片描述

测试
在这里插入图片描述
在这里插入图片描述


12.Nginx图形化监控工具

解决依赖性
yum install -y GeoIP-1.5.0-14.el7.x86_64.rpm GeoIP-devel-1.5.0-14.el7.x86_64.rpm geoipupdate-2.5.0-1.el7.x86_64.rpm
yum install ncurses-devel -y

解压goaccess并安装
tar zxf goaccess-1.3.tar.gz
cd goaccess-1.3/
./configure --prefix=/usr/local/goaccess --enable-utf8 --enable-geoip=legacy --with-openssl
make && make install

在这里插入图片描述

做软连接
ln -s /usr/local/goaccess/bin/goaccess /usr/local/bin

在这里插入图片描述


配置nginx配置文件
vim /usr/local/nginx/conf/nginx.conf

location / {
            alias /usr/local/nginx/html/report.html;
        }

启动goaccess
goaccess access.log -o /usr/local/nginx/html/report.html --real-time-html --time-format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED

可打入后台
在这里插入图片描述
访问测试:

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章