nginx目录结构和配置文件

nginx目录结构

[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp                 # POST 大文件暂存目录
├── conf                             # Nginx所有配置文件的目录
│   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│   ├── fastcgi_params               # fastcgi的参数文件
│   ├── fastcgi_params.default       
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                   #这是Nginx默认的主配置文件,日常使用和修改的文件
│   ├── nginx.conf.default
│   ├── scgi_params                  # scgi相关参数文件
│   ├── scgi_params.default  
│   ├── uwsgi_params                 # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi临时数据目录
├── html                             # Nginx默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件,例如出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # Nginx日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                    # 错误日志文件
│   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # Nginx 可执行文件目录
│   └── nginx                        # Nginx 二进制可执行程序
├── scgi_temp                        # 临时目录
└── uwsgi_temp                       # 临时目录

配置文件结构

Nginx 的配置文件通常是 /etc/nginx/nginx.conf,它采用分块的结构,主要包括以下几个部分:

示例配置文件

# 全局块:配置全局参数
user www-data;                  # 运行 Nginx 的用户
worker_processes auto;          # 工作进程数,auto 表示根据 CPU 核心数自动设置
error_log /var/log/nginx/error.log;  # 错误日志路径

# 事件块:配置事件驱动模型的参数
events {
    worker_connections 1024;    # 每个工作进程的最大连接数
}

# HTTP 块:配置 HTTP 相关的参数
http {
    include mime.types;         # 包含 MIME 类型配置文件
    default_type application/octet-stream;  # 默认的 MIME 类型
    sendfile on;                # 启用高效文件传输模式
    keepalive_timeout 65;       # 客户端连接保持时间(秒)

    # Server 块:配置虚拟主机
    server {
        listen 80;              # 监听 80 端口
        server_name example.com;  # 服务器域名

        # Location 块:配置请求的 URI 匹配规则
        location / {
            root /var/www/html;  # 静态文件的根目录
            index index.html;    # 默认首页文件
        }
    }
}

全局块:配置 Nginx 的全局参数,如运行用户、工作进程数、错误日志等。

事件块:配置事件驱动模型的参数,如每个工作进程的最大连接数。

HTTP 块:配置 HTTP 相关的参数,如 MIME 类型、文件传输模式、连接保持时间等。

Server 块:配置虚拟主机,定义监听的端口和域名。

Location 块:配置请求的 URI 匹配规则和处理逻辑。

另外一个案例

worker_processes  1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个

events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
    worker_connections  1024;
}


http {
    #文件扩展名与文件类型映射表(是conf目录下的一个文件)
    include       mime.types;
    #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
    default_type  application/octet-stream;

    #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
    sendfile        on;
    
     #长连接超时时间,单位是秒
    keepalive_timeout  65;

 #虚拟主机的配置
    server {
    #监听端口
        listen       80;
        #域名,可以有多个,用空格隔开
        server_name  localhost;

	#配置根目录以及默认页面
        location / {
            root   html;
            index  index.html index.htm;
        }

	#出错页面配置
        error_page   500 502 503 504  /50x.html;
        #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }
        
    }

}

静态文件服务

Nginx 可以高效地提供静态文件服务

server {
    listen 80;                  # 监听 80 端口
    server_name example.com;    # 服务器域名

    location / {
        root /var/www/html;     # 静态文件的根目录
        index index.html;       # 默认首页文件
    }

    location /images/ {
        root /var/www;          # 图片文件的根目录
    }
}

root /var/www/html;:指定静态文件的根目录为 /var/www/html。

index index.html;:当访问根路径时,默认返回 index.html 文件。

location /images/:匹配以 /images/ 开头的请求,从 /var/www/images 目录提供文件。

反向代理

Nginx 可以作为反向代理服务器,将客户端请求转发到后端服务器。

