Nginx(2):nginx作为web服务器的管理和优化

目录

一. nginx并发优化(这里实验没做)

二.nginx平滑升级(实验出现错误,排错失败)

 三.nginx版本回退(平滑升级都没做,这个能做???)

四.nginx限流

(1)控制并发数

  (2)控制访问请求数量

 (3)控制服务器单次可处理的请求数

 (4)控制传输带宽

五.nginx浏览器端优化

(1)自动索引功能

 (2)如何设置缓存的有效期

(3)中文乱码

 六.nginx日志管理

(1)nginx日志自动备份脚本

(2)goaccess日志可视化

 七.configure时的两个参数解释

(1)status

(2)SSL模块


一. nginx并发优化(这里实验没做)

Linux下高并发socket最大连接数所受的各种限制

1.修改用户进程可打开文件数限制
  /etc/security/limits.conf
  nginx - nofile 65535
2.Linux系统级的最大打开文件数限制
  fs.file-max = 188414		//和内存容量相关
3.修改网络内核对TCP连接的有关限制
  net.ipv4.ip_local_port_range = 1024	65535
4.限制接收新 TCP 连接侦听队列的大小
  net.core.somaxconn = 2048
5.启用tcp连接timewait快速回收和重用
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.tcp_tw_reuse = 1

 worker_processes        //工作进程数

worker_connections        //单个工作进程并发连接数 

nginx作为http服务器时: max_clients = worker_processes * worker_connections

nginx作为反向代理服务器时: max_clients = worker_processes * worker_connections / 2

1.    ulimit -a  查看用户进程能打开的最大文件数

二.nginx平滑升级(实验出现错误,排错失败)

为什么需要平滑升级:当服务器在运行时,需要升级的情况下,平滑升级即就是不断开服务器就可以进行升级,最大限度保证数据的完整性。

准备新版本1.21.1的源代码编译包,老操作,解压进入目录

scp /home/westos/Desktop/aaaalinux\ file/docs/lamp/nginx-1.21.1.tar.gz    root@server1:~

 进入解压后的目录,修改相关配置
vim auto/cc/gcc         把debug注释掉

版本号就不取消了,因为要看效果

配置:这里注意这条命令一定和最近版本的nginx安装时的命令一样,保证功能相同
./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx

编译   make

不要make install

 

 老版本的备份与新版本迭代:

保存备份老版本nginx       cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-old

将生成的nginx去覆盖安装目录下的老的nginx cp -f objs/nginx /usr/local/nginx/sbin/nginx

获取当前nginx主进程pid    ps ax|grep nginx 
升级新程序    kill -USR2 21105 这是升级,不是杀进程

查看新程序  ps ax|grep nginx 

正确情况应该是下图,我的一直报错,此时用curl -I localhost,依旧不显示版本号

 

  kill -WINCH 21105,此时新nginx接受全部工作,curl -I localhost显示版本号

 关闭旧nginx的从进程,留下主进程方便后边版本回退

 三.nginx版本回退(平滑升级都没做,这个能做???)

假如新版本性能很拉跨,怎么返回旧版本?版本回退:

还原nginx程序:# cp -f nginx.old nginx

唤醒原进程:# kill -HUP 29636

回收新版本的worker进程: kill -WINCH 29761

关闭新版本主进程: kill -QUIT 29761

版本平滑升级后进程的保留状态如下图:

1、 还原nginx程序:# cp -f nginx.old nginx

2、唤醒原进程:# kill -HUP 21423   此时旧版本未接手工作

 3、回收新版本的worker进程: kill -WINCH 21521   此时旧版本开始接手工作

关闭新版本主进程: kill -9 21521   直接杀掉,用不上了

 

四.nginx限流

Limiting Access to Proxied HTTP Resources | NGINX Plus

参考文档

(1)控制并发数

在nginx目录下建立新目录,准备图片一张,这里图片大小为1.1M

