Nginx是一款高性能的Web服务器和反向代理服务器,它的配置文件是管理网站和服务的核心。对于新手来说,理解配置文件中的Server块和location是入门的关键。
Nginx配置文件的基本结构¶
Nginx的主配置文件(通常是nginx.conf)由多个“块”组成,就像一个层级分明的配置树。最外层的块可以分为:
- 全局块:影响整个Nginx服务的基础配置,比如
worker_processes(工作进程数,建议设为CPU核心数)、error_log(错误日志路径)等。 - events块:定义网络连接相关的设置,比如
worker_connections(每个工作进程的最大连接数)。 - http块:包含多个Server块,定义HTTP服务器的整体特性,比如
keepalive_timeout(长连接超时时间)、gzip压缩等。
每个块用大括号{}包裹,内部是具体指令,指令以分号;结尾。
Server块:虚拟主机的核心¶
Server块用于定义“虚拟主机”,即不同网站的独立配置。一台服务器可以通过不同域名或端口运行多个网站,每个网站对应一个Server块。
Server块基本结构示例:¶
server {
listen 80; # 监听80端口(HTTP默认端口)
server_name example.com; # 匹配域名(如example.com或www.example.com)
root /var/www/example; # 网站文件根目录(请求路径从这里查找文件)
index index.html; # 默认首页(找不到具体文件时返回该页面)
}
关键指令说明:¶
listen:指定Nginx监听的端口(如listen 8080监听8080端口)。server_name:匹配域名或IP,多个域名用空格分隔(如server_name a.com b.com)。root:网站文件的根目录,请求路径会拼接在root后(如访问/会找/var/www/example/index.html)。index:指定默认首页,按顺序尝试(如先找index.html,再找index.php)。
location块:按路径分配请求¶
location块用于根据请求的URL路径,决定如何处理请求(如返回静态文件、转发动态请求)。
常见location匹配类型:¶
- 前缀匹配:
location /static/匹配所有以/static/开头的路径,优先级低于精确匹配。
location /static/ {
root /var/www/static; # 静态文件放在/var/www/static下
expires 7d; # 浏览器缓存7天(减少重复请求)
}
此时访问example.com/static/image.jpg,会返回/var/www/static/image.jpg。
- 精确匹配:
location = /仅匹配根路径/,优先级最高。
location = / {
root /var/www/example;
index index.html; # 根路径直接返回首页
}
- 正则匹配:用
~(区分大小写)或~*(不区分大小写)匹配路径,常用于匹配文件后缀。
location ~* \.(jpg|png|gif)$ { # 匹配所有图片文件(不区分大小写)
root /var/www/images;
expires 30d; # 图片缓存30天
}
- API/动态请求匹配:
location /api/匹配所有以/api/开头的路径,用于转发给后端服务(如Node.js、Java)。
location /api/ {
proxy_pass http://127.0.0.1:3000; # 转发到后端API服务
proxy_set_header Host $host; # 传递原域名
}
location匹配优先级:¶
精确匹配(=) > 带^~的前缀匹配(如location ^~ /static/) > 普通前缀匹配(/static/) > 正则匹配(~) > 默认匹配(/)
综合配置示例¶
以下是一个完整的Server块+location块配置,包含静态文件、动态请求和API转发:
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html index.php;
# 1. 静态文件处理(CSS、JS、图片)
location /static/ {
root /var/www/static;
expires 7d; # 静态文件缓存7天
}
# 2. 图片文件单独处理(正则匹配)
location ~* \.(jpg|png|gif)$ {
root /var/www/images;
expires 30d;
}
# 3. 动态请求(PHP/后端服务)
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # 转发给PHP-FPM服务(默认9000端口)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; # 引入FastCGI参数(如PATH_INFO等)
}
# 4. 单页应用(SPA)路由
location / {
try_files $uri $uri/ /index.html; # 找不到文件时返回index.html
}
}
配置验证与生效¶
修改配置后,需验证并重启Nginx:
1. 检查配置语法:nginx -t(Nginx会输出配置是否有误)。
2. 重载配置:nginx -s reload(无需停止服务,直接生效新配置)。
3. 重启服务:nginx -s stop(先停止)或nginx -s quit(优雅停止)后nginx启动。
总结¶
Nginx配置的核心是Server块(定义网站)和location块(按路径分配请求)。新手可先掌握基础配置:监听端口、域名、静态文件路径,再逐步学习动态请求转发、缓存等高级功能。通过实际配置和测试,能更快理解两者的配合逻辑。