server {
    listen 80;                  # 监听 80 端口
    server_name example.com;    # 服务器域名

    location / {
        proxy_pass http://localhost:8080;  # 将请求转发到本地的 8080 端口
        proxy_set_header Host $host;       # 设置请求头
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

proxy_pass http://localhost:8080;:将请求转发到本地的 8080 端口。

proxy_set_header:设置转发请求的头信息,确保后端服务器能获取正确的客户端信息。

负载均衡

Nginx 支持多种负载均衡算法,可以将请求分发到多个后端服务器。

# 定义后端服务器组
upstream backend {
    server backend1.example.com;  # 后端服务器 1
    server backend2.example.com;  # 后端服务器 2
    server backend3.example.com;  # 后端服务器 3
}

server {
    listen 80;                  # 监听 80 端口
    server_name example.com;    # 服务器域名

    location / {
        proxy_pass http://backend;  # 将请求转发到后端服务器组
    }
}
upstream backend:定义一组后端服务器。

proxy_pass http://backend;:将请求转发到 backend 服务器组。

Nginx 默认使用轮询(Round Robin)算法分发请求。

动静分离

动静分离 是一种常见的优化策略,将动态请求(如 API、PHP、Java 等)和静态资源(如
HTML、CSS、JS、图片等)分开处理。Nginx 可以通过配置实现动静分离,从而提高服务器的性能和可维护性。

动静分离的原理

静态资源:由 Nginx 直接处理并返回给客户端,无需经过后端应用服务器。
动态请求:由 Nginx 转发到后端应用服务器(如 Tomcat、Node.js、PHP-FPM 等)处理。

Nginx 动静分离配置

server {
    listen 80;                  # 监听 80 端口
    server_name example.com;    # 服务器域名

    # 静态资源处理
    location /static/ {
        root /var/www;          # 静态资源的根目录
        expires 7d;             # 设置缓存过期时间为 7 天
    }

    # 动态请求处理
    location / {
        proxy_pass http://localhost:8080;  # 将动态请求转发到后端服务器
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 其他静态资源(如图片、CSS、JS)
    location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
        root /var/www/static;   # 静态资源的根目录
        expires 30d;            # 设置缓存过期时间为 30 天
    }
}

配置详解

(1)静态资源处理
location /static/:
	
	匹配以 /static/ 开头的请求。
	
	root /var/www;:静态资源的根目录为 /var/www,因此实际文件路径为 /var/www/static/。
	
	expires 7d;:设置静态资源的缓存过期时间为 7 天,减少客户端请求。

location ~* \.(jpg|jpeg|png|gif|css|js|ico)$:
	
	使用正则表达式匹配常见的静态资源文件(如图片、CSS、JS 等)。
	
	root /var/www/static;:静态资源的根目录为 /var/www/static。
	
	expires 30d;:设置缓存过期时间为 30 天。

动态请求处理

location /:

	匹配所有请求。
	proxy_pass http://localhost:8080;:将请求转发到后端服务器 localhost:8080。
	proxy_set_header:设置转发请求的头信息,确保后端服务器能获取正确的客户端信息。

性能优化

# 全局块
user www-data;
worker_processes auto;          # 根据 CPU 核心数自动设置工作进程数
worker_rlimit_nofile 100000;    # 每个工作进程的文件描述符限制

# 事件块
events {
    worker_connections 4096;    # 每个工作进程的最大连接数
    multi_accept on;            # 同时接受多个连接
    use epoll;                  # 使用 epoll 事件驱动模型(Linux 专用)
}

# HTTP 块
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;                # 启用高效文件传输模式
    tcp_nopush on;              # 减少网络报文段的数量
    tcp_nodelay on;             # 禁用 Nagle 算法,提高响应速度
    keepalive_timeout 65;       # 客户端连接保持时间
    gzip on;                    # 启用 Gzip 压缩
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;  # 压缩的文件类型
}
worker_processes auto;:根据 CPU 核心数自动设置工作进程数。

worker_connections 4096;:每个工作进程可以处理的最大连接数。

sendfile on;:启用高效文件传输模式,减少文件复制的开销。

gzip on;:启用 Gzip 压缩,减少传输数据量。

tcp_nopush on; 和 tcp_nodelay on;:优化 TCP 传输性能。

总结

配置文件结构:Nginx 的配置文件分为全局块、事件块、HTTP 块、Server 块和 Location 块。

静态文件服务:通过 root 和 index 指令提供静态文件服务。

反向代理:通过 proxy_pass 将请求转发到后端服务器。

负载均衡:通过 upstream 定义后端服务器组,并使用 proxy_pass 分发请求。

性能优化:通过调整工作进程数、连接数、启用 Gzip 压缩等方式提升性能。

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

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

相关文章

SpringBoot 整合 SpringMVC:配置嵌入式服务器

修改和 server 相关的配置(ServerProperties): server.port8081 server.context‐path/tx server.tomcat.uri‐encodingUTF‐8 注册 Servlet 三大组件:Servlet、Fileter、Listener SpringBoot 默认是以 jar 包的方式启动嵌入式的 Servlet 容器来启动 Spr…

如何实现滑动网格的功能

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverList组件相关的内容,本章回中将介绍SliverGrid组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverGrid组件是一种网格类组件,主要用来…

17.[前端开发]Day17-形变-动画-vertical-align

1 transform CSS属性 - transform transform的用法 表示一个或者多个 不用记住全部的函数&#xff0c;只用掌握这四个常用的函数即可 位移 - translate <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta ht…

高清种子资源获取指南 | ✈️@seedlinkbot

在如今的数字时代&#xff0c;高清影视、音乐、游戏等资源的获取方式不断丰富。对于追求高质量资源的用户而言&#xff0c;一个高效的资源分享平台至关重要。而 ✈️seedlinkbot 正是这样一个便捷的资源获取工具&#xff0c;为用户提供高质量的种子资源索引和下载信息。 1. ✈️…

DeepSeek R1安装与使用

DeepSeek R1安装与使用 1、安装 Ollama 如果之前没有安装过 Ollama&#xff0c;先在 Ollama官网 下载对应系统的 Ollama 进行安装。 2、部署 DeepSeek R1 模型 选择需要下载的模型。这里我们选择 deepseek-r1 根据自己机器配置&#xff0c;选择不同参数的模型。这里我们选择…

Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库&#xff0c;它提供了多种预设的样式和灵活的配置选项&#xff0c;使得开发者可以轻松地定制出符合项目需求…

C++ Primer 命名空间的using声明

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Python 中最大堆和最小堆的构建与应用:以寻找第 k 大元素为例

引言 在数据处理和算法设计中&#xff0c;堆&#xff08;Heap&#xff09;是一种非常重要的数据结构。它是一种特殊的完全二叉树&#xff0c;具有高效的插入和删除操作特性&#xff0c;时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)。堆主要分为最大堆和最小堆&#xff0c;…

如果把Linux主机作为路由器转发流量,性能可靠吗?

正文共&#xff1a;666 字 13 图&#xff0c;预估阅读时间&#xff1a;1 分钟 strongSwan是一个开源的基于IPsec的VPN解决方案&#xff0c;我计划是将strongSwan部署在CentOS系统中&#xff0c;但是这中间涉及到一个小问题&#xff0c;那就是strongSwan网关的子网怎么处理&…

Qt Creator 中使用 vcpkg

Qt Creator 中使用 vcpkg Qt Creator 是一个跨平台的轻量级 IDE&#xff0c;做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强&#xff0c;但是由于和 Qt 集成的比较深&#xff0c;用来开发 Qt 程序还是很顺手的。 早期&#xf…

Linux防火墙基础

一、Linux防火墙的状态机制 1.iptables是可以配置有状态的防火墙&#xff0c;其有状态的特点是能够指定并记住发送或者接收信息包所建立的连接状态&#xff0c;其一共有四种状态&#xff0c;分别为established invalid new related。 established:该信息包已建立连接&#x…

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中&#xff0c;智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具&#xff0c;更是一种推动数字化转型的重要力量。它通过高效的技术手段&#xff0c;将物业管理与用户居住体验紧密结合&#xff0c;无疑为社区带…

马铃薯叶子病害检测数据集VOC+YOLO格式1332张9类别

数据集中大约1000张是单个叶子图片 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1332 标注数量(xml文件个数)&#xff1a;1332 标注数…

【LeetCode: 81. 搜索旋转排序数组 II + 二分查找】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

解锁FPGA的故障免疫密码

我们身处“碳基智能”大步迈向“硅基智能”序曲中,前者更像是后者的引导程序,AI平民化时代,万物皆摩尔定律。 越快越好,几乎适用绝大多数场景。 在通往人工智能的征程中,算力无处不在,芯片作用无可替代。 十六年前,就已宣称自己是一家软件公司的英伟达,现已登顶全球…

Skyeye 云 VUE 版本 v3.15.6 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法&#xff0c;用来构造决策树。ID3算法起源于概念学习系统&#xff08;CLS&#xff09;&#xff0c;以信息熵的下降速度为选取测试属性的标准&#xff0c;即在每个节点选取还尚未被用来划分的具有最高信息增益的…

w187社区养老服务平台的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

如何让跨域文件管控简单又高效

在当今全球化和数字化的商业环境中&#xff0c;企业往往需要跨越不同的地理区域进行协作。这种多区域协作的一个关键挑战就是如何实现高效且安全的跨域文件传输。随着企业的规模不断扩大&#xff0c;并在全球范围内设立分支机构&#xff0c;跨域文件管控已经成为了一个必不可少…

HarmonyOS:ArkWeb进程

ArkWeb是多进程模型,分为应用进程、Web渲染进程、Web GPU进程、Web孵化进程和Foundation进程。 说明 Web内核没有明确的内存大小申请约束,理论上可以无限大,直到被资源管理释放。 ArkWeb进程模型图 应用进程中Web相关线程(应用唯一) 应用进程为主进程。包含网络线程、Vi…