Nginx介绍及使用

1.Nginx介绍

Nginx是一款开源的、高性能的HTTP和反向代理服务器

1.正向代理和反向代理

正向代理(代理客户端)是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求,代理服务器将请求转发给目标服务器,并将目标服务器的响应返回给客户端

反向代理(代理服务端)客户端的请求首先发送到反向代理服务器,反向代理服务器再将请求转发到后端的服务器。后端服务器处理请求后,将响应返回给反向代理服务器,反向代理服务器再将响应返回给客户端。

2.负载均衡(Load Balancing)

负载均衡用于在多个服务器之间分配客户端的请求,以优化资源利用、提高系统的可用性和可靠性。

主要功能
  1. 流量分配

    • 根据预设的算法(如轮询、最少连接、加权等),将客户端的请求分配到不同的服务器上,避免某一台服务器过载。

    • 常见的算法包括:

      • 轮询(Round Robin):按顺序依次分配请求。

      • 最少连接(Least Connections):优先分配到当前连接数最少的服务器。

      • 加权轮询(Weighted Round Robin):根据服务器的权重分配请求。

      • 加权最少连接(Weighted Least Connections):结合权重和连接数分配请求。

      • IP哈希(IP Hash):根据客户端的IP地址进行哈希计算,将请求分配到固定的服务器。

  2. 故障转移(Failover)

    • 当某一台服务器出现故障时,能够自动将流量切换到其他健康的服务器上,确保服务的持续可用。

    • 负载均衡器会定期检查后端服务器的健康状态,自动移除故障服务器,并重新分配流量。

3.Nginx

主要特点
  1. 高性能

    • Nginx采用事件驱动的异步非阻塞架构,能够处理大量的并发连接,性能优于传统的Apache服务器。

    • 它可以轻松处理数万个并发连接,适合高流量的网站。

  2. 反向代理和负载均衡

    • Nginx可以作为反向代理服务器,将客户端请求转发到后端的多个服务器上,并根据配置的策略进行负载均衡。

    • 支持多种负载均衡算法,如轮询、最少连接、IP哈希等。

  3. 静态文件服务

    • 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 服务,分别在端口 50015002 上监听。

# 模拟两个 TCP 后端服务器(不同端口)
nc -lk 5001 <<< "hello from backend 1"
nc -lk 5002 <<< "hello from backend 2"
  • -l:监听模式。

  • -k:在连接关闭后继续监听。

  • <<<:将字符串作为输入传递给 nc

这样,你就有两个简单的 TCP 服务,分别在 50015002 上监听。

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.测试负载均衡是否生效

使用 telnetnetcat 连接 Nginx 暴露的端口:

nc 127.0.0.1 6000

多次连接,或者从多个终端连接,你应该会轮流连接到 50015002,分别输出不同的 "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 和进程名称。

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

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

相关文章

复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect

这款模拟复古未来主义显示器效果直接取材于 90 年代赛博朋克电影中的黑客巢穴&#xff0c;将粗糙的屏幕辉光和像素化的魅力强势回归。它精准地模仿了老式阴极射线管显示器&#xff0c;能将任何图像变成故障频出的监控画面或高风险的指挥中心用户界面。和……在一起 2 个完全可编…

[巴黎高师课程] 同步反应式系统(2024-2025)第三课 - Kind 2: 基于SMT的Lustre模型检查器

在2024-2025学期的巴黎高师同步反应式系统(2024-2025)第三课中&#xff0c;详细讨论了基于SMT的Lustre模型检查器Kind 2的工作。本文将提供对Kind 2的介绍。对课程的详细内容&#xff0c;可参考同步反应式系统 简介 本节课讨论了基于SMT&#xff08;Satisfiability Modulo The…

轨道交通装备三维检测与轻量化设计

地铁车身与车灯部件作为轨道交通装备的核心组成部分&#xff0c;其制造精度和性能要求极高。由于它们体积庞大、曲面复杂&#xff0c;传统检测方法在面对这些大型、复杂部件时&#xff0c;不仅耗时费力&#xff0c;而且难以实现全面、精确的测量&#xff0c;难以满足高效、准确…

2025大唐杯仿真1——车联网

车联网 V2N是指车辆与网络 Uu接口是用户设备&#xff08;UE&#xff09;与基站之间的通信接口&#xff0c;用于终端和基站之间的通信 Uu接口可用的是N41频段&#xff0c;归属中国移动 车辆间交互是V2V&#xff0c;频段是PCS PC5接口是一种用于设备间直接通信&#xff08;D2D…

网络编程—TCP/IP模型(TCP协议)

上篇文章&#xff1a; 网络编程—TCP/IP模型&#xff08;UDP协议与自定义协议&#xff09;https://blog.csdn.net/sniper_fandc/article/details/146923934?fromshareblogdetail&sharetypeblogdetail&sharerId146923934&sharereferPC&sharesourcesniper_fand…

python logging模块

