nginx.conf`是 Nginx 服务器的配置文件,用于配置服务器的各种行为和功能。以下是一些常见配置项及其在静态文件服务、反向代理负载均衡、改写请求响应方面的相关用法:

1. 基本配置块

  • user:指定运行 Nginx 工作进程的用户和用户组。例如:user nobody nobody;。这在控制 Nginx 进程的权限方面非常重要,确保它只能访问必要的资源。
  • error_log:设置错误日志的路径和级别。例如:error_log /var/log/nginx/error.log error;,其中error是日志级别,可以是debuginfonoticewarnerrorcrit等,用于记录不同严重程度的错误和事件,方便排查问题。
  • pid:指定 Nginx 进程 ID 文件的路径。例如:pid /var/run/nginx.pid;,这个文件用于存储 Nginx 主进程的进程 ID,在一些管理操作(如重新加载配置、停止 Nginx 等)中会用到。

2. 事件配置块

  • worker_connections:设置每个工作进程可以同时处理的最大连接数。例如:worker_connections 1024;,这对于调整 Nginx 的并发处理能力很关键,需要根据服务器硬件资源和预期的并发请求量来合理设置。

3. HTTP 配置块(包含静态文件服务、反向代理负载均衡、改写请求响应相关配置)

静态文件服务

  • server:定义一个虚拟服务器,在其中可以配置多location块来处理不同的请求路径。
    • server_name:指定服务器的域名或 IP 地址,用于匹配客户端请求的主机头。例如:server_name example.com www.example.com;,这样 Nginx 就知道哪些请求应该由这个虚拟服务器来处理。
    • location:配置请求的路径匹配规则。
      • 对于静态文件服务,例如将/static/路径下的请求映射到服务器上的/var/www/static/目录下的静态文件,可以这样配置:
location /static/ {
    root /var/www;
    autoindex on;  # 开启目录浏览(可选)
}

root指令指定了静态文件的根目录,Nginx 会在这个目录下查找与请求路径相对应的文件。如果启用了autoindex,当客户端访问该目录时,会显示目录中的文件列表(在某些情况下可能需要谨慎使用,避免暴露敏感信息)。

反向代理负载均衡

  • upstream:定义后端服务器集群,给集群一个名称,以便在server块中引用。例如
upstream backend_cluster {
    server backend1.example.com weight=3;  # 分配权重为3
    server backend2.example.com;
    server backend3.example.com down;  # 标记为不可用(临时下线)
}

这里配置了一个名为backend_cluster的后端服务器集群,包含三个后端服务器。可以通过weight参数设置每个服务器的权重,权重越高,分配到的请求比例就越大;down参数用于标记服务器暂时不可用,Nginx 将不会把请求转发到该服务器。

  • server:在server块中使用locationproxy_pass指令将请求反向代理到后端服务器集群。例如:
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_cluster;
        proxy_set_header Host $host;  # 设置转发请求的Host头
        proxy_set_header X-Real-IP $remote_addr;  # 设置真实客户端IP头(可选,用于后端获取真实客户端IP)
    }
}

当客户端访问example.com时,请求会被反向代理到backend_cluster定义的后端服务器集群中的某个服务器上,根据负载均衡算法(默认是轮询,可以通过ip_hash等指令修改算法)进行分配。proxy_set_header指令用于设置转发到后端服务器的请求头信息,确保后端服务器能够正确处理请求并获取必要的信息。

改写请求响应

  • rewrite:用于改写请求的 URL。例如,将所有以.html结尾的请求重定向到不带.html的路径:
location / {
    rewrite ^(.*)\.html$ $1 permanent;
}

这里的rewrite规则使用正则表达式^(.*)\.html$匹配以.html结尾的请求路径,并将其重写为去掉.html的路径。permanent表示返回 301 永久重定向状态码给客户端,告诉客户端更新书签等。

  • proxy_redirect:用于改写后端服务器返回的响应头中的LocationRefresh字段。例如,如果后端服务器返回的重定向地址是相对路径,而希望在返回给客户端时将其转换为绝对路径,可以这样配置:
location / {
    proxy_pass http://backend;
    proxy_redirect off;  # 关闭默认的重定向处理(如果需要自定义)
    proxy_redirect http://backend/ /;  # 将后端返回的以http://backend/开头的重定向地址转换为以/开头的绝对路径
}

这样可以确保客户端接收到正确的重定向地址,提高用户体验并避免一些潜在的问题。

4. 其他常见配置项

  • access_log:设置访问日志的路径和格式。例如:access_log /var/log/nginx/access.log combined;combined是一种常用的日志格式,记录了客户端 IP、请求时间、请求方法、请求 URL、协议、响应状态码、发送字节数、引用页面等信息,方便分析服务器的访问情况和用户行为。
  • sendfile:用于开启或关闭高效文件传输模式(sendfile系统调用)。例如:sendfile on;,在提供静态文件服务时,开启sendfile可以提高文件传输效率,减少数据在内核空间和用户空间之间的拷贝次数。
  • keepalive_timeout:设置长连接的超时时间。例如:keepalive_timeout 65;,当客户端与服务器建立长连接后,如果在这个时间内没有新的请求,连接将被关闭。合理设置这个值可以在一定程度上提高性能,减少连接建立和关闭的开销,但也需要根据实际情况平衡服务器资源和客户端连接的管理。