企业化运维(2)_nginx

news2024/11/25 6:42:53

###1.nginx源码安装部署###

###2.平滑升级### 

(1)版本升级

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

下载nginx新版本软件,正常执行./configure和make但不要执行make install。

备份原程序:

cd /usr/local/lnmp/nginx/sbin
cp nginx nginx.old 

 拷贝新程序:

cd nginx-1.23.1/objs
cp -f nginx /usr/local/lnmp/nginx/sbin

 获取当前nginx主进程pid,即master进程:

ps ax|grep nginx
29636 ? Ss 0:00 nginx: master process nginx
29637 ? S 0:00 nginx: worker process
29638 ? S 0:00 nginx: worker process
升级新程序,开启新版本:
kill -USR2 29636
ps ax|grep nginx
29636 ? Ss 0:00 nginx: master process nginx
29637 ? S 0:00 nginx: worker process
29638 ? S 0:00 nginx: worker process
29761 ? S 0:00 nginx: master process nginx
29762 ? S 0:00 nginx: worker process
29763 ? S 0:00 nginx: worker process

关闭原worker进程但保留主进程master,为了回退

kill -WINCH 29636 
ps ax|grep nginx 
29636 ? Ss 0:00 nginx: master process nginx 
29761 ? S 0:00 nginx: master process nginx 
29762 ? S 0:00 nginx: worker process 
29763 ? S 0:00 nginx: worker process

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

(2)版本回退

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

还原nginx程序:
# cp -f nginx.old nginx 
唤醒原进程:
# kill -HUP 29636 
回收新版本的worker进程: 
kill -WINCH 29761 
关闭新版本主进程: 
kill -QUIT 29761 

###3.负载均衡+反向代理### 

(1)默认轮询

①修改nginx服务启动用户

[root@server1 conf]# useradd -M -d /usr/local/nginx/ -s /sbin/nologin nginx
[root@server1 ~]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
user nginx;
...

[root@server1 conf]# nginx  -s reload
[root@server1 conf]# ps axu |grep nginx
root      19100  0.0  0.0  46020  2000 ?        Ss   16:13   0:00 nginx: master process nginx
nginx     19279  0.0  0.1  46452  2036 ?        S    17:24   0:00 nginx: worker process

②nginx进程与cpu核心绑定

推荐设置:nginx进程数量与cpu和核心数一致

[root@server1 conf]# vim nginx.conf

user nginx;

worker_processes 2;

worker_cpu_affinity 01 10;   ##如果上边是3,则此处为001 010 100

...



[root@server1 conf]# nginx -s reload

[root@server1 conf]# ps axu |grep nginx

root 19100 0.0 0.0 46020 2000 ? Ss 16:13 0:00 nginx: master process nginx

nginx 19279 0.0 0.1 46452 2036 ? S 17:24 0:00 nginx: worker process

nginx 19280 0.0 0.1 46452 2036 ? S 17:24 0:00 nginx: worker process

③修改nginx并发连接数 

[root@server1 conf]# vim nginx.conf
...
events {
    worker_connections  65535;
}

修改系统限制
[root@server1 conf]# vim /etc/security/limits.conf
nginx - nofile  65535

内核参数是根据本机物理资源自动配置的,一般不需要修改
[root@server1 conf]# sysctl fs.file-max
fs.file-max = 197384


④负载均衡设置 

文档:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

