NGINX 是一个高性能的 HTTP 和反向代理服务器,它的配置文件非常灵活,支持多种模块和功能。以下是对 NGINX 配置的详解,包括配置文件结构、常见指令以及实际案例。
1. 配置文件结构
NGINX 的默认配置文件路径通常是 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。它的基本结构如下:
# 全局块:定义全局变量和影响整个服务器的配置
user nginx; # 指定运行 NGINX 的用户
worker_processes auto; # 工作进程数,通常为 CPU 核心数
error_log /var/log/nginx/error.log warn; # 错误日志文件路径
pid /var/run/nginx.pid; # 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; # 启用高效传输文件机制
keepalive_timeout 65; # 保持连接超时时间
# 虚拟主机配置
server {
listen 80; # 监听端口
server_name example.com; # 域名
location / {
root /usr/share/nginx/html; # 根目录
index index.html index.htm; # 默认首页
}
error_page 404 /404.html; # 自定义 404 错误页面
}
}
2. 配置块类型
全局块:
定义全局配置,例如用户权限、日志路径、进程数量等。
events 块:
配置与网络连接相关的参数,例如每个工作进程的最大连接数、使用的事件模型(epoll、kqueue)。
http 块:
包含 HTTP 协议相关的配置,支持多个
server块。
server 块:
定义一个虚拟主机,包含域名、监听端口、错误页面等。
location 块:
配置 URI 路径的匹配规则及处理方式,例如静态文件服务、代理请求。
3. 常见指令详解
全局指令
user:指定运行 NGINX 的用户。worker_processes:工作进程数,建议根据 CPU 核心数配置。error_log:错误日志路径和日志级别(debug,info,notice,warn,error,crit)。
events 模块指令
worker_connections:每个工作进程的最大连接数。multi_accept:是否同时接受多个连接。
http 模块指令
include:引入其他配置文件。server_tokens:是否在 HTTP 头部中显示 NGINX 版本号(建议关闭,增强安全性)。sendfile:启用高效文件传输。keepalive_timeout:长连接超时时间。gzip:开启 Gzip 压缩。
server 模块指令
listen:指定监听的 IP 和端口。server_name:定义虚拟主机的域名。root:设置根目录。index:指定默认首页文件。
location 模块指令
location:定义 URL 路径的匹配规则。=:精确匹配。^~:前缀匹配,不再进行正则匹配。~:区分大小写的正则匹配。~*:不区分大小写的正则匹配。/:通用匹配。
proxy_pass:反向代理到上游服务器。rewrite:URL 重写。try_files:按照顺序尝试文件是否存在。
4. 实际案例
反向代理
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://127.0.0.1:8080; # 转发到后端服务
proxy_hide_header X-Powered-By; # 隐藏服务器信息头
proxy_hide_header X-AspNet-Version; # 隐藏服务器信息头
proxy_hide_header X-Runtime; # 隐藏服务器信息头
proxy_hide_header Server; # 隐藏服务器信息头
proxy_set_header Host $host; # 设置 Host 头
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
负载均衡
upstream backend {
server 192.168.0.101;
server 192.168.0.102;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
}
}
静态文件服务
server {
listen 80;
server_name static.example.com;
location / {
root /data/static; # 文件存放路径
index index.html;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 设置缓存时间
access_log off; # 关闭日志记录
}
}
HTTPS 配置
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
5. 调试与优化
测试配置文件语法:
nginx -t
重新加载配置:
nginx -s reload
优化建议:
使用
gzip压缩传输内容。结合
cache-control和expires优化静态文件缓存。调整
worker_processes和worker_connections。利用负载均衡分担流量。