IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> nginx平滑升级,算法扩展,限流,重定向,防盗链 -> 正文阅读

[PHP知识库]nginx平滑升级,算法扩展,限流,重定向,防盗链

一.平滑升级

1.版本升级

当服务器在运行时,需要升级的情况下,平滑升级即就是不断开服务器就可以进行升级,最大限度保证数据的完整性。
在server1主机中,修改配置文件,设定工作进程数为2,安装一个比当前版本高的nginx,重新编译(configure–makefile–make三步曲)。
下载nginx新版本软件,正常执行./configure和make但不要执行make install。
在server1中:

cd /usr/local/nginx/conf/
vim nginx.conf
///
user  nginx;
worker_processes  2;
worker_cpu_affinity 01 10;
///
nginx -s reload
cd
 wget http://nginx.org/download/nginx-1.21.1.tar.gz
tar zxf nginx-1.21.1.tar.gz
cd nginx-1.21.1/
ls
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio

在这里插入图片描述

make
cd objs/
ls-->nginx
cd /usr/local/nginx/sbin/	##备份原程序
ls-->nginx
cp nginx nginx.old
cd
cd nginx-1.21.1/		##拷贝新程序
ls
cd objs/
alias
\cp -f nginx /usr/local/nginx/sbin/
ps ax | grep nginx		##获取当前nginx主进程pid
kill -USR2 22602
ps ax | grep nginx
curl localhost -I
kill -WINCH 22602		##关闭worker进程但保留主进程:为了回退
ps ax | grep nginx
curl localhost -I

在这里插入图片描述因为有时候我们会发现新版本并没有旧版本用着顺手,那么关闭worker进程但保留主进程就是为了回退,即就是关闭工作端worker,保留master。


2. 版本回退
回退的过程是相反的,先还原nginx程序,唤醒原进程,回收新版本,并且关闭。

cd /usr/local/nginx/sbin/
ls
\cp -f nginx.old nginx		##还原nginx程序
kill -HUP 22602				##唤醒原进程
ps ax | grep nginx
kill -WINCH 1040			##回收新版本的worker进程
kill -QUIT 1040				##关闭新版本主进程
ps ax | grep nginx
curl localhost -I

在这里插入图片描述

二.算法扩展

有时nginx并不支持一些算法,当我们需要使用时,则需要进行扩展。
比如sticky模块,nginx本身不支持,当在配置文件中写入并调用时,会报错。

  cd /usr/local/nginc/conf
