Linux下Nginx安装使用
一、下载解压nginx
# 进入要放安装包的目录
cd /opt/software
# 下载安装包
wget https://nginx.org/download/nginx-1.20.2.tar.gz
# 解压缩
tar -zxvf nginx-1.20.2.tar.gz -C /opt/modules
# 进入解压后的目录
cd /opt/modules/nginx-1.20.2/
二、安装nginx
1、安装编译器
为了编译Nginx源码,我们需要标准的GCC编译器(GNU Compiler Collection,自由的类UNIX及Mac OS X操作系统的标准编译器),另外,我们需要通过Automake工具,完成自动创建Makefile的工作,除此以外,Nginx的一些模块还需要依赖其他第三方库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)和openssl库(支持ssl模块)。
可以通过如下指令去查看Linux服务器上是否已经安装pcre、zlib和openssl —— 转自原文链接
# 查看openssl
rpm -qa openssl
# 查看zlib
rpm -qa zlib
# 查看pcre
rpm -qa pcre
# 如果没有安装以上三个库,鉴于以上Nginx运行的需求,我们需要执行以下代码
yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel
2、安装nginx
运行configure脚本程序,关于configure脚本程序参数解析可以看这篇文章:NGINX ./configure详解_冉半夏生的博客-CSDN博客
# 注意需要进入解压的nginx目录,--prefix指安装目录 默认为/usr/local/nginx
# http_stub_status_module 和 http_ssl_module这两个模块提供对HTTPS必要的支持
# stream 实现(TCP/UDP)负载均衡 1.9.0之前的版本不支持stream
./configure --prefix=/opt/modules/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream
3、编译nginx
# 注意需要进入解压的nginx目录
make
make install
4、启停nginx
# 启动nginx,修改配置后要记得重启才能生效
/opt/modules/nginx/sbin/nginx -C /opt/modules/nginx-1.20.2/conf/nginx.conf
# 查看nginx是否启动
ps -ef | grep nginx
# 停止nginx
/opt/modules/nginx/sbin/nginx -s stop
# 重启nginx
/opt/modules/nginx/sbin/nginx -s reopen
# 重新载入配置文件
/opt/modules/nginx/sbin/nginx -s reload
三、nginx的使用
转自Nginx Stream(TCP/UDP)负载均衡 (w3schools.cn)
1、nginx负载均摊
注:stream 和http同级
Nginx 的 TCP/UDP 负载均衡是应用 Stream 代理模块(ngx_stream_proxy_module)和 Stream 上游模块(ngx_stream_upstream_module)实现的。Nginx 的 TCP 负载均衡与 LVS 都是四层负载均衡的应用,所不同的是,LVS 是被置于 Linux 内核中的,而 Nginx 是运行于用户层的,基于 Nginx 的 TCP 负载可以实现更灵活的用户访问管理和控制。
Nginx 的 Stream 上游模块支持与 Nginx HTTP 上游模块一致的 轮询(Round Robin)、**哈希(Hash)及最少连接数(least_conn)**负载均衡策略。Nginx 默认使用轮询负载均衡策略,可以根据服务器配置权重配置样例如下:
①轮询负载均摊
根据权重轮询访问服务器
stream {upstream backend {server 192.168.1.100:6666 weight=2;server 192.168.1.101:6666 weight=1;server 192.168.1.102:6666 weight=1;}server {listen 8888;proxy_pass backend;}
}
②哈希负载均摊
哈希负载均衡策略可以通过客户端 IP($remote_addr)实现简单的会话保持,其可将同一 IP 客户端始终转发给同一台后端服务器。
哈希负载均衡策略通过指令参数 consistent 设定是否开启一致性哈希负载均衡策略。Nginx 的一致性哈希负载均衡策略是采用 Ketama 一致性哈希算法,当后端服务器组中的服务器数量变化时,只会影响少部分客户端的请求。
stream {upstream backend {hash $remote_addr consistent;server 192.168.1.100:6666 weight=2;server 192.168.1.101:6666 weight=1;server 192.168.1.102:6666 weight=1;}server {listen 8888;proxy_pass backend;}
}
③最少连接负载均衡
最少连接负载均衡策略,可以在后端被代理服务器性能不均时,在考虑上游服务器组中各服务器权重的前提下,将客户端连接分配给活跃连接最少的被代理服务器,从而有效提高处理性能高的被代理服务器的使用率。
stream {upstream backend {least_conn;server 192.168.1.100:6666 weight=2;server 192.168.1.101:6666 weight=1;server 192.168.1.102:6666 weight=1;}server {listen 8888;proxy_pass backend;}
}
④容错机制
Nginx 的 TCP/UDP 负载均衡在连接分配时也支持被动健康检测模式,如果与后端服务器建立连接失败,并在 fail_timeout 参数的时间内连续超过 max_fails 参数设置的次数,Nginx 就会将该服务器置为不可用状态,并且在 fail_timeout 参数的时间内不再给该服务器分配连接。当 fail_timeout 参数的时间结束时将尝试分配连接检测该服务器是否恢复,如果可以建立连接,则判定为恢复。
stream {upstream backend {server 192.168.1.100:6666 max_fails=3 fail_timeout=10s;server 192.168.1.101:6666 max_fails=3 fail_timeout=10s;server 192.168.1.102:6666 max_fails=3 fail_timeout=10s;}server {proxy_connect_timeout 5s; # 与被代理服务器建立连接的超时时间为5sproxy_timeout 10s; # 获取被代理服务器的响应最大超时时间为10s# 当被代理的服务器返回错误或超时时,将未返回响应的客户端连接请求传递给upstream中的下# 一个服务器proxy_next_upstream on;proxy_next_upstream_tries 3; # 转发尝试请求最多3次proxy_next_upstream_timeout 10s; # 总尝试超时时间为10sproxy_socket_keepalive on; # 开启SO_KEEPALIVE选项进行心跳检测listen 8888;proxy_pass backend;}
}
其中的参数及指令说明如下。
- 指令值参数 max_fails 是指 10s 内 Nginx 分配给当前服务器的连接失败次数累加值,每 10s 会重置为 0;
- 指令值参数 fail_timeout 既是失败计数的最大时间,又是服务器被置为失败状态的熔断时间,超过这个时间将再次被分配连接;
- 指令 proxy_connect_timeout 或 proxy_timeout 为超时状态时,都会触发 proxy_next_upstream 机制;
- proxy_next_upstream 是 Nginx 下提高连接成功率的机制,当被代理服务器返回错误或超时时,将尝试转发给下一个可用的被代理服务器;
- 指令 proxy_next_upstream_tries 的指令值次数包括第一次转发请求的次数。
TCP 连接在接收到关闭连接通知前将一直保持连接,当 Nginx 与被代理服务器的两个连续成功的读或写操作的最大间隔时间超过 proxy_timeout 指令配置的时间时,连接将会被关闭。在 TCP 长连接的场景中,应适当调整 proxy_timeout 的设置,同时关注系统内核 SO_KEEPALIVE 选项的配置,可以防止过早地断开连接。
2、nginx请求转发/反向代理
反向代理应该是Nginx使用最多的功能了,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
①简单实现
反向代理通过proxy_pass
指令来实现。
server {listen 8888;server_name localhost;location /aaa {proxy_pass http://192.168.1.100:6666;error_page 404 @error;}location /bbb {proxy_pass http://192.168.1.101:6666;error_page 404 @error;}location @error{ proxy_pass http://error; }
}
这个简单的实现案例就是把访问这台服务器8888端口的请求转发到192.168.1.100这台服务器6666端口
②location用法
location
是 Nginx 对 HTTP 请求中的 URI 进行匹配处理的指令,location 的语法形式如下:
location [=|~|~*|^~|@] pattern { ... }
其中,[=|~*|^~|@]
部分称为 location 修饰语(Modifier),修饰语定义了与 URI 的匹配方式。pattern 为匹配项,可以是字符串或正则表达式。
location 中的字符有没有 /
都没有影响。也就是说 /homepage/
和 /homepage
是一样的
如果 URI 结构是 https://domain.com/
的形式,尾部有没有 /
都不会造成重定向。因为浏览器在发起请求的时候,默认加上了 /
。虽然很多浏览器在地址栏里也不会显示 /
。
如果 URI 的结构是 https://domain.com/homepage/
。尾部如果缺少 /
将导致重定向。因为根据约定,URL 尾部的 /
表示目录,没有 /
表示文件。所以访问 /homepage/
时,服务器会自动去该目录下找对应的默认文件。如果访问 /homepage
的话,服务器会先去找 homepage
文件,找不到的话会将 homepage
当成目录,重定向到 /homepage/
,去该目录下找默认文件 来源: https://juejin.cn/post/7044438248495513614
Ⅰ匹配优先级
当有多条 location 规则时,nginx 有一套比较复杂的规则,如下
- 精确匹配
=
- 前缀匹配
^~
(立刻停止后续的正则搜索) - 按文件中顺序的正则匹配
~
或~*
- 匹配不带任何修饰的前缀匹配。
Ⅱ无修饰语
不加任何规则时,默认是大小写敏感,前缀匹配,相当于加了~ 与 ^~
# 匹配所有以/abc开头的url请求
location /abc {proxy_pass http://192.168.1.100:6666;
}
- http://localhost/abc (匹配)
- http://localhost/abc/ (匹配)
- http://localhost/abc?param1=1 (匹配,忽略参数)
- http://localhost/abce (不匹配)
Ⅲ修饰语"="
精确匹配pattern,pattern后不能带任何字符串
location = /abc {proxy_pass http://192.168.1.100:6666;
}
- http://localhost/abc (匹配)
- http://localhost/abc/ (不匹配, 带有结尾的
/
) - http://localhost/abc?param1=1 (匹配,忽略参数)
- http://localhost/abce (不匹配)
Ⅳ修饰语"~"
区分大小写的正则匹配,匹配项的内容必须是正则表达式
location ~ ^/abc$ {proxy_pass http://192.168.1.100:6666;
}
- http://localhost/abc (匹配)
- http://localhost/abc/ (不匹配, 带有结尾的
/
) - http://localhost/abc?param1=1 (匹配,忽略参数)
- http://localhost/Abc (不匹配)
- http://localhost/abce (不匹配)
Ⅴ修饰语"~*"
不区分大小写的正则匹配,匹配项的内容必须是正则表达式
location ~* ^/Abc$ {proxy_pass http://192.168.1.100:6666;
}
- http://localhost/abc (匹配)
- http://localhost/abc/ (不匹配, 带有结尾的
/
) - http://localhost/abc?param1=1 (匹配,忽略参数)
- http://localhost/Abc (匹配)
- http://localhost/abce (不匹配)
Ⅵ修饰语"^~"
前缀匹配
location ^~ /abc {proxy_pass http://192.168.1.100:6666;
}
Ⅶ修饰语"@"
定义一个只能内部访问的 location 区域,可以被其他内部跳转指令使用,如 try_files 或 error_page。
location /index {error_page 404 @error;
}location @error{ proxy_pass http://error;
}
表示以 /index 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上
相关文章:

