NGINX项目实战

news2024/9/9 0:21:25

一、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/html
 45             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
主机IP
  7                 <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.coloradmin.cn/o/1958335.html

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

相关文章

医疗器械产品没有互联网连接,就不适用于网络安全要求吗?

医疗器械产品是否不适用于网络安全要求&#xff0c;需要考虑产品是否具有网络连接功能以进行电子数据交换或远程控制&#xff0c;以及是否采用储存媒介进行电子数据交换。详细解析如下&#xff1a; 一、医疗器械的网络安全要求不仅限于互联网连接 数据交换接口&#xff1a;医疗…

这才是 PHP 高性能框架 Workerman 的立命之本

大家好&#xff0c;我是码农先森。 在这个大家都崇尚高性能的时代&#xff0c;程序员的谈笑间句句都离不开高性能&#xff0c;仿佛嘴角边不挂着「高性能」三个字都会显得自己很 Low&#xff0c;其中众所皆知的 Nginx 就是高性能的代表。有些朋友可能连什么是高性能都不一定理解…

【SPIE独立出版:高录用、快检索】第四届通信、网络与物联网国际学术会议 (CNIoT 2024,8月30-9月1)

为了促进通信、计算机和控制等领域专家学者跨界交流与合作&#xff0c;打造最前沿的交流平台&#xff0c;第四届通信、网络与物联网国际学术会议 (CNIoT 2024&#xff09;将涉及通信、网络、物联网、IT能量感知技术、人工智能应用等领域。 会议将为专注于该研究领域的国内外优秀…

一键切换阿里yum源(包括其他系统repo镜像查找方法)

一键切换阿里yum源 示例命令其他系统repo镜像GitHub文档 示例命令 # 备份旧源 mv CentOS-Base.repo CentOS-Base.repo.bak # 添加新源(阿里镜像源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo其他系统repo镜像 这里的示例是用…

RT-DETR:DETRs Beat YOLOs on Real-time Object Detection (CVPR2024)

DETRs Beat YOLOs on Real-time Object Detection 论文链接&#xff1a;http://arxiv.org/abs/2304.08069 代码链接&#xff1a;https://github.com/lyuwenyu/RT-DETR https://github.com/ultralytics/ultralytics/tree/main/ultralytics/models/rtdetr&#xff08;已集成到Y…

2024.7.29 作业

1> 写一个日志文件&#xff0c;将程序启动后&#xff0c;每一秒的时间写入到文件中 #include <myhead.h> int main(int argc,const char *argv[]) {FILE *fp NULL;if((fpfopen("./log.txt","r"))NULL) {perror("open error1");return…

使用 Python 实现计算交并比(IoU)的代码示例:

两个矩形框的交集/并集 IOU(A)/(ABC) box_areas(box[2]-box[0])*(box[3]-box[1])boxes_areas(box[:,2]-box[:,0])*(box[:,3]-box[:,1])l_xtorch.maximum(box[0],boxes[:,0])l_ytorch.maximum(box[1],boxes[:,1])r_xtorch.minimum(box[2],boxes[:2])r_ytorch.minimum(box[3],box…

SpringCloud+Vue3主子表插入数据(芋道)

目的&#xff1a;多表联查获取到每个班级里面所有的学生上课的信息。点击消课插入到消课主表和消课子表&#xff0c;主表记录班级信息&#xff0c;消课人员信息&#xff0c;上课时间。子表记录上课学员的信息&#xff0c;学员姓名、手机号、班级名称、班级类型、上课时间、老师…

7月29(信息差)

&#x1f30d;最强模型 Llama 3.1 如期而至&#xff01;扎克伯格最新访谈&#xff1a;Llama 会成为 AI 界的 Linux &#x1f384;谷歌AlphaProof攻克国际奥赛数学题 https://www.51cto.com/article/793632.html ✨SearchGPT第一波评测来了&#xff01;响应速度超快还没广告&…

微信小程序开发 快速学习 这篇就够了

目录 一、配置篇 &#xff08;1&#xff09;官网链接&#xff1a; &#xff08;2&#xff09;项目分析 &#xff08;3&#xff09;调试器 &#xff08;4&#xff09;预览体验 &#xff08;5&#xff09;配置文件 &#xff08;6&#xff09;配置pages &#xff08;7&…

Android Framework 之AMS

它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。 它除了管理四大组件外&#xff0c;同时也负责管理和调度所有的进程 AMS相关目录结构 AMS代码主要在下面几个目录(AndroidQ上AMS相关部分功能移到了wm下)&#xff1a; frameworks/base/core/java/andro…

微信小游戏之三消(三)道具相关方法

设计一个 game class。负责了游戏的核心控制逻辑&#xff0c;包括游戏状态管理、方块和道具的生成与效果处理&#xff0c;以及游戏的重新开始和复活流程。通过这些方法&#xff0c;脚本实现了游戏的基本玩法和用户交互。 主要游戏控制方法 gameStart()&#xff1a;开始游戏&am…

攻防世界 re 新手模式 2

IgniteMe 32位无壳 一些简单信息&#xff0c;看关键函数 可以得到v7[i]的值 比较简单的逆向 #include<stdio.h> #include<string.h> int main() {char flag[40];char s[40];char str[]"GONDPHyGjPEKruv{{pj]XrF";char ch[] {0x0D, 0x13, 0x17, 0x11,…

AI到底有没有前景?到底要不要学习AI?

前言 在当今这个科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了一个热门话题。对于想要进入这一领域的学习者来说&#xff0c;心中难免会有一些疑问&#xff1a;“AI到底有没有前景&#xff1f;”、“我到底要不要学习AI&#xff1f;”、“我学…

Vue使用阿里巴巴字体

阿里巴巴字体使用效果 字体包下载 官方下载链接 解压字体文件到指定的文件夹 引用字体文件 我的是uniApp的项目&#xff0c;所以在公共css样式中引用这个字体文件 /*每个页面公共css */ font-face {font-family: "alimamFont";font-weight: 400;src: url("~/s…

Could not install packages due to an EnvironmentError: [WinError 5]

Could not install packages due to an EnvironmentError: [WinError 5] 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城…

WordPress原创插件:启用关闭经典编辑器和小工具

WordPress原创插件&#xff1a;启用关闭经典编辑器和小工具 主要功能 如图所示&#xff0c;用于启用或禁用经典编辑器和经典小工具&#xff0c;以替代Gutenberg编辑器。 插件下载 https://download.csdn.net/download/huayula/89592822

[Windows CMD] 检测网络连通性 ping

ping 是一个非常常用的网络工具&#xff0c;用于测试网络连接的可达性和测量网络延迟。它通过发送 ICMP (Internet Control Message Protocol) Echo Request 数据包到目标主机&#xff0c;并等待接收回显应答 (Echo Reply) 来工作。ping 命令可以帮助您快速检测网络问题&#x…

oracle 19c RAC-OracleLinux8.10安装19c遇到的问题

问题一&#xff1a; 操作系统是OracleLinux8.10 使用$ORACLE_HOME/gridSetup.sh -applyPSU /patch/36582629 安装集群正常&#xff0c;但安装数据库软件时 $ORACLE_HOME/runInstaller -applyPSU /patch/36582629报错&#xff0c;因赶工不使用applyPSU参数安装正常&#xff0c…