vim nginx.conf
///
http {
        upstream westos {
        sticky;
        server 172.25.21.2:80 weight=2;
///
nginx -t 	##失败,因为sticky不支持,需进行扩展

在这里插入图片描述
所以我们需要对nginx进行扩展,先将nginx.conf配置文件中的sticky注释掉,并停止服务。
在这里插入图片描述
下载sticky软件包,所以需要在真机对其进行火墙策略的设定。

iptables -t nat -I POSTROUTING -s 172.25.21.0/24 -j MASQUERADE 	##火墙策略(真机)
cd
lftp 172.25.254.250
> ls
> cd pub/docs/lamp/
> get nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip 
> exit
ls

此时需要对软件包解压,方便起见,安装解压软件并解压sticky软件包。在这里插入图片描述在这里插入图片描述
安装好之后切入nginx目录,清理缓存,执行configure->make。

cd nginx-1.20.1/
make clean							##清理缓存
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

在这里插入图片描述将nginx复制到sbin并覆盖,切入配置目录,编辑配置文件,取消对sticky的注释并检测语法,但是此时sticky模块会与backup冲突,所以检测失败。

ls
cd objs/
\cp -f nginx /usr/local/nginx/sbin/	##复制覆盖文件,\表示告诉shell不要去查alias,直接执行原本的cp 
vim nginx.conf
nginx -t

在这里插入图片描述
需要将之前的设定注释或删掉,重新检测语法,并开启服务。

vim nginx.conf
///
http {
  	  upstream westos {
  	  sticky;
  	  server 172.25.21.2:80;
  	  server 172.25.21.3:80;
  	  #server localhost:80 backup;
///
nginx -t
nginx

在这里插入图片描述

三.nginx 限流

先建立一个目录用于存放实验素材。

cd html/
mkdir download
cd download/
lftp 172.25.254.250
> ls
> cd pub/docs/
> get vim.jpg
> exit
du -h vim.jpg 
1、限制并发连接数

在真机执行压力测试命令,设定并发用户数为10,请求总数为10,失败请求4个。

在真机执行:

ab -c10 -n 10 http://172.25.21.1/download/vim.jpg	##并发用户数为10,请求总数为10,失败4个

在这里插入图片描述在server1主机中设定访问下载链接时,受到控制,重启服务。

cd /usr/local/nginx/conf/
vim nginx.conf
///
	#gzip  on;

    limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
...
    location /download/ {
            limit_conn addr 1;
    }
///
nginx -s reload

在这里插入图片描述重新在真机执行压力测试,因为被限流,所以大部分请求被拒绝。

ab -c10 -n 10 http://172.25.21.1/download/vim.jpg	##大部分被拒绝

在这里插入图片描述

2.限制每秒请求数

在真机执行压力测试,设定并发用户数为1,请求总数为10,则请求全部通过。

ab -c1 -n 10 http://172.25.21.1/download/vim.jpg	##全部通过

在这里插入图片描述在server1主机中编辑配置文件,设定每秒只通过1个请求,重启服务。

server1

vim nginx.conf
///
    #gzip  on;

    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 	##设定每秒只能通过一个请求

    location /download/ {
            limit_conn addr 1;
            limit_req zone=one;
    }
///
nginx -s reload

重新在真机执行压力测试,因为每秒只通过一个,则其余9个被拒绝。

在这里插入图片描述
在配置文件中设定一次访问5个,超过的排队等待,因为上一个实验设定每秒通过1个请求,则访问2次,差不多10秒。

vim nginx.conf
///
      location /download/ {
            limit_conn addr 1;
            limit_req zone=one burst=5;	
///
nginx -s reload

在真机中,执行压力测试,访问时长大约9秒。

ab -c1 -n 10 http://172.25.21.1/download/vim.jpg	 # 在真实情况下,偏差在几台主机的情况是可以忽略不计的
3.无延迟

编辑配置文件,设定请求无延迟,在上一个实验的情况下,只能执行1次,即5个请求,重启服务。

vim nginx.conf
///
        location /download/ {
 	           limit_conn addr 1;
             limit_req zone=one burst=5 nodelay;
///
nginx -s reload

在真机中,执行压力测试,只能通过5个,其余被拒绝。
ab -c1 -n 10 http://172.25.21.1/download/vim.jpg
在这里插入图片描述

4.限制带宽

在配置文件中设定带宽50k,重启服务,注释掉上面实验的参数,否则会很慢。

vim nginx.conf
///
    location /download/ {
            limit_conn addr 1;
            #limit_req zone=one burst=5 nodelay;	##注释掉这条,不然会很慢
            limit_rate 50k;
///
nginx -s reload

在真机中执行压力测试,文件大小为444k,访问10次,限制带宽50k,大概需要80s。

ab -c1 -n 10 http://172.25.21.1/download/vim.jpg

在这里插入图片描述

四.nginx的配置管理

1、自动索引

可以在浏览器访问,下载软件更方便。
在配置文件中设定自动索引,注意注释上文参数设定,重启服务

vim nginx.conf
///
        location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                #limit_rate 50k;		##注释
		autoindex.on;
///	
nginx -s reload

在浏览器中访问,可以打开server1主机的指定目录。

在浏览器访问
172.25.21.1/download
在这里插入图片描述

2.nginx expire 缓存配置

缓存可以降低网站带宽,加速用户访问。
编辑配置文件,设定对图片等进行缓存,缓存时间为1年,在此期间访问就会减少访问时间。

vim nginx.conf
///
  	  location /download/ {
            limit_conn addr 1;
            #limit_req zone=one burst=5 nodelay;
            #limit_rate 50k;
            autoindex on;
      }	##在此位置下方进行设定

       location ~ .*\.(gif|jpg|png)$ {		##对图片等进行缓存
            expires 365d;
            root html;
        }
///
nginx -s reload

在真机中,使用curl命令访问素材文件,可以看到缓存至2022年。

curl -I 172.25.21.1/download/vim.jpg
///Expires: Thu, 01 Sep 2022 04:53:01 GMT

在这里插入图片描述

3.日志轮询和禁用

编写一个脚本,设定打开nginx时会生成日志文件,命名格式为前一天。

cd /opt/	##第三方软件安装位置
vim nginx.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 nginx.sh
./nginx.sh
cd /usr/local/nginx/logs/
ls --> access_2021-08-31.log	##生成日志

禁用不必要的日志记录,以节省磁盘IO的消耗

在配置文件中设定禁用浏览器访问指定目录时生成日志文件。

cd ..(nginx)
cd conf/
vim nginx.conf
///
    location ~ .*\.(gif|jpg|png)$ {
            expires 365d;
            root html;
    }		##在这个位置的下面加入设定

    location /status {
            stub_status on;
            access_log off;
    }
///
nginx -t
nginx -s reload

此时在浏览器中访问该目录,在日志目录中不会生成日志记录。

在浏览器访问172.25.21.1/status ##刷新会增加访问次数,但不会有日志生成

cd ../logs
ls
cat access.log		##为空

但当在真机中使用curl命令访问该目录时,会产生日志文件。

###真机
curl -I 172.25.21.1/status

###server1
cat access.log ##会产生日志文件

在这里插入图片描述

4.站点目录和文件的限制

在配置文件中设定指定目录只能本机访问,拒绝其他所有请求。

cd conf/
vim nginx.conf
///
        location /status {
            stub_status on;
            access_log off;
            allow 127.0.0.1;
            deny all;
    }
///
nginx -t
nginx -s reload

当在真机访问status目录时,拒绝访问,报错403,资源不可用,服务器理解客户的请求,但拒绝处理。
curl 172.25.21.1/status ##拒绝访问
在这里插入图片描述
当在server1本机访问时,允许访问。

curl localhost/status
在这里插入图片描述

5.中文乱码问题

nginx默认不支持中文字符,在浏览器访问时,中文会变成乱码。
在nginx发布文件中加入一行中文,在浏览器中试访问,为乱码。

cd ..(nginx)
cd html/
vim index.html
///
helloworld
欢迎
///

在浏览器访问时中文是乱码/302b714ea4d54ee192fd84bba50f2ceb.png)编辑配置文件,设定nginx支持中文字符,并重启服务。
在这里插入图片描述

vim nginx.conf
///
    server {
        listen       80;
        server_name  localhost;

        charset utf-8;
///
nginx -s reload

此时在浏览器中访问172.25.21.1,可以看到中文正常显示。
在这里插入图片描述

五.nginx 重定向

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

为了防止域名恶意解析到服务器IP,编辑配置文件,设定将所有访问请求重定向至指定域名,重启服务。此时使用curl命令访问本机,会显示访问地址为http://www.westos.org。

vim /usr/local/nginx/conf/nginx.conf
///
server {

    listen       80;
    server_name  localhost;
    rewrite ^(.*) http://www.westos.org permanent;
///
    nginx -s reload
	curl -I localhost	##Location: http://www.westos.org

在这里插入图片描述当在浏览器中访问server1主机时,写入172.25.21.1回车后会自动跳转至www.westos.org。
在这里插入图片描述

2、端口重定向

编辑配置文件,将80端口定向到443端口。

vim nginx.conf
///
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;
    }
}
server {
    listen 80;
    server_name www.westos.org;

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

生成证书,并移动到配置目录中,检测语法,重启服务。此时检测端口。

cd /etc/pki/tls/certs
make cert.pem		##生成证书
mv cert.pem /usr/local/nginx/conf
nginx -t
nginx -s reload
netstat -antlup | grep 443

在这里插入图片描述
在这里插入图片描述在浏览器中访问server1主机,可以看到https即代表443端口重定向成功。

172.25.21.1/index.html—>https://172.25.21.1/index.html

在真机中使用curl命令,可以看到加密端口已打开
在这里插入图片描述curl -I www.westos.org/
curl -I www.westos.org/index.html

3.虚拟主机重定向

1)www.westos.org 重定向bbs.westos.org

cd ..(nginx)
cd html
mkdir bbs
mv bbs/ /
vim nginx.conf
///
server {    
        listen 80;
        server_name www.westos.org;
    
       #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
	    rewrite ^/bbs$ http://bbs.westos.org permanent;
        rewrite ^/(.*)$ http://bbs.westos.org/$1 permanent;
 
	    #location / {
      #       proxy_pass http://westos;
       #       }
      }
server {
      listen 80;
 	   server_name bbs.westos.org;

   	 location / {
            root /bbs;
   	 index index.html;
            }
    }
///
nginx -s reload

在真机使用curl命令可以查看。

curl -I www.westos.org/bbs/bbs.html

在这里插入图片描述浏览器输入www.westos.org会自动跳转为bbs.westos.org

在这里插入图片描述2)bbs.westos.org 重定向www.westos.org

vim nginx.conf
///
server {    
       listen 80;
        server_name www.westos.org;
    
       #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
  	  #rewrite ^/bbs$ http://bbs.westos.org permanent;
       #rewrite ^/(.*)$ http://bbs.westos.org/$1 permanent;
 
	if ($host = "bbs.westos.org") {
		rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
      }
#server {		##全部注释
#        listen 80;
#        server_name bbs.westos.org;
#
#        location / {
#                root /bbs;
#        index index.html;
#                }
#        }
///
nginx -s reload

在真机先做地址解析,使用curl命令可以查看。

vim /etc/hosts
///
172.25.21.1     server1         www.westos.org reg.westos.org bbs.westos.org
///
curl -I bbs.westos.org

在这里插入图片描述
在浏览器中输入bbs.westos.org会自动跳转至www.westos.org/bbs。
在这里插入图片描述

六.防盗链

防盗链目的是为了防止图片被恶意盗取:

在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf
///
server {

    listen       80;
    server_name  localhost;

    location ~ \.(jpg|png|jpeg)$ {
            valid_referers none blocked www.westos.org;
            if ($invalid_referer) {
                    return 403;
                 #   rewrite ^/ http://172.25.1.2/daolian.jpeg;
                   }
     }
///
nginx -s reload

curl -I www.westos.org/download/vim.jpg

在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:17:00  更:2021-09-04 17:18:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 19:41:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计