企业化运维(2)_nginx

###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.confuser 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 nginxroot 19100 0.0 0.0 46020 2000 ? Ss 16:13 0:00 nginx: master process nginxnginx 19279 0.0 0.1 46452 2036 ? S 17:24 0:00 nginx: worker processnginx 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.shcrontab -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.rhkb.cn/news/349923.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day51 代码随想录打卡|二叉树篇---二叉搜索树的最小绝对差

题目&#xff08;leecode T530&#xff09;&#xff1a; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 方法&#xff1a;本题计算二叉搜索树的最小绝对差&#xff0c;涉…

WordPress插件数据库批量替换内容工具插件

1、安装插件后&#xff0c;我们就可以在后台菜单看到工具操作界面 2、目前支持网站内容、标题、评论指定字符的快速替换 3、可以快速解决以往我们需要从MYSQL数据库命令替换的烦恼

Linux编辑器 vim使用 (解决普通用户无法进行sudo提权问题)

文章目录 一.vim是什么命令模式底行模式 二.关于vim暂停问题三.注释批量化注释批量化去注释 四.解决普通用户无法进行sudo提权问题五.vim的配置 一.vim是什么 用过VS的都知道&#xff0c;拥有着编辑器编译器调试.编写C&#xff0c;C&#xff0c;python等的功能。就是集成 Linu…

I/O Stream设计实验

实验要求和目的 深入理解java输入输出流相关类的基本用法&#xff0c;并且可以掌握Java程序的编写和调试。 实验环境 Java语言&#xff0c;PC或android平台 实验具体内容 设计和编写以下程序&#xff1a; 程序1&#xff1a; 从键盘读入多行字符串&#xff08;英文&#xf…

STM32学习笔记(三)--EXTI外部中断详解

&#xff08;1&#xff09;配置步骤1.配置RCC 打开外设时钟2.配置GPIO 选择端口输入模式3.配置AFIO 选择要用的一路GPIO 连接至EXTI 4.配置EXTI 选择边沿触发方式 上升沿 下降沿 双边沿 选择触发响应方式 中断响应 事件响应 5.配置NVIC 选择一个合适的优先…

若依微服务Docker部署验证码出不来怎么办?

最近,有许多人反馈在使用 Docker 部署若依微服务项目时,遇到验证码无法显示的问题。本文将重点介绍解决该问题的注意事项以及整个项目的部署流程。之前我们也撰写过微服务部署教程,本文将在此基础上进行优化和补充。你也可以参考我之前写的部署教程:https://yang-roc.blog.…

宠物空气净化器避坑指南:希喂、霍尼韦尔、安德迈谁是性价比之王

作为一个拥有两只布偶的猫奴&#xff0c;家中猫浮毛无处不在&#xff0c;稍有松懈&#xff0c;出门衣物上便沾满猫毛&#xff0c;影响形象。不仅如此&#xff0c;空气中还飘浮着猫咪们的浮毛和异味。难以清理。经过我不懈的努力&#xff0c;我终于找到了解决这一问题的神器——…

自定义 LLM:LangChain与文心一言擦出火花

自定义 LLM 自定义 LLM 需要实现以下必要的函数&#xff1a; _call &#xff1a;它需要接受一个字符串、可选的停用词&#xff0c;并返回一个字符串。 它还可以实现第二个可选的函数&#xff1a; _identifying_params &#xff1a;用于帮助打印 LLM 信息。该函数应该返回一…

OpenStack入门体验及一键部署

OpenStack入门体验 技能目标&#xff1a; 了解云计算概念 了解OpenStack 了解OpenStack的构成 会OpenStack单机环境一键部署 从控制台认识OpenStack各项功能会 通过OpenStack控制台创建云主机 什么是云计算 云计算(cloudcomputing)是一种基于网络的超级计算模式&a…

Java老人护理上门服务类型系统小程序APP源码