Linux下Nginx安装使用
一、下载解压nginx # 进入要放安装包的目录 cd /opt/software # 下载安装包 wget https://nginx.org/download/nginx-1.20.2.tar.gz # 解压缩 tar -zxvf nginx-1.20.2.tar.gz -C /opt/modules # 进入解压后的目录 cd /opt/modules/nginx-1.20.2/二、安装nginx 1、安装编译器 …...

推动汽车业务向前发展的混合云战略:汽车数据解决方案
推动汽车业务向前发展的混合云战略 无论您的数据是位于内部还是公有云中,与 NetApp 合作都可以帮助您的汽车业务充分发挥它们的潜能 前有混合动力汽车,后有混合云 通过精心考虑的混合多云战略,汽车制造商可以根据不同需求和环境移动应用程序…...

Boosting三巨头:XGBoost、LightGBM和CatBoost(发展、原理、区别和联系,附代码和案例)
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

设计模式~模板方法模式(Template method)-10
目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: (6)Servlet Api & Spring 中的应用 代码 (钩子函数)在模板模式(Template Pattern)中,一个抽象类公开定…...

【WebSocket】在SSM项目中配置websocket
在SSM项目中配置websocket 最近在ssm项目中配置了websocket,踩了很多坑,来分享一下 本文暂不提供发送消息等内容的代码逻辑(后续也许会补充),如果你直接复制这类可能会对配置造成更大的麻烦(博主就是复制…...

node-red中创建自定义节点 JavaScript 文件API编写详解
前言 在node-red中如果你没有找到自己需要的节点时,那么你可以自定义一个节点来满足自己的需求。之前的文章中,我有简单介绍过如何创建一个节点,并以转换大小写来举例。例子虽然简单,但可以让大家了解创建自定义节点的步骤以及一个节点的组成部分。那么本篇将会聚焦在自定…...

华为OD机试 - 寻找路径 or 数组二叉树(C 语言解题)【独家】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:寻找路径…...

YOLOv7、YOLOv5改进之打印热力图可视化:适用于自定义模型,丰富实验数据
💡该教程为改进YOLO高阶指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡更多改进内容📚可以点击查看:YOLOv5改进、YOLOv7改进、YOLOv8改进、YOLOX改进原创目录 | 唐宇迪老师联袂推荐🏆 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可�…...

【Java代码与架构之完美优化】篇1:代码质量优化通用准则
工欲善其事,必先利其器 1. 避免使用空块 常见空块一般有以下几种情况: 多余的分号:if(xxx);多余的大括号:if(xxx){这里没有内容}空finall语句:try{...}catch(...){...}finally{这里没有内容} 空块的存在࿰…...

Linux进程间通信详解(最全)
进程间的五种通信方式介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享内存、Socket(套接字&a…...

ROS 摄像头的使用
参考: youtubeArticulated Robotics 作者Josh Newans博客 建议: 这个只是我的看法,强烈建议看原视频或博客 png:无损压缩 jpeg:有损压缩 Driver Node 负责连接硬件设备,读取摄像头数据"ima…...

VR全景云展厅,实现7*24小时的线上宣传能力!
数字化时代,虚拟现实技术的应用越来越广泛,其中VR全景云展厅是一种新兴的展示方式,具有独特的展示优势。随着VR技术的不断发展,越来越多的企业、机构和个人开始使用VR全景云展厅来展示他们的产品和服务。一、展厅营销痛点1、实地到…...

RK3568平台开发系列讲解(显示篇) DRM显示系统组成分析
🚀返回专栏总目录 文章目录 一、DRM Framebuffer二、CRTC三、Planes四、Encoder五、Connector沉淀、分享、成长,让自己和他人都能有所收获!😄 📢让我们分析一下绿框中的五个部件,以及他们的联动。 一、DRM Framebuffer 与 framebuffer一样,是一片存放图像的内存区域,…...

WPF DataGrid控件的使用 使用列模板来进行数据格式的美化
<Grid><Grid.RowDefinitions><RowDefinition Height"0.1*" /><RowDefinition /></Grid.RowDefinitions><Button Content"刷新"FontSize"25"Command"{Binding ExecuteRefreshCommand}" /><Dat…...

elasticsearch自定义企业词典
我们中文分词用的是ik,但是ik只是对基本的中文词进行了分词,而对于企业或者人名没有进行分词。比如,我搜索中国平安,那么ik只能分成中国、平安如果这样,这肯定是不行滴!接下来,俺就教你…...

【AcWing】学了一坤时才明白的一道题
🎆音乐分享 (点击链接可以听哦) The Right Path - Thomas Greenberg 这道题小吉花了一坤时才弄明白,虽然花的时间有点长 但是至少是明白了 😎😎😎😎😎😎 …...

ES6的export和import
ES6中的模块加载ES6 模块是编译时加载,编译时就能确定模块的依赖关系,以及输入和输出的变量,相比于CommonJS 和 AMD 模块都只能在运行时确定输入输出变量的加载效率要高。严格模式ES6 的模块自动采用严格模式,不管你有没有在模块头…...

ASEMI高压MOS管20N60参数,20N60尺寸,20N60体积
编辑-Z ASEMI高压MOS管20N60参数: 型号:20N60 漏极-源极电压(VDS):600V 栅源电压(VGS):30V 漏极电流(ID):20A 功耗(PDÿ…...

【备战面试】TCP的三次握手与四次挥手
本篇总结的是计算机网络知识相关的面试题,后续也会更新其他相关内容 文章目录1、TCP头部结构2、三次握手3、四次挥手4、为什么TCP连接的时候是三次?两次是否可以?5、为什么TCP连接的时候是三次,关闭的时候却是四次?6、…...

【模板进阶】
目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 3 模板分离编译 3.1 什么是分离编译 3.2 模板的分离编译 4. 模板总结 有需要的老哥可以先看看模板的介绍:http://t.csdn.cn/2TkUYhttp://t.csdn.cn/2TkUY 1. …...

Tech Talk | 电致变色技术带来的智能AR体验
2023年2月27日,小米在2023MWC世界移动通信大会上,正式发布了小米无线AR眼镜探索版。这款产品搭载了创新的数控电致变色镜片,能适应不同光环境,遮光模式可以在观影时更沉浸,通透模式又能让AR虚实结合的体验更生动。“ 本…...

ACWING蓝桥杯每日一题python(持续更新
ACWing蓝桥杯每日一题 一直没时间去总结算法,终于有空可以总结一下刷的acwing了,因为没时间所以最近只刷了ACWING的蓝桥杯每日一题。。。真是该死 1.截断数组 首先我们要知道,如果sum(a)不能被3整除或者len(a) < 3 ,那么他肯…...

【Linux】进程状态(阻塞、挂起、僵尸进程)
文章目录1 阻塞与挂起1.1 阻塞1.2 挂起2 进程状态前言: 当我们在Windows下双击运行一个程序,或是在Linux下通过 ./ 加载运行一个程序,是否就代表对应的进程就一直处在运行状态呢?其实不然,一个进程有许多不同的状态。当…...

规约第二章
文章目录有限域的定义Definition of Finite Field单位元运算举例素数域群阿贝尔群阿贝尔循环群循环子群阿贝尔循环群且阶是素数的有限域的定义Definition of Finite Field 单位元 这里一般只需要记住2个0,1 。0是加法的单位元,1是乘法的单位元。以及逆…...

2019年MathorCup数学建模C题汽配件制造业中的生产排程问题解题全过程文档及程序
2019年第九届MathorCup高校数学建模挑战赛 C题 汽配件制造业中的生产排程问题 原题再现: 整体求解过程概述(摘要) 随着市场竞争日趋激烈,企业开始更加注重低费高效,因此生产排程问题成为众多制造企业关注的热点之一。其中,制造行…...

ARM uboot 的移植3 -从 uboot 官方标准uboot开始移植
一、选择合适的官方原版 uboot 1、官方原版 uboot 的版本 (1) 版本号。刚开始是 1.3.4 样式,后来变成 2009.08 样式。 (2) 新版和旧版的差别。uboot 的架构很早就定下来了,然后里面普遍公用的东西(common 目录下、drivers 目录下、fs 目录…...

华为OD机试 - 快递货车(C 语言解题)【独家】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:快递货车…...

连接微信群、Slack 和 GitHub:社区开放沟通的基础设施搭建
NebulaGraph 社区如何构建工具让 Slack、WeChat 中宝贵的群聊讨论同步到公共领域。 要开放,不要封闭 在开源社区中,开放的一个重要意义是社区内的沟通、讨论应该是透明、包容并且方便所有成员访问的。这意味着社区中的任何人都应该能够参与讨论和决策过…...

数据中台架构体系理解
目前,大部分企业更倾向于数据集中采集、存储,并应用分层建设。这种方式一方面有利于应用系统的快速部署,另一方面也保证了数据的集中管理与运营,体现数据的资产、资源属性。 数据中台的出现弥补了数据开发和应用开发之间由于开发…...

高并发性能指标:QPS、TPS、RT、并发数、吞吐量
QPS(每秒查询) QPS:Queries Per Second意思是“每秒查询率”,一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 互联网中,作为域名系统服务器的机器的性…...