Nginx 配置文件详解(带示例)

摘要

Nginx(发音为“engine-x”)是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中。Nginx 的强大功能和灵活性主要体现在其配置文件中。本文将详细介绍 Nginx 配置文件中各个关键字段的含义、使用方法,并通过详细的示例和清晰的注释帮助大家深入理解如何配置 Nginx 以满足不同的需求,包括静态资源服务、反向代理、负载均衡等常见场景。

一、Nginx 配置文件结构概述

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,其基本结构如下:

# 全局配置
events {
    # 事件驱动配置
}

http {
    # HTTP 服务器相关配置
    server {
        # 虚拟主机配置
        location / {
            # 请求处理配置
        }
    }
}
  • 全局配置:影响整个 Nginx 服务器的配置,如工作进程数、用户权限等。
  • events 块:配置处理连接的方式,如连接数限制、事件驱动模型等。
  • http 块:包含处理 HTTP 协议相关的配置,如服务器(server)配置、缓存策略等。
  • server 块:定义一个虚拟主机,可以配置监听端口、域名、SSL 等。
  • location 块:匹配特定的 URL 路径,并定义对应的处理方式,如静态文件服务、反向代理等。

下面将详细介绍各个字段及其使用。

二、全局配置(Global Configuration)

1. worker_processes

  • 说明:设置 Nginx 工作进程的数量。通常设置为与 CPU 核心数相同或根据服务器负载调整。

  • 示例:

    worker_processes auto; # 自动设置为 CPU 核心数
    

2. worker_connections

  • 说明:设置每个工作进程的最大连接数。

  • 示例:

    events {
        worker_connections 1024; # 每个工作进程最多处理 1024 个连接
    }
    

3. error_log

  • 说明:设置错误日志的路径和级别。

  • 示例:

    error_log /var/log/nginx/error.log warn; # 错误日志级别为 warn
    

4. pid

  • 说明:设置 Nginx 主进程的进程 ID 文件路径。

  • 示例:

    pid /var/run/nginx.pid;
    

三、events 块配置

1. use

  • 说明:指定使用的事件驱动模型,如 epoll(适用于 Linux)、select 等。

  • 示例:

    events {
        use epoll; # 使用 epoll 事件驱动模型
    }
    

2. accept_mutex

  • 说明:是否启用互斥锁,用于负载均衡连接处理。

  • 示例:

    events {
        accept_mutex on; # 启用互斥锁
    }
    

四、http 块配置

