Nginx 功能简介及代理配置

news2024/11/17 0:02:09

一、Nginx功能简介

Nginx是一款开源的高性能HTTP和反向代理服务器,具有轻量级的设计、高并发能力、内存占用低以及配置简单等特点,并且支持热部署。以下是Nginx的主要功能:

  • 静态内容服务:Nginx可以作为一个高性能的静态文件服务器,提供静态网页、图片、视频和其他静态内容的快速传输。
  • 负载均衡:Nginx支持多种负载均衡算法,如轮询、最小连接数、IP哈希等,可以实现请求的均衡分发,提高后端服务器的处理能力。
    反向代理:Nginx能够作为反向代理服务器,将客户端的请求转发给后端的应用服务器,隐藏真实的后端服务器,提升安全性和性能。
  • 动态内容服务:Nginx可以与各种后端应用服务器集成,如PHP、Node.js、Python等,实现动态内容的处理和传递。
  • SSL/TLS支持:Nginx支持SSL/TLS协议,可以提供安全的HTTPS服务,并支持常见的SSL功能,如密钥、证书的管理和配置。
  • URL重写:Nginx提供强大的URL重写功能,可以根据需求对URL进行修改、重定向和映射,实现网站的美化和优化。
  • 缓存加速:Nginx可以使用内存、硬盘或者SSD等作为缓存存储空间,能够缓存静态内容和动态内容,并提供缓存的控制和管理。
  • Gzip压缩:Nginx支持Gzip压缩算法,可以在传输过程中对内容进行压缩,减少传输的数据量,提升网站的性能。
  • 日志记录:Nginx可以将请求的访问日志和错误日志进行记录和保存,方便后续的分析和故障排查。
  • 高并发支持:Nginx采用异步非阻塞事件模型,能够同时处理成千上万的并发连接,适用于高并发的场景,如Web网站、API服务等。

二、Nginx 配置文件 nginx.conf 结构

Nginx的配置文件结构清晰,采用嵌套块结构,每个块由一对大括号{}包围,并通过缩进来表示层次关系。以下是Nginx配置文件的主要结构详解:

1. 全局块

位置:配置文件开头至events块前。
功能:设置影响整个Nginx服务器的配置指令。
常见指令:

  • user:设置运行用户。
  • worker_processes:定义工作进程数。
  • error_log:设置错误日志路径和级别。
  • pid:指定PID文件路径。

2. events块

功能:影响Nginx服务器的网络连接。
常见指令:

  • worker_connections:定义每个工作进程的最大连接数。
  • use:定义使用的事件处理器类型。

3. http块

功能:包含绝大多数功能和模块配置,如代理、缓存、日志定义。
结构:可包含http全局块、多个server块。
常见指令:

  • include:引入其他配置文件。
  • default_type:设置默认MIME类型。
  • log_format:定义日志格式。
  • access_log:设置访问日志路径和格式。

4. server块

功能:定义虚拟主机的行为,如监听端口、服务器名称、文档根目录。
常见指令:

  • listen:设置监听端口。
  • server_name:设置服务器名称。
  • root:设置文档根目录。

5. location块

功能:定义URL路径的行为,如路径匹配、文件类型、反向代理、缓存。
常见指令:

  • root:设置请求的根文件系统路径。
  • index:设置默认索引文件。
  • proxy_pass:设置反向代理目标地址。

location 详细配置:Nginx location 配置:从入门到精通

6. 其他块和指令

  • upstream块:定义后端服务器组,用于负载均衡。
  • if指令:用于条件判断配置。
    在这里插入图片描述

配置示例:

# Nginx全局配置  
user nginx; # 运行Nginx的用户  
worker_processes auto; # 根据CPU核心数自动选择工作进程数  
error_log /var/log/nginx/error.log; # 错误日志文件的路径  
pid /run/nginx.pid; # PID文件的路径  
  
# 事件处理配置  
events {  
    worker_connections 1024; # 每个工作进程可以处理的最大连接数  
    # 其他事件相关配置(如use指令等,根据需要配置)  
}  
  