[root@server1 conf]# vim nginx.conf
...
http {
    upstream westos {
        server 192.168.56.12;
        server 192.168.56.13:8080;
        server 192.168.56.11:8080 backup;
    }
...
    server {
        listen       80;
        server_name  localhost;

        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://westos;
        }
...

[root@server1 conf]# nginx  -s reload

⑤nginx对后端自带健康检测(backup)

(2)改变权重,默认为1

server1主机中修改配置文件,增加server2主机的权重,检测语法,重启服务。

###server1------改变权重
cd /usr/local/nginx/conf/
vim nginx.conf
///
http {
        upstream westos {
        server 172.25.24.2:80 weight=2;			##增加权重
///
nginx -t
nginx -s reload

 

(3)ip_hash

ip_hash表示来自同一客户端的请求,将会发往同一个后端服务器

ip_hash对后端做健康检测,如果server3出问题,则调度server2
如果后端全挂,则http报错502(500表示服务器错误)
在server1主机中修改配置文件,在负载均衡模块中添加ip_hash,检测语法,重启服务。

ip_hash算法不支持backup

vim nginx.conf
///
http {
        upstream westos {
        ip_hash;
///
nginx -t
nginx -s reload

 

(4)基于cookie

基于cookie能够区分客户端来源,测试时只能在浏览器中进行

先停止nginx服务
[root@server1 conf]# nginx  -s stop

[root@server1 ~]# yum install -y unzip
[root@server1 ~]# unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

[root@server1 ~]# cd nginx-1.22.1/
[root@server1 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module  --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
[root@server1 nginx-1.22.1]# make

[root@server1 nginx-1.22.1]# \cp -f objs/nginx  /usr/local/nginx/sbin/nginx

[root@server1 objs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
...
 upstream westos {
        #ip_hash;
        sticky;
        server 192.168.56.12 weight=2;
        server 192.168.56.13:8080;
        #server 192.168.56.11:8080 backup;
    }

检测语法
[root@server1 conf]# nginx  -t			
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动服务
[root@server1 conf]# nginx

使用浏览器测试 按F12可以查看cookie值

###4.安全控制###

(1)基于域名的虚拟主机

[root@server1 nginx]# mkdir /www1/
[root@server1 nginx]# echo web1 > /www1/index.html

[root@server1 nginx]# vim conf/nginx.conf
http {
...
server {
        listen 80;
        server_name www1.westos.org;

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

[root@server1 nginx]# nginx  -s reload

测试
[root@server4 ~]# vim /etc/hosts
192.168.56.11   server1 www1.westos.org

[root@server4 ~]# curl  www1.westos.org
web1

(2)限制并发连接数

建立目录用于存放实验素材
[root@server1 nginx]# cd html/
[root@server1 html]# mkdir download
[root@server1 ~]# cp vim.jpg /usr/local/nginx/html/download/

[root@server1 nginx]# vim conf/nginx.conf
http {
...
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
...
location / {
            root   html;
            index  index.html index.htm;
            #proxy_pass http://westos;
        }

		location /download/ {
            	 limit_conn addr 1;
        	}
	}
}
[root@server1 nginx]# nginx  -s reload

必须单线程下载,超出的并发连接会失败
测试:
[root@server4 ~]# ab -c 10 -n 10 http://192.168.56.11/download/vim.jpg
查看日志
[root@server1 nginx]# cat logs/access.log

(3)限制请求数

[root@server1 nginx]# vim conf/nginx.conf
http {
...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
		location /download/ {
            	 limit_conn addr 1;
		limit_req zone=one burst=5 nodelay;
        	}
	}
}
[root@server1 nginx]# nginx  -s reload

测试
[root@server4 ~]# ab -c 1 -n 10 http://192.168.56.11/download/vim.jpg
查看日志
[root@server1 ~]# cat /usr/local/nginx/logs/access.log

(4)限制速率

[root@server1 nginx]# vim conf/nginx.conf
http {
...
server {
		location /download/ {
            	 limit_conn addr 1;
		limit_rate 100k;
        	}
	}
}
[root@server1 nginx]# nginx  -s reload

测试
[root@server4 ~]# ab -c 1 -n 5 http://192.168.56.11/download/vim.jpg
查看日志
[root@server1 ~]# cat /usr/local/nginx/logs/access.log


###5.nginx基础配置###

(1)https配置

生成https证书
[root@server1 conf]# cd /etc/pki/tls/certs
[root@server1 certs]# make cert.pem
[root@server1 certs]# mv cert.pem  /usr/local/nginx/conf/
修改配置文件
[root@server1 conf]# vim nginx.conf
 # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  www1.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   /www1;
            index  index.html index.htm;
        }
    }

测试
[root@server1 conf]# nginx  -t
[root@server1 conf]# nginx  -s reload
[root@server4 ~]# curl  -k https://www1.westos.org
web1

(2)自动索引

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

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

测试:在浏览器访问
http://192.168.76.11/download

(3)nginx empire缓存配置

nginx默认可以做缓存服务器。缓存可以降低网站带宽,加速用户访问。
编辑配置文件,设定对图片等进行缓存,缓存时间为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 -I 192.168.76.11/download/vim.jpg
///Expires: Thu, 13 Jun 2025 04:53:01 GMT

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

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

在浏览器访问
192.168.76.11/status	##刷新会增加访问次数,但不会有日志生成
cd ../logs
ls
cat access.log		##为空

(5)站点限制

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

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

测试:
真机浏览器中访问http://192.168.76.11/status
##403报错拒绝访问

server4测试机curl  192.168.76.11/status	
##403报错拒绝访问

(6)中文乱码

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

cd ..(nginx)
cd html/
vim index.html
///
你好
///
#在浏览器访问时中文是乱码

编辑配置文件,设定nginx支持中文字符,并重启服务。

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

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

(7)日志轮询

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

[root@server1 ~]# vim /opt/nginx_log.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`

给脚本执行权限,执行脚本,切入到日志目录,产生日志。 

[root@server1 ~]# chmod +x /opt/nginx_log.sh
[root@server1 ~]#  /opt/nginx_log.sh

[root@server1 ~]# cd /usr/local/nginx/logs/
[root@server1 logs]# ls
access_2023-02-21.log  ##生成日志

再加入crontab定时任务

crontab -e
00 00 * * * /opt/nginx_log.sh

crontab -l  执行

(8)重定向

①端口重定向

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

[root@server1 conf]# vim nginx.conf
...
server {
        listen 80;
        server_name www1.westos.org;
        rewrite ^/(.*)$ https://www1.westos.org/$1 permanent;

        location / {
                root /www1;
                index index.html;
        }
}
...
[root@server1 conf]# nginx -s reload

②虚拟主机重定向

www1.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;		
        ##^/bbs$表示匹配以/开头,bbs结尾,,比如www.westos.org/bbs,如果后加其他url,则不能重定向
        rewrite ^/(.*)$ http://bbs.westos.org/$1 permanent;
        ##^/(.*)$表示匹配以/开头,$结尾,后面可以加url,比如www.westos.org/bbs/bbs.html
        }

server {
        listen 80;
        server_name bbs.westos.org;

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

测试:用curl命令查看
curl -I www1.westos.org/bbs/
curl -I www1.westos.org/bbs/bbs.html

(9)防盗链

配置server2上的apache服务,server2中编辑一发布文件,写入访问该文件时,盗取server1主机中的某一图片

[root@server2 ~]# cd /var/www/html/
[root@server2 html]# vim index.html
<html>
<body>
<img src="http://www1.westos.org/vim.jpg"/>
</body>
</html>

配置nginx网页防盗链

[root@server1 conf]# vim nginx.conf
...
location ~ \.(jpg|png)$ {
                root /www1;
                valid_referers none blocked www1.westos.org;
                if ($invalid_referer) {
                        #return 403;
                        rewrite ^/ http://bbs.westos.org/daolian.jpg;
                }
        }
[root@server1 conf]# nginx -s reload

测试:
要显示图片,要在测试机server4中安装图形
192.168.76.11/index.html-->指定图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1827754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pandas驯化-03】Pandas中常用统计函数mean、count、std、info使用

【Pandas驯化-03】Pandas中常用统计函数mean、count、std、info使用 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微…

机器学习周报第46周

目录 摘要Abstract一、文献阅读1.1 摘要1.2 研究背景1.3 论文方法1.4 模块分析1.5 网络规格1.6 高效的端到端对象检测1.7 mobile former模块代码 目录 摘要Abstract一、文献阅读1.1 摘要1.2 研究背景1.3 论文方法1.4 模块分析1.5 网络规格1.6 高效的端到端对象检测1.7 mobile f…

可以用来制作硬模空心耳机壳的胶粘剂有哪些种类?

可以用来制作硬模空心耳机壳的胶粘剂有哪些种类&#xff1f; 制作耳机壳的胶粘剂有很多种类&#xff0c;常见的有环氧树脂胶水、UV树脂胶、快干胶、热熔胶等。 这些胶粘剂都有不同的特点和适用场景&#xff0c;可以根据自己的需求选择合适的类型。 例如&#xff1a; 环氧树脂…

九、BGP路由属性和选路

目录 一、属性分类 1.1、公认属性 1.2、可选属性 二、选路原则 0、丢弃不可达 取值越大越优 1、Preferred-Value 2、Local_Preference 取值越小越优 3、路由优先级 4、AS_Path 5、Origin 6、MED 7、路由来源 8、Next_Hop的IGP度量值 BGP路由等价负载分担&#…

springboot景区寄存管理系统(源码+sql+论文报告)

针对传统人工行李寄存效率低和安全性不足等问题&#xff0c;设计并实现了一种由网页控制器组成的智能行李寄存系统。首先能够实现行李的寄存管理和行李柜管理以及记录查询和通知公告以及管理员等灵活控制菜单显示权限。经过研究和测试结果显示&#xff0c;该行李寄存系统实现了…

【什么!Grok记录被打破了】坏消息不是Meta的 llama3 400,好消息是Nvidia发布的Nemotron-4 340B且支持开源

Nvidia 发布了开创性的开放模型系列 “Nemotron-4 340B”&#xff0c;再次巩固了其作为人工智能创新领域无可争议的领导者的地位。这一发展标志着人工智能行业的一个重要里程碑&#xff0c;因为它使各行各业的企业能够创建功能强大的特定领域 LLM&#xff0c;而无需大量昂贵的真…

QT系列教程(11) TextEdit实现Qt 文本高亮

文本高亮 对于textedit里录入的部分单词我们可以实现高亮&#xff0c;实现高亮主要依赖于QSyntaxHighlighter。 我们先创建一个Qt Application类&#xff0c;类名MainWindow, 然后新增一个C类&#xff0c;类名为MySyntaxHighlighter。 #ifndef MYSYNTAXHIGHLIGHTER_H #define …

深入分析 Android BroadcastReceiver (三)

文章目录 深入分析 Android BroadcastReceiver (三)1. 广播消息的优缺点及使用场景1.1 优点1.2 缺点 2. 广播的使用场景及代码示例2.1. 系统广播示例&#xff1a;监听网络状态变化 2.2. 自定义广播示例&#xff1a;发送自定义广播 2.3. 有序广播示例&#xff1a;有序广播 2.4. …

yml配置文件快速上手

yml配置文件快速上手 springboot中&#xff0c;有三种文件可以作为配置文件 xml文件(不推荐&#xff0c;臃肿)application.propertis文件&#xff08;层次不够分明&#xff09;yml文件&#xff08;推荐&#xff0c;层次分明&#xff0c;语法简洁&#xff09; yml文件的基本语…

记录:利用 Agora 在 Unity3D MRTK场景中创建实时视频聊天应用

目录 准备1. 安装Agora_Unity_RTC_SDK2. 创建UI3. script具体内容4. 使用测试 本质是两部带摄像机的设备同时进入Agora聊天室内视频。 去年实现过一次这个功能&#xff0c;用的是Agora_Unity_RTC_SDK 4.2.2版本的&#xff0c;今年使用失败&#xff0c;遂重新安装最新版本Agora…

Github 2024-06-15Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-15统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型:M…

浪潮信息打造业界首款50℃进液温度服务器 PUE逼近理论极限1.0!

在科技飞速发展的今天&#xff0c;浪潮信息以其前瞻性的技术创新思维&#xff0c;再次突破行业极限&#xff0c;推出业界首个支持50℃进液温度的浸没式液冷服务器NF5180G7。这一创新成果不仅展现了浪潮信息在液冷技术领域的深厚实力&#xff0c;更标志着服务器冷却技术的一次重…

SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)

1.为什么要有这个需求&#xff1f; 一般当我们自己练习的时候&#xff0c;username和password直接是爆露出来的 假如别人路过你旁边时看到了你的数据库账号密码&#xff0c;他跑到他的电脑打开navicat直接就是一顿连接&#xff0c;直接疯狂删除你的数据库&#xff0c;那可就废…

(南京观海微电子)——液晶屏显示不良及修复

TFT LCD信号驱动 屏横线 横暗线、暗带、竖线、竖带 原因&#xff1a; 1、COF与玻璃Bonding不良&#xff1b; 2、COF或玻璃遭到损伤&#xff08;ESD或机械折伤&#xff09;&#xff1b; 3、ASG电路失效&#xff08;仅对ASG技术panel而言&#xff09; 解决方案&#xff1…

STM32定时器篇——Systick定时器的使用(实现delay延时函数)

一、Systick定时器的简介&#xff1a; Systick定时器就是系统滴答定时器&#xff0c;一个24 位的倒计数定时器对于CM3,CM4内核芯片&#xff0c;都有Systick定时器。当Systick计到0时&#xff0c;将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中…

SpringBoot【2】集成 MyBatis Plus

SpringBoot 集成 MyBatis Plus 前言修改 pom.xml修改配置文件添加 实体类添加 持久层接口添加 持久层 XxxMapper.xml 文件添加 业务接口层添加 业务接口实现类添加 控制层添加 MyBatis 配置AutoFillMetaObjectHandlerMyBatisPlusConfig 验证 前言 由于 MySQL 备份/恢复测试&am…

LeetCode 算法:回文链表 c++

原题链接&#x1f517;&#xff1a;回文链表 难度&#xff1a;简单⭐️ 题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head…

如何用 Google Chrome 浏览器浏览经过 XSLT 渲染的 XML 文件

对于经过XSLT渲染的XML文件&#xff0c;本来&#xff0c;可以直接用 IE (Internet Explorer) 打开&#xff0c;就能看到渲染之后的样子&#xff0c;很方便。但是后来&#xff0c;微软把 IE 换成了 Microsoft Edge&#xff0c;按理说这是比 IE 更先进的浏览器&#xff0c;可是偏…

Swift 是 C++ 的最佳继任者

苹果称 Swift 是 C 的最佳继任者 Swift 是苹果公司在 2014 年推出的&#xff0c;一款旨在替代 Objective-C 的编程语言。但苹果语言和运行时总监 Ted Kremenek 在 WWDC24 的主题演讲中表示&#xff0c;Swift 也将取代 C。 “Swift 的安全性、速度和易用性&#xff0c;加上内…

期末复习6--链表头插法(逆序)尾插法(顺序)---输出链表

头插法 #include <stdio.h> #include <stdlib.h>struct Node //定义结构体 {char data; //数据域struct Node * next; //指针域 };/* 请在这里填写答案 */void PrintList (struct Node * head) {struct Node * s;if(head NULL){printf("None&qu…