nginx目录结构和配置文件

nginx目录结构

bash 复制代码
[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,它采用分块的结构,主要包括以下几个部分:

示例配置文件

bash 复制代码
# 全局块:配置全局参数
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 匹配规则和处理逻辑。

另外一个案例

bash 复制代码
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 可以高效地提供静态文件服务

bash 复制代码
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 可以作为反向代理服务器,将客户端请求转发到后端服务器。

bash 复制代码
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 支持多种负载均衡算法,可以将请求分发到多个后端服务器。

bash 复制代码
# 定义后端服务器组
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;  # 将请求转发到后端服务器组
    }
}
bash 复制代码
upstream backend:定义一组后端服务器。

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

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

动静分离

动静分离 是一种常见的优化策略,将动态请求(如 API、PHP、Java 等)和静态资源(如

HTML、CSS、JS、图片等)分开处理。Nginx 可以通过配置实现动静分离,从而提高服务器的性能和可维护性。

动静分离的原理

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

Nginx 动静分离配置

bash 复制代码
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 天
    }
}

配置详解

bash 复制代码
(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 天。

动态请求处理

bash 复制代码
location /:

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

性能优化

bash 复制代码
# 全局块
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;  # 压缩的文件类型
}
bash 复制代码
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 压缩等方式提升性能。

相关推荐
梦游钓鱼1 小时前
在window终端创建docker容器的问题
运维·docker·容器
孤寂大仙v1 小时前
【Linux笔记】理解文件系统(上)
linux·运维·笔记
沉默的八哥1 小时前
K8S高可用Web应用部署方案
运维
winyh51 小时前
Vite 打包后Nginx部署配置
运维·nginx
运维小贺3 小时前
Nginx常用的模块
运维·nginx·正则表达式
努力学习的小廉3 小时前
深入了解Linux —— 调试程序
linux·运维·服务器
努力学习的小廉3 小时前
深入了解Linux —— git三板斧
linux·运维·git
AI学IT3 小时前
(安全防御)旁挂组网双机热备负载分担实验
运维·服务器·网络
code monkey.4 小时前
【寻找Linux的奥秘】第一章:基础指令
linux·运维·服务器
qziovv4 小时前
Ubuntu通过局域网共享文件夹实现文件夹的连接
linux·运维·ubuntu