Nginx介绍及使用
1.Nginx介绍
Nginx是一款开源的、高性能的HTTP和反向代理服务器
1.正向代理和反向代理
正向代理(代理客户端)是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求,代理服务器将请求转发给目标服务器,并将目标服务器的响应返回给客户端
反向代理(代理服务端)客户端的请求首先发送到反向代理服务器,反向代理服务器再将请求转发到后端的服务器。后端服务器处理请求后,将响应返回给反向代理服务器,反向代理服务器再将响应返回给客户端。
2.负载均衡(Load Balancing)
负载均衡用于在多个服务器之间分配客户端的请求,以优化资源利用、提高系统的可用性和可靠性。
主要功能
-
流量分配:
-
根据预设的算法(如轮询、最少连接、加权等),将客户端的请求分配到不同的服务器上,避免某一台服务器过载。
-
常见的算法包括:
-
轮询(Round Robin):按顺序依次分配请求。
-
最少连接(Least Connections):优先分配到当前连接数最少的服务器。
-
加权轮询(Weighted Round Robin):根据服务器的权重分配请求。
-
加权最少连接(Weighted Least Connections):结合权重和连接数分配请求。
-
IP哈希(IP Hash):根据客户端的IP地址进行哈希计算,将请求分配到固定的服务器。
-
-
-
故障转移(Failover):
-
当某一台服务器出现故障时,能够自动将流量切换到其他健康的服务器上,确保服务的持续可用。
-
负载均衡器会定期检查后端服务器的健康状态,自动移除故障服务器,并重新分配流量。
-
3.Nginx
主要特点
-
高性能:
-
Nginx采用事件驱动的异步非阻塞架构,能够处理大量的并发连接,性能优于传统的Apache服务器。
-
它可以轻松处理数万个并发连接,适合高流量的网站。
-
-
反向代理和负载均衡:
-
Nginx可以作为反向代理服务器,将客户端请求转发到后端的多个服务器上,并根据配置的策略进行负载均衡。
-
支持多种负载均衡算法,如轮询、最少连接、IP哈希等。
-
-
静态文件服务:
-
Nginx对静态文件(如HTML、CSS、JavaScript、图片等)的处理非常高效,可以直接从磁盘读取文件并返回给客户端,减少后端服务器的负担。
-
2.Nginx启动和停止
1. 启动 Nginx
sudo systemctl start nginx
sudo nginx
-
说明:启动 Nginx 服务。
2. 停止 Nginx
bash复制
sudo systemctl stop nginx
或者
bash复制
sudo nginx -s stop
-
说明:立即停止 Nginx 服务。
3. 重启 Nginx
bash复制
sudo systemctl restart nginx
或者
bash复制
sudo nginx -s reload
-
说明:重新加载 Nginx 配置文件而不中断现有连接。
4. 重新加载配置文件
bash复制
sudo nginx -s reload
-
说明:重新加载 Nginx 配置文件而不中断现有连接。如果配置文件有语法错误,Nginx 会拒绝加载。
3.Nginx配置
/etc/nginx/nginx.conf
nginx.conf
├── 全局块
├── events 块
└── http 块
├── 通用设置(日志、MIME等)
├── server 块(一个网站)
│ ├── listen / server_name
│ ├── location /(静态文件或反向代理)
│ └── error_page
└── ...
# 全局块
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;# 事件块
events {worker_connections 1024;
}# HTTP 块
http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;keepalive_timeout 65;# 1️⃣ 定义后端服务集群(upstream)upstream my_backend {server 127.0.0.1:8081 weight=3 max_fails=3 fail_timeout=30s;server 127.0.0.1:8082 weight=1;}# 服务器块server {listen 80;server_name localhost;# 位置块location / {root /usr/share/nginx/html;index index.html index.htm;}# 错误页error_page 404 /404.html;location = /404.html {root /usr/share/nginx/html;}# 反向代理示例location /api/ {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
proxy_set_header Host $host;
-
proxy_set_header指令用于设置转发请求时的 HTTP 头。 -
Host $host;表示在转发请求时,将原始请求的Host头设置为$host(即客户端请求的域名或 IP 地址)。这确保后端服务器能够正确处理请求,因为它知道请求原本是针对哪个域名的。
proxy_set_header X-Real-IP $remote_addr;
-
这行配置设置了
X-Real-IP头,值为$remote_addr,即客户端的真实 IP 地址。 -
由于 Nginx 作为代理服务器,后端服务器看到的请求来源是 Nginx 的 IP 地址(通常是
127.0.0.1)。通过设置X-Real-IP,后端服务器可以知道实际发起请求的客户端 IP 地址。
| 用途 | 配置示例 |
|---|---|
| 静态文件服务 | location / { root /path/to/html; } |
| 反向代理 | proxy_pass http://backend; |
| 负载均衡 | upstream backend { server 127.0.0.1:8001; server 127.0.0.1:8002; } |
| HTTPS 配置 | 使用 listen 443 ssl; 和 ssl_certificate 等参数 |
3.Nginx安装
1. 什么是 --with-stream?
这个参数是用来启用 Nginx 的 Stream 模块的。
-
默认情况下,Nginx 只支持 HTTP、HTTPS 等基于应用层的协议。
-
加上
--with-stream,你就可以让 Nginx 作为 TCP 或 UDP 的反向代理使用,比如:-
代理 MySQL、Redis、FTP 等 TCP 服务
-
或者代理 DNS、QUIC 等 UDP 服务
-
2. 源码安装 Nginx 并启用 --with-stream
1 下载官方 Nginx 源码包:
wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0
2. 配置编译选项(重点是加上 --with-stream):
./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-stream \ --with-stream_ssl_module
3. 编译并安装:
make -j$(nproc) sudo make install
安装完成后,nginx 会被装在 /usr/local/nginx 下。
4.验证安装是否成功
/usr/local/nginx/sbin/nginx -V
#启动 nginx:sudo /usr/local/nginx/sbin/nginx#然后查看是否启动成功:ps aux | grep nginx
5.设置 nginx 命令软链接(可选)
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
以后就可以直接用 nginx 命令了。
4.Nginx使用
1.准备多个后端服务
方法1:使用 nc(netcat)模拟 TCP 服务
使用 nc 模拟两个简单的 TCP 服务,分别在端口 5001 和 5002 上监听。
# 模拟两个 TCP 后端服务器(不同端口)
nc -lk 5001 <<< "hello from backend 1"
nc -lk 5002 <<< "hello from backend 2"
-
-l:监听模式。 -
-k:在连接关闭后继续监听。 -
<<<:将字符串作为输入传递给nc。
这样,你就有两个简单的 TCP 服务,分别在 5001 和 5002 上监听。
2. 配置 Nginx 的 stream 负载均衡
编辑你的 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf,添加如下内容(保留原来的 events {} 块):
stream {upstream backend_group {least_conn; # 负载均衡策略:最少连接,可改为 round-robin(默认)server 127.0.0.1:5001 weight=1 max_fails=2 fail_timeout=20s;server 127.0.0.1:5002 weight=2 max_fails=4 fail_timeout=40s;# fail_timeout 多长时间内允许服务器失败的次数达到 max_fails}server {listen 6000;proxy_pass backend_group;proxy_connect_timeout 3s; # 设置 Nginx 与后端服务器建立连接的超时时间tcp_nodelay on; # 禁用 Nagle 算法}
}
nginx -t
sudo nginx -s reload
3.测试负载均衡是否生效
使用 telnet 或 netcat 连接 Nginx 暴露的端口:
nc 127.0.0.1 6000
多次连接,或者从多个终端连接,你应该会轮流连接到 5001 和 5002,分别输出不同的 "hello from backend"。
for i in {1..10}; do nc 127.0.0.1 6000; done
观察输出是否轮流从两个后端返回。
5.查看网络连接状态
sudo netstat -tanp
是一个常用的 Linux 命令,用于显示当前系统中所有网络连接的状态。这个命令可以帮助你查看哪些进程正在监听特定端口,以及当前的网络连接情况。
命令解释
-
netstat:显示网络连接、路由表、接口统计等网络相关信息。 -
-t:显示 TCP 连接。 -
-a:显示所有网络连接(包括监听和非监听状态)。 -
-n:显示数字形式的地址和端口,而不是解析为域名或服务名称。 -
-p:显示每个连接的进程 ID 和进程名称。
相关文章:
Nginx介绍及使用
1.Nginx介绍 Nginx是一款开源的、高性能的HTTP和反向代理服务器 1.正向代理和反向代理 正向代理(代理客户端)是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求,代理服务器将请求转发给目标服…...
使用PyQt5绘制水波浪形的柱状显示流量—学习QTimer+QPainterPath
前言:进入学习Python开发上位机界面的第二阶段,学习如何开发自定义控件,从常用的控件入手学习,本期主要学习如何使用PyQt5绘制水波浪形的柱状显示流量。但是最后我放弃了,因为水波的效果达不到我想要的。 1. 明确想要…...
C++蓝桥杯实训篇(二)
片头 嗨咯~小伙伴们!今天我们来一起学习算法和贪心思维,准备好了吗?咱们开始咯! 第1题 数位排序 对于这道题,我们需要自己写一个排序算法,也就是自定义排序,按照数位从小到大进行排序。 举一…...
如何将本地更改的README文件同步到自己的GitHub项目仓库
如何将本地更改的 README 文件同步到 GitHub 仓库 在你 git clone 下来的工程目录下: 先使用 robocopy YOUR\SOURCE\CODE\DIR YOUR\GIT\CLONE\DIR /E /XD .git /DCOPY:T 将你的更改Copy到你git下来的工程中(上面的命令会自动处理,例如只会C…...
无人驾驶是自动化还是智能化?
这是一个由小米Su-7和人形机器人问题引起的思考:努力决定了下限,认知决定了上限。 一、无人驾驶既涉及自动化,也涉及智能化,这两者在无人驾驶系统中应该是相互融合、相辅相成的1、自动化(Automation) 自动化…...
实操(不可重入函数、volatile、SIGCHLD、线程)Linux
1 不可重入函数 为什么会导致节点丢失内存泄露?main函数在执行insert,但是没执行完就被信号中断了,又进了这个函数里,所以这个insert函数在不同的执行流中,同一个函数被重复进入,如果没有问题,…...
【Flask开发】嘿马文学web完整flask项目第2篇:2.用户认证,Json Web Token(JWT)【附代码文档】
教程总体简介:2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…...
Ubuntu 下搭建 MCU 开发环境全流程指南(以 STM32 为例)
在嵌入式开发中,许多工程师都习惯于在 Windows 平台使用 Keil、IAR 等 IDE。然而,随着对自动化、可定制性以及开放工具链的需求增长,越来越多的开发者开始尝试在 Linux 环境下进行 MCU 开发。 本篇文章将以 STM32F1 系列 为例,手把手带你在 Ubuntu 下搭建一个完整的 MCU 开…...
Codecademy—— 交互式编程学习的乐园
一、网站概述 Codecademy 是一家美国在线学习编程知识的网站,它为编程学习者提供了一种全新的学习方式。在如今众多的编程学习平台中,Codecademy 凭借其独特的优势脱颖而出,吸引了全球数百万用户。其目标是帮助更多人轻松学习编程࿰…...
Python----计算机视觉处理(Opencv:道路检测之车道线拟合)
完整版: Python----计算机视觉处理(Opencv:道路检测完整版:透视变换,提取车道线,车道线拟合,车道线显示) 一、获取左右车道线的原始位置 导入模块 import cv2 import numpy as np from matplot…...
OpenCV 图形API(13)用于执行两个矩阵(或图像)逐元素乘法操作的函数mul()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 计算两个矩阵的每个元素的缩放乘积。 mul函数计算两个矩阵的逐元素乘积: dst ( I ) saturate ( scale ⋅ src1 ( I ) ⋅ src2 ( I ) ) …...
2025高频面试算法总结篇【二叉树】
文章目录 直接刷题链接直达非递归实现求二叉树的深度非递归从左至右打印一颗二叉树中的所有路径判断平衡二叉树二叉搜索树中第K小的元素二叉树的完全性检验根据前&中序遍历结果重建二叉树二叉树的最近公共祖先二叉树的直径二叉树的遍历 直接刷题链接直达 非递归实现求二叉…...
如何理解神经网络中的“分段线性单元”,优雅解析前向和反向传播
什么是非线性 非线性本质上指的是一个系统或函数中输入与输出之间的关系不呈现简单的比例关系,也就是说,输出不只是输入的线性组合 ( 比如 y k 1 x 1 k 2 x 2 b ) (比如yk1x1k2x2b) (比如yk1x1k2x2b)。下面详细解释这个概念: 缺乏叠加性…...
WVP-GB28181摄像头管理平台存在弱口令
免责声明:本号提供的网络安全信息仅供参考,不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我联系,我将尽快处理并删除相关内容。 漏洞描述 攻击者可利用漏洞获取当前系统管…...
开源身份和访问管理方案之keycloak(三)keycloak健康检查(k8s)
文章目录 开源身份和访问管理方案之keycloak(三)keycloak健康检查启用运行状况检查 健康检查使用Kubernetes下健康检查Dockerfile 中 HEALTHCHECK 指令 健康检查Docker HEALTHCHECK 和 Kubernetes 探针 开源身份和访问管理方案之keycloak(三&…...
STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步
主题内容教学目的/扩展视频看门狗什么是看门狗,原理分析,启动喂狗方法,读标志位。熟悉在程序里用看门狗。 师从洋桃电子,杜洋老师 📑文章目录 一、看门狗核心原理1.1 工作原理图解1.2 经典水桶比喻 二、STM32看门狗双雄…...
Android学习总结之service篇
引言 在 Android 开发里,Service 与 IntentService 是非常关键的组件,它们能够让应用在后台开展长时间运行的操作。不过,很多开发者仅仅停留在使用这两个组件的层面,对其内部的源码实现了解甚少。本文将深入剖析 Service 和 Inte…...
网络安全的挑战与防护策略
随着互联网的高速发展,人们的生活、学习和工作已离不开网络。然而,便利的背后也潜藏着巨大的安全隐患。从数据泄露、账户被盗,到网络攻击、系统瘫痪,网络安全问题层出不穷,影响范围从个人用户到国家机构。 网络安全&a…...
spring mvc异步请求 sse 大文件下载 断点续传下载Range
学习连接 异步Servlet3.0 Spring Boot 处理异步请求(DeferredResult 基础案例、DeferredResult 超时案例、DeferredResult 扩展案例、DeferredResult 方法汇总) spring.io mvc Asynchronous Requests 官网文档 spring.io webflux&webclient官网文…...
Opencv计算机视觉编程攻略-第十节 估算图像之间的投影关系
目录 1. 计算图像对的基础矩阵 2. 用RANSAC 算法匹配图像 3. 计算两幅图像之间的单应矩阵 4. 检测图像中的平面目标 图像通常是由数码相机拍摄的,它通过透镜投射光线成像,是三维场景在二维平面上的投影,这表明场景和它的图像之间以及同一…...
14.流程自动化工具:n8n和家庭自动化工具:node-red
n8n 安装 docker方式 https://docs.n8n.io/hosting/installation/docker/ #https://hub.docker.com/r/n8nio/n8n docker pull n8nio/n8n:latest docker rm -f n8n; docker run -it \ --network macvlan --hostname n8n \ -e TZ"Asia/Shanghai" \ -e GENERIC_TIME…...
图形渲染: tinyrenderer 实现笔记(Lesson 1 - 4)
目录 项目介绍环境搭建Lesson 1: Bresenham’s Line Drawing Algorithm(画线算法)Lesson 2: Triangle rasterization 三角形光栅化Scanline rendering 线性扫描Modern rasterization approach 现代栅格化方法back-face culling 背面剔除 Lesson 3: Hidde…...
大规模硬件仿真系统的编译挑战
引言: 随着集成电路设计复杂度的不断提升,硬件仿真系统在现代芯片设计流程中扮演着越来越重要的角色。基于FPGA(现场可编程门阵列)的商用硬件仿真系统因其灵活性、全自动化、高性能和可重构性,成为验证大规模集成电路设…...
Kotlin问题汇总
Kotlin问题汇总 真机安装调试 查看真机的Android版本,将build.gradle文件中的minSdk改为手机的Android版本,点Sync Now更新设置 apk安装失败 在gradle.properties全局配置中设置android.injected.testOnlyfalse Unresolved reference: 在activity_…...
记一次常规的网络安全渗透测试
目录: 前言 互联网突破 第一层内网 第二层内网 总结 前言 上个月根据领导安排,需要到本市一家电视台进行网络安全评估测试。通过对内外网进行渗透测试,网络和安全设备的使用和部署情况,以及网络安全规章流程出具安全评估报告。本…...
【8】搭建k8s集群系列(二进制部署)之安装work-node节点组件(kubelet)
一、下载k8s二进制文件 下载地址: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG -1.20.md 注:打开链接你会发现里面有很多包,下载一个 server 包就够了,包含了 Master 和 Worker Node 二进制文件。…...
Sentinel-自定义资源实现流控和异常处理
目录 使用SphU的API实现自定义资源 BlockException 使用SentinelResource注解定义资源 SentinelResourceAspect 使用Sentinel实现限流降级等效果通常需要先把需要保护的资源定义好,之后再基于定义好的资源为其配置限流降级等规则。 Sentinel对于主流框架&#…...
使用 VIM 编辑器对文件进行编辑
一、VIM 的两种状态 VIM(vimsual)是 Linux/UNIX 系列 OS 中通用的全屏编辑器。vim 分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理;而编辑状态则是用来编辑文本资料&…...
visual studio 2022的windows驱动开发
在visual studio2022中,若在单个组件中找不到Windows Driver Kit (WDK)选项,可通过提升vs版本解决,在首次选择时选择WDM 创建好项目在Source Files文件夹中创建一个test.c文件,并输入以下测试代码: #include <ntdd…...
基于大数据的美团外卖数据可视化分析系统
【大数据】基于大数据的美团外卖数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过对海量外卖数据的深度挖掘与分析,能够为美团外卖平台提供运营决策支…...
