测试环境
此处使用的yum安装的Nginx路径。
此处域名均在本地配置hosts。
主配置文件
路径:/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
子配置文件
路径:/etc/nginx/conf.d/wangmingqu.conf
server {
listen 80;
server_name wang.wangmingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/;
index index.html index.htm;
}
}
测试数据
#用于测试连接状态
mkdir -p /www/wangmingqu/
echo "王茗渠测试页面" > /www/wangmingqu/index.html
#用于测试随机页面
mkdir -p /www/wangmingqu/random
echo "wang 王茗渠" > /www/wangmingqu/random/wang.html
echo "ming 王茗渠" > /www/wangmingqu/random/ming.html
echo "qu 王茗渠" > /www/wangmingqu/random/qu.html
echo "wangmingqu 王茗渠" > /www/wangmingqu/random/.wangmingqu.html
检查Nginx
nginx -t
systemctl reload nginx
验证Nginx
连接状态模块
模块简介
使用连接状态模块可以通过网页的形式实时的显示用户的连接信息。
主要作用
展示用户和Nginx链接数量信息。
模块名称:http_stub_status_module
配置范围
server标签下的location标签中。
对哪个网站有链接状态查看需求的,就在此网站的server下新建location标签配置“stub_status”。
模块应用
查看模块是否安装
nginx -V 2>&1 | grep stub_status
启动连接状态模块
路径:/etc/nginx/conf.d/wangmingqu.conf
server {
listen 80;
server_name wang.wangmingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/;
index index.html index.htm;
}
location /nginx_status { #定义访问“/nginx_status”才能查看到连接状态
stub_status; #启动连接状态模块
allow all; #允许哪些IP地址可以访问此页面
}
}
检查Nginx
nginx -t
systemctl reload nginx
验证Nginx
-
页面解释
| 关键字 | 解释 |
| — | — |
| Active connections | 活跃的连接数,即多少人连接 |
| server | 总连接数 |
| accepts | 成功连接数 |
| handled requests | 请求的次数 |
| Reading | 读取客户端header的信息数,即请求头 |
| Writing | 返回给客户端的header的信息数,即响应头 |
| Waiting | 等待的请求数,原因是开启了keepalive | -
访问页面
随机主页模块
模块简介
使用随机主页模块,可以实现用户访问页面时给予其指定的随机页面。
主要作用
将主页设置成随机页面,是一种微调更新机制。
模块名称:http_random_index_module
配置范围
server标签下的location标签中。
对哪个网站有随机页面需求的,就在此网站的server下新建location标签配置“random_index”。
模块应用
查看模块是否安装
nginx -V 2>&1 | grep random_index
启动随机页面模块
路径:/etc/nginx/conf.d/random.conf
server {
listen 80;
server_name wang.mingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/random/;
random_index on;
}
}
检查Nginx
nginx -t
systemctl reload nginx
验证Nginx
注意:隐藏文件不会被随机选取。
替换模块
模块简介
主要作用
为网站快速提供替换网页内容服务,临时解决错误页面问题。
模块名称:http_sub_module
配置范围
server标签下的location标签中。
对哪个网站有替换页面需求的,就在此网站的server标签下配置。
模块应用
查看模块是否安装
nginx -V 2>&1 | grep sub_module
启动替换模块
路径:/etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
sub_fileter nginx "my_nginx_test"; #将nginx替换成my_nginx_test
sub_filter_once on; #仅替换一次关键字
#sub_filter_once off; #默认仅替换一次关键字,关闭后全局替换
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
检查Nginx
nginx -t
systemctl reload nginx
验证Nginx
文件压缩模块
模块简介
Nginx文件压缩模块是http_gzip_static_module、with-http_gunzip_module、ngx_http_gzip_module三个模块对请求中的压缩文件进行分析和处理的。
主要作用
使文件传输前,进行压缩,提升传输效率。
模块名称:http_gzip_static_module、http_gunzip_module
配置范围
文件压缩模块可以配置在http、server、location标签中。
http标签中配置,表示全局设置;
server标签中配置,表示网站设置;
location标签中配置,表示某个匹配设置;
模块应用
查看模块是否安装
nginx -V 2>&1 | grep zip
注意:查找中可能缺少ngx_http_gzip_module,但是不影响使用。
测试文件准备
准备一个大于2M的文件效果最好。
启动文件压缩模块
server {
listen 80;
server_name wang.wangmingqu.com;
charset utf-8;
gzip on; #启动gzip模块,默认关闭即gzip off
gzip_comp_level 5; #指定gzip模块的压缩级别,级别有1-9,级别越高压缩比例越大
gzip_http_version 1.1; #指定gzip使用的版本,目前有1.0和1.1两个版本,使用最新的就可以
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #指定可以压缩的类型
gzip_static on; #静态文件压缩启动
location / {
root /www/wangmingqu/;
index index.html index.htm;
}
location /nginx_status {
stub_status;
allow all;
}
}
检查Nginx
nginx -t
systemctl reload nginx
验证Nginx
压缩以后用户接受的文件会有一定比例的压缩。
页面缓存模块
模块简介
主要作用
优化用户访问、加速用户访问页面的服务。
页面缓存可以减少服务器压力。
缺点影响网站的实时性。
模块名称:ngx_http_headers_module
配置范围
文件压缩模块可以配置在http、server、location标签中。
http标签中配置,表示全局设置;
server标签中配置,表示网站设置;
location标签中配置,表示某个匹配设置;
模块应用
查看模块是否安装
模块默认安装
启动页面缓存模块
路径:/etc/nginx/conf.d/wangmingqu.conf
server {
listen 80;
server_name wang.wangmingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/;
index index.html index.htm;
expires 24h; #设置页面缓存24小时,默认情况下是关闭的
#expires off; #默认关闭;
#expires -1; #表示永远过期;
#expires max; #指定值为10年;
}
location /nginx_status {
stub_status;
allow all;
}
}
检查Nginx
nginx -t
systemctl reload nginx
防盗链模块
模块简介
主要作用
防止其他网站盗用本站链接。
模块名称:ngx_http_referer_module
配置范围
可以配置在server、location标签。
模块应用
启动防盗链模块
server {
listen 80;
server_name wang.mingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/;
index index.html index.htm;
valid_referes none blocked wang.mingqu.com server_name ming.wangmingqu.com; #禁止引用链接,锁定wang.mingqu.com,允许ming.wangmingqu.com可以引用链接
if ($invalid_referer){ #当有人访问时
return 403; #返回403
}
}
}
- 生成环境下配置
server {
listen 80;
server_name wang.mingqu.com;
charset utf-8;
location / {
root /www/wangmingqu/;
index index.html index.htm;
}
location ~*\.(gif|jpg|png|bmp)${
root /www/wangmingqu/;
valid_referes none blockd *.qfcloud.top server_names ~tianyun~\.google\.~\.baidu\;
if ($invalid_referer){
return 403;
}
}
}
检查Nginx
nginx -t
systemctl reload nginx
模块安装
如果安装好的Nginx中缺少相关模块,可以采用平滑升级的方式解决。
平滑升级原理
- 在不停掉老进程的情况下,启动新进程。
- 老进程负责处理仍然没有处理完的请求,但不接受处理新请求。
- 新进程接受新请求。
- 老进程处理完所有请求,关闭所有链接后停止。
平滑升级的信号
主进程支持的信号
- TERM(或INT):立即退出;
- QUIT:等待请求处理结束后再退出;
- KILL:强制终止进程;
- HUP:重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程;
- USR1:重新打开日志文件;
- USR2:启动新的主进程,实现热升级;
- WINCH:逐步关闭工作进程;
工作进程支持的信号
- TERM(或INT):立即退出;
- QUIT:等待请求处理结束后再退出;
- USR1:重新打开日志文件;
平滑升级
平滑升级–Nginx添加模块
在已经安装Nginx的基础上添加随机主页模块。
- 检查随机主页模块是否安装
/usr/local/nginx/sbin/nginx -V 2>&1 | grep random_index
- 备份原Nginx二进制文件及配置
tar -cvf /usr/local/nginx_old_1.24.0.tgz /usr/local/nginx
- 添加随机主页模块
#进入Nginx解压目录
cd /usr/local/nginx-1.24.0/
#添加模块(添加是需要复制原有模块)
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module \
--with-http_sub_module \
--with-http_random_index_module
- 进程make操作
注意:参照编译安装Nginx的方法安装,但是只需要执行make,千万不要make install。
make
- 复制新的Nginx二进制文件,进入新的Nginx安装包
cp /usr/local/nginx-1.24.0/objs/nginx /usr/local/nginx/sbin/
- 检查新的Nginx是否正常
/usr/local/nginx/sbin/nginx -t
- 给Nginx发送平滑升级信号
注意:此处的nginx.pid文件路径
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
查看nginx.pid,发现有一个新的nginx.pid.oldbin
ll /usr/local/nginx/logs/
-rw-r--r-- 1 root root 5 Sep 25 13:32 nginx.pid
-rw-r--r-- 1 root root 5 Sep 25 13:27 nginx.pid.oldbin
- 关闭旧Nginx进程
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`
- 结束工作进程,完成此次平滑升级
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
- 查看模块是否添加成功
/usr/local/nginx/sbin/nginx -V 2>&1 | grep random_index
平滑升级–Nginx版本升级
将nginx 1.24.0升级到1.25.3
- 备份原Nginx二进制文件及配置
tar -cvf /usr/local/nginx_old_1.24.0.tgz /usr/local/nginx
- 查看原Nginx安装的模块
/usr/local/nginx/sbin/nginx -V
- 下载Nginx 1.25.3的安装包
wget https://nginx.org/download/nginx-1.25.3.tar.gz
- 解压并编译Nginx 1.25.3
注意:编译新版本时一定要使用原有的WEB模块,否则将影响Nginx应用。
tar -zxvf nginx-1.25.3.tar.gz -C /usr/local/
cd /usr/local/nginx-1.25.3/
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module \
--with-http_sub_module \
--with-http_random_index_module
- 进行make操作
注意:参照编译安装Nginx的方法安装,但是只需要执行make,千万不要make install。
make
- 拷贝Nginx 1.25.3版本的二进制文件到1.24.0版本的进程目录
cp /usr/local/nginx-1.25.3/objs/nginx /usr/local/nginx/sbin/
- 启动新的主进程,实现热升级
kill -USER2 `cat /usr/local/nginx/logs/nginx.pid`
- 查看Nginx升级后的版本及WEB模块
/usr/local/nginx/sbin/nginx -V