# HTTP配置  
http {  
    include /etc/nginx/mime.types; # 引入MIME类型文件  
    default_type application/octet-stream; # 默认的MIME类型  
  
    # 日志配置  
    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; # 开启高效文件传输模式  
    tcp_nopush on; # 减少网络报文段的数量  
  
    # 连接超时设置  
    keepalive_timeout 65; # 长连接超时时间  
  
    # Gzip压缩配置  
    gzip on; # 开启gzip压缩  
    gzip_min_length 1k; # 最小压缩文件大小  
    gzip_comp_level 6; # 压缩级别(1-9)  
  
    # 虚拟主机配置  
    server {  
        listen 80; # 监听80端口  
        server_name example.com; # 服务器名称  
  
        # 访问根目录配置  
        root /var/www/example.com; # 网站根目录  
        index index.html index.htm; # 默认索引文件  
  
        # 反向代理配置(如果需要)  
        location /api/ {  
            proxy_pass http://backend_servers/; # 转发请求到后端服务器组  
            proxy_set_header Host $host; # 设置请求头信息  
            proxy_set_header X-Real-IP $remote_addr; # 设置真实IP地址  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置代理IP地址  
        }  
  
        # 其他location配置(如静态文件服务、URL重写等)  
        # ...  
  
        # 错误页面配置(可选)  
        error_page 404 /404.html; # 404错误页面  
  
        # SSL配置(如果需要HTTPS支持)  
        # ...  
    }  
  
    # 其他server配置(如多个虚拟主机)  
    # ...  
  
    # 上游服务器配置(如果需要负载均衡)  
    upstream backend_servers {  
        server backend1.example.com; # 后端服务器1  
        server backend2.example.com; # 后端服务器2  
        # 可以添加更多后端服务器,并配置权重、持久化等参数  
    }  
  
    # 其他HTTP配置(如模块加载、变量定义等)  
    # ...  
}

三、负载均衡配置

Nginx的负载均衡功能允许将传入的请求分发到一组后端服务器上,以优化性能和可用性。以下是负载均衡配置的基本步骤和要点:

1. 定义upstream块

在Nginx的配置文件中,使用upstream指令定义一个后端服务器组。例如:


upstream backend_servers {  
    server backend1.example.com weight=5;  
    server backend2.example.com weight=3;  
    server 192.168.1.1 backup;  
}

这里定义了三个后端服务器,并分别设置了权重。权重决定了请求分发到各个服务器的比例。

2. 在server块中使用proxy_pass

在Nginx的server块中,使用proxy_pass指令将请求转发到之前定义的upstream块。例如:

server {  
    listen 80;  
    server_name example.com;  
  
    location / {  
        proxy_pass http://backend_servers;  
        # 其他配置...  
    }  
}

3. 负载均衡算法

Nginx支持多种负载均衡算法,包括:

  • 轮询(round-robin):默认算法,按照服务器在配置文件中出现的顺序依次将请求转发到每台服务器。
upstream backend_servers {  
    server backend1.example.com;  
    server backend2.example.com;  
    server backend3.example.com;  
}  
  • 权重(weight):根据配置的权重值,将请求更多地转发到权重较高的服务器。
upstream backend_servers {  
    server backend1.example.com weight=2;  
    server backend2.example.com;  # 默认权重为1  
    server backend3.example.com weight=3;  
}  
 
  • 最少连接(least_conn):将请求转发到当前连接数最少的服务器。
upstream backend_servers {
	least_conn;  
    server backend1.example.com;  
    server backend2.example.com;  
}  
  • IP哈希(ip_hash):根据客户端IP的哈希值将请求转发到固定的服务器,确保来自同一IP的请求始终被转发到同一台服务器。
upstream backend_servers {  
    ip_hash;  
    server backend1.example.com;  
    server backend2.example.com;  
}  

可以在upstream块中使用相应的指令来指定负载均衡算法。

三、反向代理配置

Nginx 反向代理是一种将客户端的请求转发给后端服务器的方式,通过配置Nginx,可以实现负载均衡、缓存、HTTPS支持等功能,从而提高网站的性能和安全性。

  1. 基本配置结构
    一个Nginx配置文件主要由多个server块组成,每个server块定义一个虚拟服务器。
    每个server块内可以有多个location块,用于匹配不同的URL路径,并设置相应的代理规则。
  2. 基本配置指令
  • listen: 指定Nginx监听的端口号,默认为80端口。
  • server_name: 设置Nginx服务的域名或IP地址。
  • location: 用于匹配特定的请求路径,并设置相应的代理规则。
  • proxy_pass: 设置代理规则,将匹配到的请求转发到指定的后端服务器地址和端口。
  1. 反向代理配置示例

