Nginx 功能简介及代理配置

一、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指令用于设置请求头信息,以便后端服务器能够获取到客户端的真实信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QML应用添加网络代理

在QML应用中我们可以通过QNetworkProxy和QNetworkAccessManager类给应用添加网络代理。QNetworkProxy是Qt网络模块中的一个类,用于配置网络请求的代理服务器。通过使用代理服务器,我们可以控制应用程序的网络流量,实现网络请求的转发、监视、和过滤等功能。代理服务器在很多…

【Python】 Python应用的最佳项目结构解析

基本原理 在Python开发中,一个清晰且结构化良好的项目布局对于项目的可维护性、可扩展性和团队协作至关重要。项目结构不仅影响代码的组织方式,还影响到开发流程和部署策略。一个优秀的项目结构应该能够方便地进行模块化开发,易于理解&#…

keil下载及安装(社区版本)

知不足而奋进 望远山而前行 目录 文章目录 前言 Keil有官方版本和社区版本,此文章为社区版本安装,仅供参考。 1.keil MDK 2.keil社区版介绍 3.keil下载 (1)打开进入登录界面 (2)点击下载,跳转到信息页面 (3)填写个人信息,点击提交 (4)点击下载…

巨详细Linux卸载Redis教程

巨详细Linux卸载Redis教程 1、检查系统残留redis数据2、卸载系统残留redis数据 1、检查系统残留redis数据 redis等数据相关中间件安装前一定要进行残留数据检查,排除后期存在的各种隐患。 #检查有没有残留客户端 whereis redis-cli #检查有没有残留服务 whereis r…

上位机图像处理和嵌入式模块部署(f407 mcu中的spi总线操作)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习mcu,一般都是模板和模块之间的接口,比如说串口、usb、eth这种。还有一种接口,更多的是芯片和芯片之…

【Python】 深入理解Pandas中的iloc和loc:数据选择的艺术

基本原理 在Python的Pandas库中,数据选择是数据分析和处理的基础。iloc和loc是两种常用的数据选择方法,它们都允许用户根据索引位置或标签来选择数据。然而,它们在行为和用途上存在一些关键的差异。 iloc iloc是基于整数索引的&#xff0c…

【Modelground】个人AI产品MVP迭代平台(3)——工程化架构设计

文章目录 背景monorepo多项目调试/打包公共静态资源服务公共模型拷贝入项目的public文件夹总结 背景 Modelground中的项目,基本都依赖Mediapipe模型,因此,有很强的需要对Mediapipe进行封装,其余项目都调用这个封装库。从架构上&a…

IIS漏洞

IIS7.5解析漏洞 安装IIS7.5 安装完成之后直接访问浏览器: 安装phpstudy for IIS 安装这个的目的是方便,不用自己去配置 解压开傻瓜式安装即可。然后查看探针: 漏洞原理 IIS7/7.5在Fast-CGI运行模式下,在一个文件路径(/shell.jpg)后面加上/…

linux线程的同步与互斥

前面我们讲了线程的概念以及如何创建与控制线程,接下来我们来对线程的细节与线程之间的问题进行一些讲解; 1.线程的互斥 互斥就是相互排斥,我们可以理解为对立竞争不相容;线程的互斥则是线程之间在对于临界资源竞争时相互排斥的…

openh264 编码命令行工具源码分析

openh264 OpenH264 是由 Cisco 公司发布的一个开源的 H.264 编码和解码器。它提供了命令行工具,可以用于对视频进行编码和解码操作。 使用说明 openh264 编码命令行工具可以使用命令行或 config 配置进行编码操作。编译和使用方法具体可以参考 Windows11编译open…

12_JavaWebAjax

文章目录 Ajax1. 同步请求异步请求2. Ajax实现方式3. 日程管理第四期4. 响应JSON串4.1 响应JSON串格式的一般格式 Appendix Ajax 发送请求的一些方式 1.输入浏览器回车 2.html>head>script/link ​ img标签 3.a标签form表单标签等 用户手动控制提交产生&#xff1b…

实验七、创建小型实验拓扑《计算机网络》

早检到底是谁发明出来的。 一、实验目的 完成本实验后,您将能够: • 设计逻辑网络。 • 配置物理实验拓扑。 • 配置 LAN 逻辑拓扑。 • 验证 LAN 连通性。 二、实验任务 在本实验中,将要求您连接网络设备并配置主机实现基本的网络…

R语言探索与分析20-北京市气温预测分析

一、序言 近年来,人类大量燃烧煤炭、天然气等含碳燃料导致温室气 体过度排放,大量温室气体强烈吸收地面辐射中的红外线,造 成温室效应不断累积,使得地球温度上升,造成全球气候变暖。气象温度的预测一直以来都是天气预…

计算机毕业设计 | 基于node(Koa)+vue 高校宿舍管理系统 宿舍可视化(附源码)

1,绪论 1.1 项目背景 随着科技的发展,智能化管理越来越重要。大学生在宿舍的时间超过了1/3,因此良好的宿舍管理对学生的生活和学习极为关键。学生宿舍管理系统能够合理安排新生分配宿舍,不浪费公共资源,减轻学校管理…

微信扫普通二维码后通过小程序观看的实现

为了方便小程序开发者更便捷地推广小程序,兼容线下已有的二维码,微信公众平台开放扫描普通链接二维码跳转小程序能力。 功能介绍 普通链接二维码,是指开发者使用工具对网页链接进行编码后生成的二维码。 线下商户可不需更换线下二维码&…

【面试干货】SQL中count(*)、count(1)和count(column)的区别与用法

【面试干货】SQL中count(*)、count(1)和count(column)的区别与用法 1、count(*)2、count(1)3、count(column) 💖The Begin💖点点关注,收藏不迷路💖 在SQL中&a…

基于GTX 8B10B编码的自定义PHY上板测试(高速收发器十四)

前文整理了GTX IP,完成了自定义PHY协议的收发模块设计,本文将通过光纤回环,对这些模块上板测试,首先需要编写一个用于生成测试数据的用户模块。 1、测试数据生成模块 本模块用于生成自定义PHY协议的测试数据,通过axi_…

【微信小程序】页面导航

声明式导航 导航到 tabbar 页 tabBar页面指的是被配置为tabBar的页面。 在使用<navigator>组件跳转到指定的tabBar页面时&#xff0c;需要指定url属性和open-type属性&#xff0c;其中&#xff1a; url 表示要跳转的页面的地址&#xff0c;必须以/开头open-type表示跳…

Python轻量级嵌入式关系数据库之apsw使用详解

概要 在现代应用开发中,数据库是一个非常重要的组成部分。SQLite 是一个轻量级的嵌入式关系数据库管理系统,被广泛应用于各种应用程序中。APSW(Another Python SQLite Wrapper)库是一个专门用于访问 SQLite 数据库的 Python 包,它提供了 SQLite 所有的功能,并且比标准库…

usb设备在主机和VMWare虚拟机中切换连接

操作&#xff1a;点击菜单栏虚拟机(M)>可移动设备>选择自己的usb设备>连接(断开与 主机 的连接)