下面这篇就当是给自己看的 Nginx 配置小抄,以后要拷贝改改就能用。

全局与基础设置

user       www www;           # 运行用户
worker_processes  5;          # worker 数量
error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 8192;    # 打开文件数上限

events {
  worker_connections  4096;   # 每个 worker 的最大连接数
}

一般按默认就行,真要调优再改 worker_processes / worker_connections

HTTP 公共配置

http {
  include    conf/mime.types;
  include    /etc/nginx/proxy.conf;
  include    /etc/nginx/fastcgi.conf;
  index      index.html index.htm index.php;

  default_type application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local]  $status '
    '"$request" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log logs/access.log main;

  sendfile   on;
  tcp_nopush on;

  server_names_hash_bucket_size 128;
  ...
}

记住这几个点:

  • include:统一加载 MIME 类型、代理、FastCGI 公共配置。
  • index:默认首页文件顺序。
  • log_format main:自定义访问日志格式,后面 server 都复用 main
  • sendfile / tcp_nopush:开了就好,静态文件传输更高效。

Server 1:PHP/FastCGI 单站点

server {
  listen       80;
  server_name  domain1.com www.domain1.com;
  access_log   logs/domain1.access.log  main;
  root         html;

  location ~ \.php$ {
    fastcgi_pass   127.0.0.1:1025;
  }
}

用途: 简单的 PHP 站点,FastCGI 在本机 127.0.0.1:1025

平时要改的:

  • server_name → 换成自己的域名;
  • root → 对应项目目录;
  • fastcgi_pass → 换成真实的 PHP-FPM 地址。

Server 2:带静态资源的反向代理

server {
  listen       80;
  server_name  domain2.com www.domain2.com;
  access_log   logs/domain2.access.log  main;

  # 静态资源直接由 Nginx 提供
  location ~ ^/(images|javascript|js|css|flash|media|static)/  {
    root    /var/www/virtual/big.server.com/htdocs;
    expires 30d;
  }

  # 其他请求走后端应用(Rails/TG/Zope 等)
  location / {
    proxy_pass http://127.0.0.1:8080;
  }
}

要点:

  • 静态路径统一列在正则里,直接从 root 目录读文件,并加 expires 30d
  • 其他路径全部代理到后端应用 127.0.0.1:8080

平时要改的:

  • server_name
  • 静态资源根目录 root
  • 后端应用地址 proxy_pass

upstream + Server 3:简单负载均衡

upstream big_server_com {
  server 127.0.0.3:8000 weight=5;
  server 127.0.0.3:8001 weight=5;
  server 192.168.0.1:8000;
  server 192.168.0.1:8001;
}

server {
  listen      80;
  server_name big.server.com;
  access_log  logs/big.server.access.log main;

  location / {
    proxy_pass http://big_server_com;
  }
}

用途:

  • upstream big_server_com 把多台后端服务聚合成一个“逻辑服务”。
  • weight 越大,分到的请求越多。
  • server 块里用 proxy_pass http://big_server_com; 一键走负载均衡。

平时要改的:

  • upstream 名称(可选),以及里面后端机器列表。
  • server_name 换成对应的域名。

完整示例(可直接拷贝改字段)

user       www www;
worker_processes  5;
error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 8192;

events {
  worker_connections  4096;
}

http {
  include    conf/mime.types;
  include    /etc/nginx/proxy.conf;
  include    /etc/nginx/fastcgi.conf;
  index      index.html index.htm index.php;

  default_type application/octet-stream;
  log_format   main '$remote_addr - $remote_user [$time_local]  $status '
    '"$request" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log   logs/access.log  main;
  sendfile     on;
  tcp_nopush   on;
  server_names_hash_bucket_size 128;

  # PHP/FastCGI
  server {
    listen       80;
    server_name  domain1.com www.domain1.com;
    access_log   logs/domain1.access.log  main;
    root         html;

    location ~ \.php$ {
      fastcgi_pass   127.0.0.1:1025;
    }
  }

  # 反向代理 + 静态资源
  server {
    listen       80;
    server_name  domain2.com www.domain2.com;
    access_log   logs/domain2.access.log  main;

    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
      root    /var/www/virtual/big.server.com/htdocs;
      expires 30d;
    }

    location / {
      proxy_pass http://127.0.0.1:8080;
    }
  }

  # 负载均衡
  upstream big_server_com {
    server 127.0.0.3:8000 weight=5;
    server 127.0.0.3:8001 weight=5;
    server 192.168.0.1:8000;
    server 192.168.0.1:8001;
  }

  server {
    listen      80;
    server_name big.server.com;
    access_log  logs/big.server.access.log main;

    location / {
      proxy_pass http://big_server_com;
    }
  }
}