Nginx 主配置文件说明
Nginx 的主配置文件 (nginx.conf
) 控制着 Nginx 的全局行为以及各个虚拟主机的设置。理解主配置文件的结构和各个指令的作用对于正确配置 Nginx 至关重要。本文将详细介绍 Nginx 主配置文件的基本结构和常见指令。
1. Nginx 主配置文件的基本结构
Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf
(在 Linux 系统中)。它由多个上下文组成,每个上下文可以包含一系列指令。以下是主配置文件的基本结构:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
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;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
2. 主要上下文和指令
2.1 user
- 作用:指定 Nginx 进程运行时所使用的用户和组。
- 示例:
user nginx;
2.2 worker_processes
- 作用:指定 Nginx 启动的工作进程数量。
- 示例:
worker_processes auto;
2.3 error_log
- 作用:指定 Nginx 错误日志的路径。
- 示例:
error_log /var/log/nginx/error.log;
2.4 pid
- 作用:指定存放 Nginx 主进程 PID 的文件路径。
- 示例:
pid /run/nginx.pid;
2.5 events
- 作用:定义与事件处理相关的配置,如连接处理方式。
- 示例:
events { worker_connections 1024; }
2.6 http
- 作用:定义 HTTP 相关的行为,包括服务器块、请求处理、日志记录等。
- 示例:
http { # 各种 HTTP 设置 }
2.7 log_format
- 作用:定义日志格式。
- 示例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
2.8 access_log
- 作用:指定 Nginx 访问日志的路径和格式。
- 示例:
access_log /var/log/nginx/access.log main;
2.9 sendfile
- 作用:启用或禁用使用内核的 sendfile 函数。
- 示例:
sendfile on;
2.10 tcp_nopush
- 作用:禁止 TCP 包分段。
- 示例:
tcp_nopush on;
2.11 tcp_nodelay
- 作用:启用 Nagle 算法的禁用,即立即发送数据。
- 示例:
tcp_nodelay on;
2.12 keepalive_timeout
- 作用:设置空闲超时时间。
- 示例:
keepalive_timeout 65;
2.13 types_hash_max_size
- 作用:设置 MIME 类型哈希表的最大大小。
- 示例:
types_hash_max_size 2048;
2.14 include
- 作用:包含其他配置文件。
- 示例:
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;
3. 服务器块(server)
在 http
上下文中,可以定义一个或多个 server
块来配置虚拟主机。每个 server
块可以包含多个指令,例如:
server {
listen 80;
server_name example.com www.example.com;
# 更多配置
}
- listen:指定监听的端口和 IP 地址。
- server_name:指定虚拟主机的域名。
4. 位置块(location)
在 server
块中,可以使用 location
块来定义特定 URL 的处理方式。
location / {
root /var/www/html;
index index.html index.htm;
}
location /api {
proxy_pass http://backend;
}
- root:指定文档根目录。
- index:指定默认索引文件。
- proxy_pass:配置反向代理。