以下是一个简单的Nginx反向代理配置示例:

http {  
    upstream backend_servers {  
        server backend1.example.com;  
        server backend2.example.com;  
        # 可以添加更多后端服务器  
    }  
  
    server {  
        listen 80;  
        server_name example.com;  
  
        location / {  
            proxy_pass http://backend_servers;  
            proxy_set_header Host $host;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        }  
  
        # 其他location块配置...  
    }  
  
    # 其他server块配置...  
}

在这个示例中:

  • upstream块用于定义后端服务器组,可以包含多个后端服务器地址。
  • server块定义了Nginx服务的监听端口和域名。
  • location /块用于匹配所有请求,并将它们转发到后端服务器组。
  • proxy_set_header指令用于设置请求头信息,以便后端服务器能够获取到客户端的真实信息。

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

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

相关文章

笔记 | 软件工程01:从程序到软件

1 软件工程知识域 2 程序 2.1 何为程序及程序的质量要求 何为程序: 理解:软件工程可能就是在弥补OOP语言与自然语言之间还存在的鸿沟 2.1.1 程序质量的内在和外在体现 2.1.2 程序质量的语法和语义体现 2.2 编写代码的基本原则 2.3 程序质量保证方法 …

软件三班20240605

文章目录 1.创建工程和模块2.添加 web支持3.创建前端代码4.添加servlet 依赖5. 代码6.案例2 1.创建工程和模块 2.添加 web支持 方法1 方法2 3.创建前端代码 4.添加servlet 依赖 5. 代码 <!DOCTYPE html> <html lang"en"> <head><meta c…

xml创建模型组合体

XML创建模型组合体 创建步骤模型准备模型处理模型文件XML编写 效果 创建步骤 模型准备 CAD 提供的原始模型如下&#xff1a; 该模型存在的问题&#xff1a; 单位问题&#xff1a;CAD出图的是 mm 为单位&#xff0c;但是 mujoco 建模这边用的是以 m 为单位的&#xff1b;原点…

arcpy批量导出图且图名为shp属性值

1.打开arcmap加载需要导出的图。需求是逐村显示“村界内图斑”并导出为图&#xff0c;在导出每个村时不显示周围的村和“村界内图斑” 2.arcmap上方空白处右键打开“数据驱动页面” 3.在“数据驱动页面”工具条点击第一个图标&#xff0c;打开“设置数据驱动页面” 4.在“设置…

关于Golang中自定义包的简单使用-Go Mod

1. go env 查看 GO111MODULE 是否为 on&#xff0c;不是修改成on go env -w GO111MODULEon 2 .自定义包的目录格式 3. test.go 内容 package calc func Add(x, y int) int { // 首字母大写表示公有方法return x y }func Sub(x, y int) int {return x - y } 4.生成calc目…

idea 中:运行 Application 时出错。命令行过长

一、问题描述&#xff1a; idea 导入新项目&#xff0c;在编译后&#xff0c;运行项目时&#xff0c;报以下错误&#xff1a; 14:47 运行 Application 时出错运行 Application 时出错。命令行过长。通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行。二、问题…

【IC验证】一文速通多通道数据整型器(MCDF)

目录 01 README 02 MCDF设计结构 2.1 功能描述 2.2 设计结构 2.3 接口与时序 2.3.1 系统信号接口 2.3.2 通道从端接口 2.3.3 整形器接口 2.3.4 控制寄存器接口 2.3.4.1 接口时序图 2.3.4.2 各数据位信息 03 验证框图 3.1 reg_pkg 3.1.1 reg_trans 3.1.2 reg_driv…

uniPush2.0消息推送(云对象)

1.创建uniCloud云开发环境 关联云服务空间&#xff08;没有云空间到官网上创建&#xff09;步骤如下 2. index.obj.js代码 &#xff0c;然后上传部署 // 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj // jsdoc语法提示教程&#xff1a;https://ask.dc…

YOLOv9改进策略 | Conv篇 | 利用YOLOv10提出的SCDown魔改YOLOv9进行下采样(附代码 + 结构图 + 添加教程)

一、本文介绍 本文给大家带来的改进机制是利用YOLOv10提出的SCDown魔改YOLOv9进行下采样,其是更高效的下采样。具体而言,其首先利用点卷积调整通道维度,然后利用深度卷积进行空间下采样。这将计算成本减少到和参数数量减少到。同时,这最大限度地保留了下采样过程中的信息,…