1. include

  • 说明:包含其他配置文件,便于模块化管理。

  • 示例:

    http {
        include       mime.types;
        include /etc/nginx/conf.d/*.conf;
    }
    

2. default_type

  • 说明:设置默认的 MIME 类型。

  • 示例:

    http {
        default_type application/octet-stream;
    }
    

3. log_format

  • 说明:定义日志格式。

  • 示例:

    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    }
    

4. access_log

  • 说明:设置访问日志的路径和格式。

  • 示例:

    http {
        access_log  /var/log/nginx/access.log  main;
    }
    

5. sendfile

  • 说明:是否启用 sendfile() 系统调用,用于高效传输文件。

  • 示例:

    http {
        sendfile on;
    }
    

6. tcp_nopush

  • 说明:是否启用 TCP_NOPUSH 或 TCP_CORK 选项,提高网络性能。

  • 示例:

    http {
        tcp_nopush on;
    }
    

7. keepalive_timeout

  • 说明:设置保持连接的超时时间。

  • 示例:

    http {
        keepalive_timeout 65; # 保持连接 65 秒
    }
    

8. types_hash_max_size

  • 说明:设置 MIME 类型哈希表的最大大小。

  • 示例:

    http {
        types_hash_max_size 2048;
    }
    

五、server 块配置

1. listen

  • 说明:设置服务器监听的端口。

  • 示例:

    server {
        listen 80; # 监听 80 端口
    }
    

2. server_name

  • 说明:设置服务器名称,可以是域名或 IP 地址。

  • 示例:

    server {
        server_name example.com www.example.com;
    }
    

3. root

  • 说明:设置请求的根目录,用于静态文件服务。

  • 示例:

    server {
        root /var/www/html;
    }
    

4. index

  • 说明:设置默认的首页文件。

  • 示例:

    server {
        index index.html index.htm;
    }
    

5. location

  • 说明:匹配特定的 URL 路径,并定义对应的处理方式。
示例 1:静态文件服务
server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    location / {
        try_files $uri $uri/ =404;
    }
}
示例 2:反向代理
server {
    listen 80;
    server_name example.com;

    location /api/ {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
示例 3:负载均衡
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

6. rewrite

  • 说明:重写 URL。

  • 示例:

    server {
        listen 80;
        server_name example.com;
    
        location /old-url {
            rewrite ^/old-url(.*)$ /new-url$1 permanent;
        }
    }
    

7. return

  • 说明:直接返回状态码和重定向地址。

  • 示例:

    server {
        listen 80;
        server_name example.com;
    
        location / {
            return 301 https://www.example.com$request_uri;
        }
    }
    

六、location 块详细配置

1. try_files

  • 说明:尝试查找指定路径的文件,如果不存在则返回指定的状态码。

  • 示例:

    location / {
        try_files $uri $uri/ /index.html;
    }
    

2. aliasroot

  • 说明aliasroot 都可以用于指定文件路径,但区别在于 alias 是替换匹配的,而 root 是附加在匹配的后面。

  • 示例:

    location /images/ {
        alias /var/www/images/;
    }
    
    location /static/ {
        root /var/www/;
    }
    
    • 对于 /images/logo.png,实际路径为 /var/www/images/logo.png
    • 对于 /static/css/style.css,实际路径为 /var/www/static/css/style.css

3. proxy_pass

  • 说明:将请求反向代理到另一个服务器。

  • 示例:

    location /api/ {
        proxy_pass http://backend_server;
    }
    

4. proxy_set_header

  • 说明:设置代理请求的头部信息。

  • 示例:

    location /api/ {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    

5. expires

  • 说明:设置 HTTP 缓存过期时间。

  • 示例:

    location /static/ {
        expires 30d; # 缓存 30 天
    }
    

七、总结

Nginx 的配置文件是一个强大的工具,通过合理配置各个字段,可以实现从简单的静态资源服务到复杂的反向代理和负载均衡等多种功能。本文详细介绍了 Nginx 配置文件中各个关键字段的含义、使用方法和示例,包括全局配置、events 块配置、http 块配置、server 块配置以及 location 块配置。通过掌握这些配置方法,大家可以灵活地根据实际需求调整 Nginx 的行为,充分发挥其高性能和灵活性。

在配置 Nginx 时,需要注意以下几点:

1.安全性:确保配置文件中的路径、权限等设置合理,避免潜在的安全漏洞。

2.性能优化:合理设置工作进程数、连接数等参数,根据服务器资源和负载情况进行调整。

3.模块化配置:使用 include 指令将配置文件模块化,便于维护和管理。

4.日志管理:合理配置日志路径和级别,方便监控和分析。

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

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

相关文章

我的创作纪念日与2024年年报

我的创作纪念日 机缘 原来是你! 收获 在创作的过程中都有哪些收获 获得了14668粉丝的关注。获得了正向或者反向的反馈:1万多赞、426评论、140多万阅读量等。认识和哪些志同道合的领域同行:有且再寻觅。 日常 🏠个人主页&…

点击锁定按钮,锁定按钮要变成解锁按钮,然后状态要从待绑定变成 已锁定(升级版)

文章目录 1、updateInviteCodeStatus2、handleLock3、InviteCodeController4、InviteCodeService5、CrudRepository 点击锁定按钮,锁定按钮要变成解锁按钮,然后状态要从待绑定变成 已锁定:https://blog.csdn.net/m0_65152767/article/details…

使用npm包的工程如何引入mapboxgl-enhance/maplibre-gl-enhance扩展包

作者:刘大 前言 在使用iClient for MapboxGL/MapLibreGL项目开发中,往往会对接非EPSG:3857坐标系的地图,由于默认不支持,因此需引入mapboxgl-enhance/maplibre-gl-enhance扩展包。 在使用Vue等其他框架,通过npm包下载…

[2474].第04节:Activiti官方画流程图方式

我的后端学习大纲 Activiti大纲 1.安装位置: 2.启动:

UnityRenderStreaming使用记录(三)

测试UnityRenderStreaming在Ubuntu24.04.1LTS上的表现 先放上运行图操作系统 Ubuntu24.04.1LTSUnity测试工程环境相关修改遇到的问题 先放上运行图 操作系统 Ubuntu24.04.1LTS 系统下载地址 https://cn.ubuntu.com/download/desktop安装UnityHub https://blog.csdn.net/AWNUXC…

电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教

0 缘起 一台联想电脑,使用Windows 10 专业版32位,电脑主机后置音频插孔一直没有声音,所以音箱是接在机箱前面版的前置音频插孔上的。 一天不小心捱到了音箱的音频线,音频线头断在音频插孔里面了,前置音频插孔因此用不…

【项目】智能BI洞察引擎 测试报告

目录 一、项目背景BI介绍问题分析项目背景 二、项目功能三、功能测试1、登录测试测试用例测试结果 2、注册测试测试用例测试结果出现的bug 3、上传文件测试测试用例测试结果 4、AI生成图表测试测试用例测试结果 5、分析数据页面测试(异步)测试用例测试结…

年会头投票小游戏

原型预览 源码 https://github.com/open-frame/vote 原型源文件 https://download.csdn.net/download/qq_42618566/90206788

活动预告 |【Part1】Microsoft Azure 在线技术公开课:基础知识

课程介绍 参加“Azure 在线技术公开课:基础知识”活动,培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动,扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 活…

springboot499基于javaweb的城乡居民基本医疗信息管理系统(论文+源码)_kaic

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

Java高级

1.反射 每个类都有一个唯一的类对象,该对象是 java.lang.Class 类型。【是 Java 类的元数据(metadata)对象,包含了该类的结构信息和其他相关数据】 获取类对象 1.什么是类对象 public class Daughter extends Parent{ …

HarmonyOS NEXT 实战之元服务:静态案例效果---我的热门应用服务

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index import { authentica…

libvirt学习

文章目录 libvirt 简介节点、Hypervisor和域libvirt 安装和配置libvirt的XML配置文件libvirt APIMain libvirt APIsError handlingSpecial specific APIs 建立到Hypervisor的连接libvirt API使用编译libvirt工具virshvirt-clonevirt-dfvirt-imagevirt-installvirt-topvirt-what…

“进制转换”公式大集合

咱们都知道十进制是“逢10进1 ”,同理,N进制就是 “逢N进1”。进制其实就这么简单。它的麻烦之处在于各种进制之间的转换。 一、十进制整数转N进制 1.十进制转二进制 除2取余法:连续除以2,直到商为0,逆序…

线程-3-线程控制

线程资源共享 线程间绝大部分资源都是共享的(堆栈共享区) 线程间堆空间是共享的 谁拿着堆空间的入口地址,谁就能访问 共享区也是共享的(cout,printf库都在共享区) 线程间有权限访问/修改其他线程栈数据&…

1、ELK的架构和安装

ELK简介 elk:elasticsearch logstash kibana,统一日志收集系统。 elasticsearch:分布式的全文索引引擎的非关系数据库,json格式,在elk中存储所有的日志信息,架构有主和从,最少需要2台。 …

MetaRename for Mac,适用于 Mac 的文件批量重命名工具

在处理大量文件时,为每个文件手动重命名既耗时又容易出错。对于摄影师、设计师、开发人员等需要频繁处理和整理文件的专业人士来说,找到一款能够简化这一过程的工具是至关重要的。MetaRename for Mac 就是这样一款旨在提高工作效率的应用程序&#xff0c…

方正畅享全媒体新闻采编系统 imageProxy.do 任意文件读取漏洞复现

0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…

【Unity3d】C#浮点数丢失精度问题

一、float、double浮点数丢失精度问题 Unity3D研究院之被坑了的浮点数的精度(一百零三) | 雨松MOMO程序研究院 https://segmentfault.com/a/1190000041768195?sortnewest 浮点数丢失精度问题是由于大部分浮点数在IEEE754规范下就是无法准确以二进制…

Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案

Flink CDC 自定义函数处理 SQLServer XML类型数据方案 1. 背景 因业务使用SQLServer数据库,CDC同步到doris 数仓。对于SQLServer xml类型,doris没有相应的字段对应, 可以使用json来存储xml数据。需要进行一步转换。从 flink 自定义函数入手…