以下是 Python 中 logging 模块的基础使用示例和配置说明: 简单配置版(适合快速使用) import logging as log# 基础配置(输出到控制台) log.basicConfig(level=log.DEBUG, # 设置最低日志级别format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

HikariCP 源码核心设计解析与 ZKmall开源商城场景调优实践

HikariCP 作为 Spring Boot 默认数据库连接池&#xff0c;其高性能源于独特的无锁设计、轻量级数据结构和精细化生命周期管理。以下从源码解析与 ZKmall开源商城性能调优两个维度展开&#xff1a; 一、HikariCP 源码核心设计解析 ​无锁并发控制与 ConcurrentBag 容器 ​Concur…

【模型量化】GPTQ 与 AutoGPTQ

GPTQ是一种用于类GPT线性最小二乘法的量化方法&#xff0c;它使用基于近似二阶信息的一次加权量化。 本文中也展示了如何使用量化模型以及如何量化自己的模型AutoGPTQ。 AutoGPTQ&#xff1a;一个易于使用的LLM量化包&#xff0c;带有用户友好的API&#xff0c;基于GPTQ算法(仅…

如何部署DeepSeek企业知识库:

一、核心部署流程 环境准备‌ 安装Ollama框架:官网下载安装包并完成基础配置,需确保安装路径不含中文‌; 硬件要求:根据企业规模选择设备,如小微团队建议i5十代+16GB内存,中大型企业需GPU集群(如NVIDIA A100/H100)‌。 模型选择与下载‌ 通过Ollama下载DeepSeek-R1…

FastAPI依赖注入:链式调用与多级参数传递

title: FastAPI依赖注入:链式调用与多级参数传递 date: 2025/04/05 18:43:12 updated: 2025/04/05 18:43:12 author: cmdragon excerpt: FastAPI的依赖注入系统通过链式调用和多级参数传递实现组件间的解耦和复用。核心特性包括解耦性、可复用性、可测试性和声明式依赖解析…

前沿计组知识入门(四)

Training Large Networks in Parallel 计算机集群上高效训练大型深度神经网络&#xff08;DNN&#xff09;的方法和技术。从神经网络的基本概念出发&#xff0c;逐步深入到并行训练的具体实现策略&#xff0c;包括数据并行、模型并行以及参数服务器的设计等。 研究背景与动机…

Transformer+BO-SVM多变量时间序列预测(Matlab)

TransformerBO-SVM多变量时间序列预测&#xff08;Matlab&#xff09; 目录 TransformerBO-SVM多变量时间序列预测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 本期推出一期高创新模型&#xff0c;基于Transformer提取时序特征后输入S…

SQL BETWEEN 语句详解

SQL BETWEEN 语句详解 概述 SQL BETWEEN 语句是一个用于在 SQL 查询中指定查询条件的重要工具。它允许用户指定一个范围&#xff0c;用于筛选符合特定条件的记录。本文将详细介绍 BETWEEN 语句的用法、示例以及注意事项。 BETWEEN 语句的基本用法 BETWEEN 语句的基本格式如…

AI Agent设计模式三:Routing

概念 &#xff1a;动态路径选择器 ✅ 优点&#xff1a;灵活处理不同类型输入❌ 缺点&#xff1a;路由逻辑复杂度高 from typing import TypedDict from langchain_core.messages import SystemMessage, HumanMessage from langchain_openai import ChatOpenAI from langgraph.…

制造装备物联及生产管理ERP系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装制造装备物联及生产管理ERP系统软件来发挥其高效地信息处理…

`use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405

use_tempaddr 和 temp_valid_lft 和 temp_prefered_lft 笔记250405 以下是 Linux 系统中与 IPv6 临时隐私地址相关的三个关键参数 use_tempaddr、temp_valid_lft 和 temp_prefered_lft 的详细说明及协作关系&#xff1a; &#x1f4dc; 参数定义与功能 参数作用默认值依赖关…

基于Spark的哔哩哔哩舆情数据分析系统

【Spark】基于Spark的哔哩哔哩舆情数据分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python和Django框架进行开发&#xff0c;为了便于广大用户针对舆情进行个性化分析处…

南京大学与阿里云联合启动人工智能人才培养合作计划,已将通义灵码引入软件学院课程体系

近日&#xff0c;南京大学与阿里云宣布启动人工智能人才培养合作计划&#xff0c;共同培养适应未来技术变革、具备跨学科思维的AI创新人才。 基于阿里云在云计算和AI大模型领域的技术优势和南京大学在人工智能领域的学科优势&#xff0c;双方将共同设计兼具前瞻性和应用性的人…

用于解决个人使用的公网ip动态变化问题的解决方案

解决方案 静态ip&#xff08;放弃&#xff09; 申请一个静态ip价格较贵&#xff0c;只有公司可以申请 使用DDNS&#xff08;放弃&#xff09; 通过域名解析到公网ip通过域名访问设备官方光猫不支持DDNS 使用脚本&#xff08;采用&#xff09; 通过脚本获取公网ip通过脚本发送到…