Windows Server FTP详解

搭建&#xff1a; Windows Server 2012R2 FTP服务介绍及搭建_windows2012server r2ftp怎么做&#xff1f;-CSDN博客 问题&#xff1a; https://www.cnblogs.com/123525-m/p/17448357.html Java使用 被动FTP&#xff08;PASV&#xff09; 被动FTP模式在数据连接建立过程中…

数学建模之MATLAB入门教程(上)

前言&#xff1a; • MATLAB是美国Math Works公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 • MATLAB将数值分析、矩阵计算、科学数据可视化以及非线性动…

深入分析 Android BroadcastReceiver (一)

文章目录 深入分析 Android BroadcastReceiver (一)1. Android BroadcastReceiver 设计说明1.1 BroadcastReceiver 的主要用途 2. BroadcastReceiver 的工作机制2.1 注册 BroadcastReceiver2.1.1 静态注册2.1.2 动态注册 3. BroadcastReceiver 的生命周期4. 实现和使用 Broadca…

【面试笔记】嵌入式软件工程师,汽车电子软件相关

文章目录 1. C语言基础1.1 const1.2 static1.3 回调函数的用法1.4 宏定义1.5 编译、链接过程1.6 堆与栈的区别&#xff1f;1.7 简单的字符串算法题&#xff0c;C语言实现1.7.1 给定一个字符串&#xff0c;按顺序筛选出不重复的字符组成字符串&#xff0c;输出该字符串1.7.2 给定…

三相五柱变压器饱和Simulink仿真

此示例说明了三相五柱变压器的饱和情况&#xff0c;并将专用电力系统模型与基于 Simscape 的物理模型进行了比较。 顶部电路使用 SimPowerSytems 模块来实现连接到 315 kV 电网的 300 MVA、315 kV/120 kV/25 kV、Yg/Yg/D 变压器。在不平衡电压条件下&#xff0c;与三柱变压器相…

opencv进阶 ——(十一)基于RMBG实现生活照生成寸照

实现步骤 1、检测人脸&#xff0c;可以使用opencv自带的级联分类器或者dlib实现人脸检测 2、放大人脸范围&#xff0c;调整到正常寸照尺寸 3、基于RMGB算法得到人像掩码 4、生成尺寸相同的纯色背景与当前人像进行ALPHA融合即可 alpha融合实现 void alphaBlend(cv::Mat&…

Python SMTP配置示例中如何处理发送失败?

Python SMTP的加密方式怎么设置&#xff1f;如何设置SMTP服务器&#xff1f; 在Python中&#xff0c;SMTP常被用于发送电子邮件。然而&#xff0c;SMTP配置和使用过程中&#xff0c;难免会遇到发送失败的情况。Aok将探讨在Python SMTP配置示例中如何处理这些发送失败的情况&am…

Redis实战篇——搭建主从复制

Redis实战篇——搭建主从复制 1.Redis主从1.1.主从集群结构1.2.搭建主从集群1.2.1.启动多个Redis实例1.2.2.建立集群1.2.3.测试 1.Redis主从 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战&#xff1a;探索 LLM 预训练的挑战 一、背景 在过往的文章中&#xff0c;我们详细阐述了LLM预训练的数据集、清洗流程、索引格式&#xff0c;以及微调、推理和RAG技术&#xff0c;并介绍了GPU及万卡集群的构建。然而&#xff0c;LLM预训练的具体细节尚待进一…

安卓Zygote进程详解

目录 一、概述二、Zygote如何被启动的&#xff1f;2.1 init.zygote64_32.rc2.2 Zygote进程在什么时候会被重启2.3 Zygote 启动后做了什么2.4 Zygote启动相关主要函数 三、Zygote进程启动源码分析3.1 Nativate-C世界的Zygote启动要代码调用流程3.1.1 [app_main.cpp] main()3.1.2…

0605-JavaSE-单例模式-饿懒汉模式

​​​​​​​ 不能放在方法里面&#xff08;因为每个线程调用都会在方法里面实例化一个locker对象&#xff0c;但不属于同一个对象&#xff09;&#xff0c;然后要用static修饰成静态变量才会起到效果 //单例设计模式 //饿汉模式&#xff1a;在加载类的时候就已经开始创建 /…