nginx配置文件详解
一 配置文件结构
Nginx 配置文件的结构是层次化的,它由多个上下文(contexts)和指令(directives)组成。每个上下文可以包含其他上下文或指令。下面是 Nginx 配置文件的基本结构详解:
1. 主配置文件
主配置文件通常命名为 nginx.conf
,位于 /etc/nginx/
目录下。这个文件定义了全局设置,并且可以包含其他的配置文件。
全局块
user
:指定运行 Nginx 进程的用户。worker_processes
:设置工作进程的数量。error_log
:定义错误日志的位置及严重性级别。pid
:指定存放 Nginx 主进程 ID 的文件路径。
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
2. 事件模块
events
块用于配置连接处理的特性,比如使用哪种 I/O 模型、每个工作进程的最大连接数等
events {worker_connections 1024; # 单个工作进程允许的最大客户端连接数use epoll; # 在Linux上建议使用epoll模型
}
3. HTTP模块
http
块包含了所有与HTTP相关的设置,包括虚拟主机、缓存、代理、重写规则等。
HTTP全局设置
include
:用来包含其它配置文件。default_type
:默认响应内容类型。log_format
:自定义日志格式。access_log
:访问日志位置。sendfile
:开启高效文件传输模式。keepalive_timeout
:保持活动连接的超时时间。
http {include mime.types; # 包含MIME类型文件default_type application/octet-stream;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 logs/access.log main;sendfile on;keepalive_timeout 65;
}
4. 服务器块 (server)
在 http
块内,可以有多个 server
块,每个 server
块定义了一个虚拟主机。
listen
:监听的端口。server_name
:服务名或域名。root
:网站根目录。index
:默认首页文件。location
:基于请求的URI来匹配不同的配置。proxy_pass
:反向代理设置。try_files
:尝试按顺序加载文件。
http {...server {listen 80;server_name example.com;root /usr/share/nginx/html;index index.html index.htm;location / {try_files $uri $uri/ =404;}location /images/ {root /data/images;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_params;}}...
}
5. 其他上下文
除了上述主要上下文之外,还有 mail
和 stream
上下文,分别用于邮件代理和TCP/UDP流协议处理。
6. 注释
Nginx 支持使用 #
来注释掉配置行。
二 配置文件组成
Nginx 配置文件由多个上下文(contexts)和指令(directives)组成,每个上下文可以包含一个或多个指令以及其他上下文。下面详细解释 Nginx 配置文件的组成部分:
1. 上下文(Contexts)
上下文定义了配置项的作用范围。Nginx 的主要上下文包括:
- 主上下文 (
main
context):这是最外层的上下文,它包含了影响整个 Nginx 进程的设置。 - 事件上下文 (
events
context):这个上下文用于定义如何处理连接、保持连接等事件相关的参数。 - HTTP上下文 (
http
context):这个上下文包含了所有与 HTTP 服务器相关的配置。 - 邮件上下文 (
mail
context):这个上下文用于配置 IMAP/POP3/SMTP 代理服务器。 - 流上下文 (
stream
context):这个上下文用于配置 TCP 和 UDP 代理。
2. 指令(Directives)
指令是具体的配置选项,它们告诉 Nginx 如何工作。指令可以在不同的上下文中使用,并且有的指令只能在特定的上下文中出现。
主上下文中的常见指令
user
:指定 Nginx 工作进程运行的身份。worker_processes
:设置 Nginx 工作进程的数量。error_log
:指定错误日志的位置及严重性级别。pid
:指定存放 Nginx 主进程 ID 的文件路径。
事件上下文中的常见指令
worker_connections
:单个工作进程允许的最大客户端连接数。use
:指定使用的 I/O 多路复用模型,如epoll
或select
。
HTTP上下文中的常见指令
include
:用来包含其他配置文件。server
:定义虚拟主机。location
:基于请求的 URI 来匹配不同的配置。root
:设定网站根目录。index
:定义默认首页文件。proxy_pass
:设置反向代理的目标地址。fastcgi_pass
:设置 FastCGI 服务器的地址。sendfile
:开启高效文件传输模式。keepalive_timeout
:保持活动连接的超时时间。
3. 块(Blocks)
块是由一对大括号 {}
包围的一组指令,这些指令属于同一个上下文。例如,server
块定义了一个虚拟主机,而 location
块则定义了针对特定 URL 路径的处理规则。
4. 注释
Nginx 使用 #
符号来表示注释,从 #
开始到行尾的所有内容都会被 Nginx 忽略。
5. 变量(Variables)
Nginx 支持使用变量来存储信息并在配置中引用。变量通常以 $
开头,比如 $host
、$uri
等。
示例配置
# 主上下文
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;# 事件上下文
events {worker_connections 1024;
}# HTTP上下文
http {include mime.types;default_type application/octet-stream;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;keepalive_timeout 65;# 定义虚拟主机server {listen 80;server_name localhost;# 网站根目录root /usr/share/nginx/html;index index.html index.htm;location / {try_files $uri $uri/ =404;}location /images/ {root /data/images;}# PHP 处理location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_params;}}
}