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匹配类型:

  1. 前缀匹配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

  1. 精确匹配location = / 仅匹配根路径/,优先级最高。
   location = / {
       root /var/www/example;
       index index.html;  # 根路径直接返回首页
   }
  1. 正则匹配:用~(区分大小写)或~*(不区分大小写)匹配路径,常用于匹配文件后缀。
   location ~* \.(jpg|png|gif)$ {  # 匹配所有图片文件(不区分大小写)
       root /var/www/images;
       expires 30d;  # 图片缓存30天
   }
  1. 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块(按路径分配请求)。新手可先掌握基础配置:监听端口、域名、静态文件路径,再逐步学习动态请求转发、缓存等高级功能。通过实际配置和测试,能更快理解两者的配合逻辑。

小夜