实验环境搭建:
- 一台主机名是lnmp 的虚拟机,ip 是172.25.3.199/24, 源码编译过nginx。编译后Nginx 的路径为
/usr/local/lnmp/nginx
- 宿主机ip 为 172.25.3.250/24
nginx访问控制及状态监控
修改nginx 的配置文件,并重启服务。
测试:
- 对stub_status 模块的测试:
- 对访问控制的测试
ngixn 开启https访问
- 修改nginx 配置文件
- 生成ssl证书, 并将证书移动到nginx 的配置目录
/usr/local/lnmp/nginx/conf
移动ssl 证书,并且重新加载服务
测试:
nginx 并发优化
Linux 下高并发socket最大连接数所受到的各种限制
- 通过修改用户进程可打开文件数限制
方法:
/etc/security/limits.conf
文件中加入nginx - nofile 65536
表示nginx用户能打开的文件最大文件数是65535,受到linux 系统内核的控制,可以通过sysctl -a | grep file
查看,
- 其他的一些优化
nginx 的平滑升级
目的: 在不重启nginx 服务的前提下,完成nginx版本的更新.
当前版本是1.19.1
步骤:
- 在官网安装最新的源码包。nginx源码下载官网链接
tar zxf nginx-1.19.4.tar.gz
解压源码安装包到当前目录,进入到安装包目录,执行在安装之前版本一样的环境检测,以及当时选择添加的模块, 这是我之前源码安装添加的信息
./configure --prefix=/usr/local/lnmp/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module
环境检测成功之后开始make
编译, 之后就不用make install
进行安装了
cd /usr/local/lnmp/nginx/sbin
下备份源程序cp nginx nginx.old
进入到新版本解压目录下objs目录,拷贝新程序
- 获取nginx 主进程pid
ps ax | grep nginx
,
然后执行kill -USR2 nginx的主进程pid
关闭原worker进程但保留主进程: 为了回退
如果不想平滑的进行版本回退,可以直接kill -QUIT 10383
关闭原来的主进程
访问测试:
版本回退的方式:
1). 还原nginx 程序
2). 唤醒原进程kill -HUP 10383
3). 回收新版本的worker进程kill -WINCH 10465
4). 关闭新版本主进程kill -QUIT 10465
nginx 限流
nginx可以做到具体访问目录的限流,所以可以在nginx的默认发布目录中,建立一个download目录,并放入一些文件用于测试
- 自动索引:
参数:autoindex on;
测试: - 中文乱码:
通过修改编码格式:charset utf-8
再次访问测试:
- 控制单ip并发连接数
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
//$binary_remote_addr 表示通过remote_addr这个标识来做限制
//zone=addr:10m 表示生成一个大小为10M,名字为one的内存区域
...
server {
location /download/ {
limit_conn addr 1; #限制并发数
limit_rate 50k; #限制带宽
}
}
- 限制单位时间内的请求数目,以及速度限制
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
//rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次
...
server {
location / {
limit_req zone=one;
# limit_req zone=one burst=5
# limit_req zone=one burst=5 nodelay;
}
}
nginx 日志轮询
方式: 建立一个脚本文件,通过crontab定时任务定时执行这个脚本,来实现对日志的轮询。(为了安全,日志目录不需要给你nginx用户访问权限)
脚本内容:
#!/bin/bash
cd /usr/local/lnmp/nginx/logs && mv access.log access.$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/lnmp/nginx/logs/nginx.pid` ## 重新生成一个新的日志文件
Nginx expire缓存配置
作用:缓存可以降低网站带宽,加速用户访问
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root html;
}
测试:
效果:
nginx 关于目录一些配置
- 禁用不必要的日志记录,以节省磁盘IO的消耗
location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
access_log off;
}
- 站点目录和文件的限制
location ~ ^/images/.*\.(sh|php)$ {
deny all;
}
nginx 重定向
-
通过修改nginx 的配置文件使的客户端不能通过ip访问服务端,只能通过域名访问
-
需要修改的两个地方
添加一个虚拟主机
测试: 在宿主机上做好地址解析
也可以通过重定向的方式,使当客户端ip访问服务器,自动跳转到域名访问
测试:
nginx 防盗链
location ~ \.(jpg|png)$ {
valid_referers none blocked www.westos.org;
if ($invalid_referer) {
return 403;
#rewrite ^/ http://www2.westos.org/daolian.jpg;
}
}
goaccess 日志可视化
软件包: 链接: goaccess1.4源码包 提取码: 5kdu
软件依赖性: 链接: 软件依赖性 提取码: 121n
步骤:
- tar -xzvf goaccess-1.4.tar.gz
- cd goaccess-1.4/
- ./configure --enable-utf8 --enable-geoip=legacy
- make && make install
使用方法:
goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
测试效果: