NGINX项目实战

一、nginx四层代理

部署支持4层TCP/UDP代理的Nginx服务器

部署nginx服务器

编译安装必须要使用--with-stream参数开启4层代理模块。

[root@proxy ~]# rm -rf /usr/local/nginx/ #清理环境

[root@proxy nginx-1.16.1]# ./configure --with-http_ssl_module  --with-stream #开启SSL加密功能,开启4层反向代理功能

[root@proxy nginx-1.16.1]#  make && make install #编译并安装

配置Nginx服务器,添加服务器池,实现TCP/UDP反向代理功能

[root@proxy nginx-1.16.1]# vim /usr/local/nginx/conf/nginx.conf #在这里我们的配置不再是使用http协议,所以不能在配置到http里面

stream {

        upstream backend {

                server 192.168.2.100:22; #后端SSH服务器的IP和端口

                server 192.168.2.200:22;

        }

        server {

                listen 12345; #Nginx监听的端口

                proxy_pass backend;

        }

}

http {

.. ..

启动nginx

[root@proxy nginx-1.16.1]# /usr/local/nginx/sbin/nginx

注:[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -s reload

nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

遇到这种情况,则:

[root@proxy nginx-1.22.1]# killall nginx

之后重新启动服务

客户端使用访问代理服务器测试轮询效果

[root@proxy nginx-1.16.1]# ssh 192.168.4.5 -p 12345

root@192.168.4.5's password:

[root@web1 ~]# exit

[root@proxy nginx-1.16.1]# ssh 192.168.4.5 -p 12345

root@192.168.4.5's password:

[root@web2 ~]#

二、nginx的优化方案

修改Nginx配置文件,自定义报错页面

[root@web1 ~ ]# vim /usr/local/nginx/conf/nginx.conf

.. ..

        error_page  404              /404.html;     #打开注释,自定义错误页面

.. ..

[root@web1 ~]# vim /usr/local/nginx/html/404.html

Oops,No NO no page

[root@web1 ~]# /usr/local/nginx/sbin/nginx

[root@web1 ~]#systemctl stop firewalld 

[root@web1 ~]# setenforce 0

优化后,使用浏览器访问不存在的页面,会提示自己定义的404.html页面

使用背景图片做报错页面

[root@web1 ~]# cp /usr/share/backgrounds/day.jpg  /usr/local/nginx/html

[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf

        error_page  404              /day.jpg;

[root@web1 ~]# /usr/local/nginx/sbin/nginx -s reload

如何查看服务器状态信息(非常重要的功能)

编译安装时使用--with-http_stub_status_module开启状态页面模块

已升级的形式进行安装

[root@web1 ~]# cd

[root@web1 ~]# cd 桌面

[root@web1 ~]# cd nginx-1.22.1/

[root@web1 nginx-1.17.6]# ./configure --with-http_ssl_module  --with-http_stub_status_module #开启status状态页面

[root@web1 nginx-1.17.6]# make  #编译

[root@web1 nginx-1.17.6]# make install

注释掉之前做过的四层代理,要不会报错

[root@web1 nginx-1.17.6]# mv  /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #进行备份

[root@web1 nginx-1.17.6]# cp objs/nginx /usr/local/nginx/sbin/  #objs下存放二进制程序,更新版本

[root@web1 nginx-1.17.6]# make upgrade 检查nginx是否正常

[root@web1 nginx-1.17.6]# /usr/local/nginx/sbin/nginx -V

修改配置文件

[root@web1 nginx-1.17.6]# vim /usr/local/nginx/conf/nginx.conf #新添加

        location /status {

                stub_status on;

        }

[root@web1 nginx-1.17.6]# /usr/local/nginx/sbin/nginx -s reload

优化后,查看状态页面信息

[root@web1 ~]# curl 192.168.2.100/status

Active connections: 1

server accepts handled requests

 2 2 8 #nginx的累计值,

Reading: 0 Writing: 1 Waiting: 0

Active connections:当前活动的连接数量(实时并发连接数)。

Accepts:已经接受客户端的连接总数量。

Handled:已经处理客户端的连接总数量。(一般与accepts一致,除非服务器限制了连接数量)。

Requests:客户端发送的请求数量。

Reading:当前服务器正在读取客户端请求头的数量。

Writing:当前服务器正在写响应信息的数量。

Waiting:当前多少客户端在等待服务器的响应。

nginx的优化方案(下)

 优化并发连接数

优化前使用ab高并发测试

[root@web1 ~]# rpm -qa httpd-tools

[root@web1 ~]# ab -c 100 -n 100 http://192.168.2.100/ #-c代表总人数,-n代表总访问量必须加/

[root@web1 ~]# ab -c 2000 -n 2000 http://192.168.2.100/

socket: Too many open files (24)               #提示打开文件数量过多

修改Nginx配置文件,增加并发量

cpu处理器图形模式查看,改成2个

[root@web1 ~]# lscpu

[root@web1 ~ ]# vim /usr/local/nginx/conf/nginx.conf

.. ..

worker_processes  2; #与CPU核心数量一致

events {

    worker_connections  50000; #每个worker最大并发连接数

}

[root@web1 ~]# /usr/local/nginx/sbin/nginx -s reload

[root@web1 ~]#  ab -c 2000 -n 2000 http://192.168.2.100/ #再次测试,依旧报错

优化Linux内核参数(最大文件数量)

[root@web1 ~]# ulimit -a #查看所有属性值

open files                      (-n) 1024 #打开文件数量

[root@web1 ~]# ulimit -n 100000 #更改打开的文件数量,修改内核限制(临时)

[root@web1 ~]#  ab -c 2000 -n 2000 http://192.168.2.100/

四、平滑升级

1、原理

(1)启动后完成配置加载和端⼝绑定等动作, 分离出指定数量的⼯

作⼦进程 ,这些⼦进程会持有监听端⼝的⽂件描述符 (fd),并通过

在该描述符上添加监听事件来接受连接。

(2)Nginx 主进程在启动完成后会进⼊等待状态,负责响应各类系

统消息,如 SIGCHLD、SIGHUPSIGUSR2 等。

(3)主进程⽀持的信号

TERM、INT:⽴刻退出

HUP:重新加载配置⽂件,使⽤新的配置启动⼯作进程,并逐步关闭旧进程

USR1:重新⽣成⽇志⽂件;

USR2:启动新的主进程,实现热升级

WINCH:逐步关闭⼯作进程及⼯作进程⽀持的信号

2、过程

(1)查看旧版nginx的编译参数;

(2)编译新版本 Nginx 源码包,安装路径需与旧版⼀致,注意: 不

要执⾏ make install;

(3)备份⼆进制可执⾏⽂件,⽤新版本的替换;

(4)确保配置⽂件⽆报错;

(5)发送USR2信号:向主进程(master) 发送USR2信号,Nginx 会

启动⼀个新版本的 master 进程和对应⼯作进程,和旧版⼀起处理请

求;

(7)发送QUIT 信号: 升级完毕,可向旧的 Nginx 主进程(master) 发

送 (QUIT、TERM、或者KILL)信号,使旧的主进程退出;

(8)验证nginx 版本号,并访问测试.

五、Nginx  web 缓存服务

Nginx 作为 Web 缓存服务器,它介于客户端和应⽤服务器之

间,当⽤户通过浏览器访问⼀个 URL 时,Web 缓存服务器会去

应⽤服务器获取要展示给⽤户的内容,将内容缓存到⾃⼰的服务

器上,当下⼀次请求到来时,如果访问的是同⼀个 URL,Web

缓存服务器就会直接将之前缓存的内容返回给客户端,⽽不是向

应⽤服务器再次发送请求。

Web 缓存降低了应⽤服务器、数据库的负载,减少了⽹络延

迟,提⾼了⽤户访问的响应速度,增强了⽤户的体验。

 

[root@server ~]# vim 
/usr/local/nginx/conf/nginx.conf
......省略部分配置信息......
http {include       mime.types;default_type  application/octet-stream;proxy_cache_path /usr/local/proxy_temp 
levels=1:2 keys_zone=cache_item:200m inactive=1d 
max_size=20g;#指定缓冲路径,指定缓存⽬录级别⼆层,指定缓存块名称和⼤
⼩,指定缓存数据存储时间,指定占⽤硬盘最⼤值20g
......省略部分配置信息......location / {proxy_cache cache item;     #指定缓
冲区proxy_cache_key 
$schemesproxy_hostsrequest_uri;   #指定参数key值proxy_cache_valid 200 5d;   #返回值
200缓存5天proxy_cache_valid 404 30s;  #返回值
404缓存30秒proxy_cache_valid any 1m;   #其他的
⼀分钟
proxy_pass http://192.168.33.11; 
#反向代理,将请求转发给后端web服务器}
......省略部分配置信息......
:wq
[root@server ~]# systemctl reload nginx.service
当反向代理缓存服务器搭建完成后,即使nginx服务关闭也可
以访问⾸⻚。

六、防盗链

作⽤:防盗链就是防⽌别⼈盗⽤服务器中的图⽚、⽂件、视频等
相关资源。在 nginx 中,通过 location + return 实现。1、搭建 nginx 主服务器	实例操作需要两台主机做防盗链操作,所以这⾥我⽤我的两台主
机(server:192.168.33.100)和(YH1:192.168.33.11)做防
盗链演示操作。
下⾯是 server:192.168.33.100 主机的搭建过程,代码及解释
如下:
[root@server ~]# vim 
/usr/local/nginx/conf/nginx.conf  #去nginx配置⽂件中
找到nginx存放⾸⻚索引⽂件的根⽬录43         location / {44             root   html;    #nginx⾸⻚索引⽂件的
根⽬录,默认在nginx软件⽬录下,也就
是/usr/local/nginx/html45             index  index.html index.htm; 
#nginx索引⽂件的格式46         }
:q   #因为配置⽂件未做修改,只是找需要的⽂件位置,所以q退出
即可,⽆需w再保存
[root@server ~]# vim 
/usr/local/nginx/html/index.html     #按照如下格式写
内容,什么意思不⽤细究1 <html>2         <head>3                 <title>192.168.33.100</title>4                 </head>5         <body>6                 192.168.33.100      #我的server
主机IP7                 <img src="./123.jpg"> 
#./123.jpg表示在/usr/local/nginx/html的123.jpg图⽚⽂
件,随便导⼊⼀张图⽚改成123.jpg即可8         </body>9 </html>
:wq
[root@server ~]# cd /usr/local/nginx/html/    #到这
个⽬录下
[root@server html]# ls
50x.html  微信截图_20230915204153.jpg  index.html 
#⼿动拖⼊⼀张jpg格式的图⽚,注意格式
[root@server html]# mv 微信截图_20230915204153.jpg 
123.jpg    #将图⽚改名为刚才在index.html中提到的123.jpg
[root@server html]# systemctl reload nginx.service 
#重载nginx,尽量以后少重启服务,避免到了企业中养成坏习惯	
2、测试访问主服务器
浏览器输⼊已经搭好的 nginx 主服务器,192.168.33.100
访问成功,如下图:	 

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

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

相关文章

Oracle特有的DECODE函数

Oracle中的DECODE函数是一种条件表达式函数&#xff0c;用于基于给定的条件从一组值中选择一个值返回。它的基本语法如下&#xff1a; DECODE(expression, search1, result1, [search2, result2, ...], [default])expression&#xff1a;要比较的表达式或列。searchN&#xff…

DDPM 核心代码解析(1)

所有代码 已上传至GitHub - duhanyue349/diffusion_model_learned_ddpm_main: 扩散模型基础框架源代码 目录结构如下 在train_cifar.py 中展示了扩散模型训练的所有代码 如果没有安装wandb 可以在create_argparser()设置 log_to_wandbFalse 一、加载模型参数 args 这里用了一…

直播圈不再只讲技术和千川,管理成为新焦点

直播圈不讲技术&#xff0c;也不讲千川啦&#xff0c;开始讲管理啦&#xff0c;感叹直播带货发展真快&#xff0c;都说要傻瓜化&#xff0c;讲的东西一年能迭代 3 个版本&#xff0c;甚至带货线下课不讲半天团队管理你的课都显得low。关键没一个能告诉你管理是什么管什么&#…

【1】CPU飙升到200%以上问题汇总

原链接 【1】CPU飙升到200%以上问题汇总 CPU飙升到200%以上是生成中常见的问题 注意&#xff1a; 1. linux的cpu使用频率是根据cpu个数和核数决定的 2. top&#xff0c;然后你按一下键盘的1&#xff0c;这就是单个核心的负载&#xff0c;不然是所有核心的负载相加&#xff0c;…

弹幕背后:B站UP主创作服务解析

引言 在B站&#xff0c;每一条飘过的弹幕都是一个故事的碎片&#xff0c;它们汇聚成一幅幅生动的社交画卷。这里&#xff0c;不仅仅是一个视频分享平台&#xff0c;弹幕背后更是一个充满活力的创作者生态系统。B站以其独特的弹幕文化&#xff0c;为创作者和观众之间搭建起了一座…

RxJava基础使用

Rx思想 事件从起点流向终点。 过程中可以对事件进行拦截&#xff0c;拦截时可以对事件进行处理&#xff0c;处理后将处理后的事件继续流向终点。 终点接收上一次处理后的事件。 获取网络图片并显示 基础实现 使用Observable.just(path) 创建图片路径的Observable。 使用m…

Unity | Shader基础知识(第二十集:应用-简易流光、LOD)

目录 一、前言 二、LOD 1.什么是LOD 2.代码如何调节LOD 三、流光 1.资源准备 2.uv移动 3.获取图片中的uv 4.改变uv去取流光的颜色&#xff08;时间的应用&#xff09; 5.图片叠加 6.透明图片的叠加 四、纯净代码 五、作者的碎碎念 一、前言 有小伙伴问&#xf…

Studying-代码随想录训练营day45| 115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

第45天&#xff0c;子序列part03&#xff0c;编辑距离&#x1f4aa;(ง •_•)ง&#xff0c;编程语言&#xff1a;C 目录 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇 115.不同的子序列 文档讲解&#xff1a;代码随想录不同的子序列 视频讲…

分布式搜索引擎ES--Elasticsearch集群

1.Elasticsearch集群的概念 分片机制&#xff1a;每个索引都可以被分片 索引my_doc只有一个主分片&#xff1b;索引shop有三个主分片&#xff1b;索引shop2有5个主分片;(参考前面案例) 每个主分片都包含索引的数据&#xff0c;由于目前是单机&#xff0c;所以副分片是没有的&a…

安全开发第一篇

文章目录 参与RASP、IAST等安全防护工具的开发技术背景开发流程技术挑战工具和资源示例结论 以phpstudydvwa为列 实现 SQL 注入检测脚本 参与RASP、IAST等安全防护工具的开发 参与 RASP&#xff08;Runtime Application Self-Protection&#xff09;和 IAST&#xff08;Intera…

为开源奉献一份自己的力量:Cesium没有热力图组件,我们自己封装!

大家好&#xff0c;我是日拱一卒的攻城师不浪&#xff0c;专注可视化、数字孪生、前端提效、nodejs、AI学习、GIS等学习沉淀&#xff0c;这是2024年输出的第27/100篇文章。 交流合作&#xff1a;brown_7778 前言 热力图&#xff0c;在很多可视化场景开发中会被经常提到&#x…

electron 主进程和渲染进程

最近在整理electron 相关的项目问题&#xff0c;对自己来说也是温故知新&#xff0c;也希望能对小伙伴们有所帮助&#xff0c;大家共同努力共同进步。加油&#xff01;&#xff01;&#xff01;&#xff01; 虽然最近一年前端大环境不好&#xff0c;但是大家还是要加油鸭&#…

网安零基础入门神书,全面介绍Web渗透核心攻击与防御方式!

Web安全是指Web服务程序的漏洞&#xff0c;通常涵盖Web漏洞、操作系统洞、数据库漏洞、中间件漏洞等。 “渗透测试”作为主动防御的一种关键手段&#xff0c;对评估网络系统安全防护及措施至关重要&#xff0c;因为只有发现问题才能及时终止并预防潜在的安全风险。 根据网络安…

【Qt开发】No matching signal for on_toolButton_clicked() 解决方案

【Qt开发】No matching signal for on_toolButton_clicked() 解决方案 文章目录 No matching signal for xxx 解决方案附录&#xff1a;C语言到C的入门知识点&#xff08;主要适用于C语言精通到Qt的C开发入门&#xff09;C语言与C的不同C中写C语言代码C语言到C的知识点Qt开发中…

Linux安装青龙面板并将本地服务映射至公网实现远程访问

文章目录 前言一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用。本教程使用Docker部署青龙&#xff0c;如何安装Docker详见&#xff1a; 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 …

全局异常 @ControllerAdvice 该怎么写

本文首发于稀土掘金&#xff1a;全局异常 ControllerAdvice 该怎么写&#xff0c;该账号即为本人账号&#xff0c;非搬运。 问题由来 很多小伙伴刚进公司做项目的时候&#xff0c;会看到项目里面有一个ControllerAdvice标记的类&#xff0c;整个类的编码结构大概是这样子&…

程序员极力推荐的几款插件

前言 h之前分享程序员喜欢的神器之后&#xff0c;还是相当多的伙伴喜欢&#xff0c;那一期的工具不仅是协助你工作还是工作外摸鱼划水&#xff0c;体验感是相当不错的。 这一期我还是打算把我非常喜欢用的几款插件分享给大家&#xff0c;这几款差劲不仅帮助我节省很多时间&am…

2024年软件系统与信息处理国际会议(ICSSIP 2024)即将召开!

2024年软件系统与信息处理国际会议&#xff08;ICSSIP 2024&#xff09;将于2024年10月25-27日在中国昆明举行。引领技术前沿&#xff0c;共谋创新未来。ICSSIP 2024将汇聚来自世界各地的专家学者&#xff0c;他们将在会上分享最新的研究成果、技术突破及实践经验。会议议题涵盖…

WAAP替代传统WAF已成趋势

数字化时代&#xff0c;Web应用和API已成为企业运营的核心。然而&#xff0c;随着网络攻击手段的不断进化&#xff0c;自动化攻击愈发频繁&#xff0c;传统的Web应用防火墙&#xff08;WAF&#xff09;已难以满足现代企业的安全需求。WAAP&#xff08;Web Application and API …

我出一道面试题,看看你能拿 3k 还是 30k!

大家好&#xff0c;我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场&#xff0c;接下来我会出一道经典的后端面试题&#xff0c;你只需要进行 4 个简单的选择&#xff0c;就能判断出来你的水平是新手&#xff08;3k&#xff09;、初级&#xff08;10k&#xff09;、中…