&#x1f338; 老人上门护理服务系统&#xff1a;温暖与专业并存 &#x1f338; 一、&#x1f3e0; 走进老人上门护理服务系统 随着社会的快速发展&#xff0c;我们越来越关注老年人的生活质量。老人上门护理服务系统应运而生&#xff0c;它结合了现代科技与人性化服务&#…

redis序列化

文章目录 1、为什么要进行序列化操作&#xff1f;2、序列化方式2.1、自定义序列化2. 2、StringRedisTemplate&#xff08;重点&#xff09; 1、为什么要进行序列化操作&#xff1f; 不进行序列化向redis存入数据代码&#xff1a; SpringBootTest class RedisDemoApplicationT…

java反序列化---cc6链

目录 Transformer[]数组分析 链条代码跟进 ChainedTransformer.transform() LazyMap.get() TiedMapEntry.getValue() TiedMapEntry.hashCode() HashMap.hash() HashMap.put()的意外触发 LazyMap.get()中key的包含问题 cc6的payload如下 import org.apache.commons.co…

Vue40-vueComponent构造函数

一、组件的本质&#xff1a;VueComponent构造函数 组件的本质是&#xff1a;构造函数 二、每一次调用vue.extend&#xff0c;返回的事一个全新的 VueComponent VueComponent的源码如下&#xff1a; 三、组件中的this 组件中的this是VueComponent实例对象&#xff0c;结构和vm…

vite.config.js如何使用env的环境变量

了解下环境变量在vite中 官方文档走起 https://cn.vitejs.dev/guide/env-and-mode.html#env-variables-and-modes 你见到的.env,.env.production等就是放置环境变量的 官方文档说到.env.[mode] # 只在指定模式下加载,比如.env.development只在开发环境加载 至于为什么是deve…

前缀和算法:算法秘籍下的数据预言家

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 前缀和算法的介绍 二、前缀和例题 2.1 【模版】前缀和 2.2 【模板】二维前缀和 2.3 寻找数组的中间下标 2.4 除自身以外数组的乘积 2.5 和为k的子数组 2.6 和可被k整除的子数组 2.7 …

maven编译【-Dmaven.test.skip=true和-DskipTests=true的区别】

1、背景 我在执行maven编译时&#xff0c;遇到下面情况&#xff1a; 1、当执行命令为下面&#xff1a; mvn clean compile package install -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.validity.datestrue -Dra…

红队内网攻防渗透:内网渗透之Linux内网权限提升技术:udf提权Capability权限LD_PRELOAD环境变量

红队内网攻防渗透 1. 内网权限提升技术1.1 Linux系统提权-Web&用户-数据库udf提权1.1.1 信息收集1.1.2 Web权限获取1.1.3 MYSQL-UDF提权1.1.4 下载到目标上1.1.5 连接确认是否有条件进行导出调用1.1.6 开始进行写入导出调用1.2 Linux系统提权-Web&用户-Capability能力1…

Java语言+前端框架html+Thymeleaf +后端框架springboot开发的UWB智能定位系统源码 UWB三维可视化人员定位系统源码

Java语言前端框架htmlThymeleaf 后端框架springboot开发的UWB智能定位系统源码 UWB三维可视化人员定位系统源码 UWB定位系统基于B/S架构的软件和嵌入式硬件都具有很好的扩展性和兼容性&#xff0c;可以与其他系统接口&#xff08;比如&#xff1a;围界、AB门、高压电网、报警、…

怎么图片转excel表格?推荐三个方法

怎么图片转excel表格&#xff1f;在信息化高速发展的今天&#xff0c;图片转Excel表格的需求日益凸显&#xff0c;尤其是在职场办公中&#xff0c;这一需求更是显得尤为迫切。为了满足广大用户的需求&#xff0c;市面上涌现出了众多图片转Excel的软件。今天&#xff0c;就为大家…

QT 使用资源文件的注意点

不要存放没有使用的资源文件 即使在代码中没有使用到的资源文件&#xff0c;也会编译到执行文件或者DLL里面去这样会增大它的体积。如下 在代码没有使用这个资源文件(10.4M的2k图片)&#xff0c;但是编译出来的程序有 12M左右的大小