浏览器输入   http://172.25.73.1/download/haha.jpg   

可以看到图片

 ab -c10 -n10 http://172.25.73.1/download/haha.jpg

压力测试,c:10次并发数,n:10次请求 访问该网址

此时查看nginx服务器的日志文件 tail 10 /usr/local/nginx/logs/access.log  返回值均为200,访问成功

 

 编辑nginx配置文件 ,在server模块里新加
limit_conn_zone $binary_remote_addr zone=addr:10m;

server{...

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

//$binary_remote_addr 表示通过remote_addr这个标识来做限制

//zone=addr:10m 表示生成一个大小为10M,名字为addr的内存区域

 

nginx -s reload后,客户端 输入 ab -c10 -n10 http://172.25.73.1/download/haha.jpg

继续查看日志,可以看到只成功了一个,也就是我们限制了只允许一个并发

  (2)控制访问请求数量

配置文件修改如下

 继续客户端的压力测试,依旧是只成功了一次

ab -c1-n10 http://172.25.73.1/download/haha.jpg

 (3)控制服务器单次可处理的请求数

 配置文件添加一句话    burst=5

 

处理服务的时间立刻变长了 ,最后压力测试显示一秒只能处理一个请求

 

 加上nodelay

 

 继续压力测试,无等待,但是有四个任务处理失败

 

 (4)控制传输带宽

配置文件修改如下

 

 压力测试:ab -c1 -n1 http://172.25.73.1/download/haha.jpg

大概耗时五秒

五.nginx浏览器端优化

(1)自动索引功能

打开浏览器某个目录能自动显示内容,类似软件仓库
配置文件修改如下   只加了一句话

修改前后效果查看:

 

 (2)如何设置缓存的有效期

 

一些公司介绍类的内容一般不会发生变化,设置有效期,用户端的缓存到期后更新
配置文件新增一模块:

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

 curl -I 172.25.73.1/download/haha.jpg
查看有效期是一年后到期

(3)中文乱码

中文乱码 charset utf-8; 在全局位置下取消注释,浏览器中文乱码就会消失

 

 六.nginx日志管理

 

(1)nginx日志自动备份脚本

/opt/新建脚本文件,该脚本功能是实现日志的自动备份

#!/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/nginx_log.sh  加入可执行权限

加入定时任务,实现自动备份

(2)goaccess日志可视化

yum provides */ncursesw   查询软件可以这样查询
需要一个安装包,一个依赖包,一个yum源安装的包 
rpm -ivh GeoIP-devel-1.5.0-13.el7.x86_64.rpm
yum  install  -y ncurses-devel

编译goaccess

tar zxf goaccess-1.4.tar.gz

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
此时goaccess会一直占用进程,ctrl+z打入后台
bg查看

 172.25.73.1/report.html

浏览器输入后出现如下页面

客户端主机:ab -c1 -n1000 http://172.25.73.1/download/haha.jpg

日志端实时增加

 七.configure时的两个参数解释

(1)status

配置文件新增status模块

          location /status {
                  stub_status on;  打开监控
                  access_log off;  关闭不必要的日志记录,节省磁盘空间
          }

浏览器搜172.25.73.1/

 

配置文件status模块加入ip限制

                  allow 172.25.73.2;
                  deny all;

 在73主机和server2,分别curl 172.25.73.1/status

可以看到限制ip访问 设置生效了

(2)SSL模块

配置文件,去掉选中行的注释

记住两个都是cert.pem

 

nginx -t   检测语法报错 ,因为缺少cert文件

接下来生成cert文件

/etc/pki/tls/certs 下查看MakeFIle文件

可以看到pem模块有ssl

 

 make cert.pem   输入相关信息,生成 .pem 文件

 mv cert.pem  /usr/local/nginx/conf/

 nginx -t  成功 

 nginx -s reload

这就相当于给了网站一个证书

猜你喜欢

转载自blog.csdn.net/weixin_43803940/article/details/120210009