nginx 配置笔记

nginx 作为高性能代理工具,在建站的时经常需要修改和调整配置,现在整理一下配置方法。

evens

evens 用于配置 nginx 的工作模式,可以使用 io 多路复用的网络模型。

evens {
    use epoll; # epoll 模型是指 linux 提供的高性能网络 io 模型,如果是 freeBSD 内使用 kqueue 模型。

    worker_connections: 66535; # 每个进程的最大连接数。
}

http 服务器配置

http {
  include mime.types; # 文件的扩展名与类型的映射表
  default_type application/octet-stream; # 默认文件类型
  charset utf-8; # 默认的编码格式
  server_names_hash_bucket_size 128; # 服务器名称的哈希表大小
  client_header_buffer_size 32k; # 上传文件的大小限制

  sendfile on; # 是否开启高效的文件传输模式,但是如果本身是文件类型的服务,反而会加重系统的负载,所以需要设置为off

  tcp_nopush on;
  tcp_nodealy on; # 防止网络阻塞

  # nginx要解析php脚本,就必须配置fastcgi模块, 其中的fastcgi参数 ,用来提升性能
  fastcgi_connect_timeout 300; # 指定nginx与后端fastcgi server连接超时时间
  fastcgi_send_timeout 60s; #  nginx传输给fastcgi server的超时时间
  fastcgi_read_timeout 60s; #  nginx读取fastcgi server返回值的超时时间
  fastcgi_buffer_size 64k;  # 响应第一部分应答需要多大的缓存区大小(也就是答应头)
  fastcgi_buffers 4 64k;    # 需要多大的缓冲区来缓冲 fastcgi server的应答数据,如果页面信息超过256kb,就是用fastcgi_temp指定的路由来承接多余的数据

  # 压缩设置
  gzip on;  # 开启gzip压缩输出
  gzip_min_lenght 1k; # 当数据量小于1k的时候,不进行压缩
  gzip_http_version 1.1; #压缩版本,默认
  gzip_comp_level 2; # 压缩等级,扽等级1,压缩比最小,但是快,等级9,压缩比最大,但是消耗cpu资源
  gzip_types text/plain application/x-javascript text/css; # 要压缩的文件类型
  gzip_vary on; # 缓存经过gzip压缩过的页面
}

虚拟主机 server 的配置

# http 跳转 https
server {
    listen 80;
    server_name xxx.com;
    return 301 https://$host$request_uri;
}
# 路由匹配

server {
  listen 80;
  server_name aaa.com;
  location = / {  # 精准匹配
    root /data/www;
    index index.html
  }
  location ^~ /av { # 前缀匹配
    ...
  }
  location ~ /media { # 区分大小写的正则匹配
  }
  location ~* .*\.(png|jpg) { # 不区分大小写的正则匹配
  }
  location / { # 能用匹配,无其它匹配,任何请求都会匹配
}
# 前后端分离,反向代理后端服务

server {
  listen 80;
  server_name xxx.com;
  location / {
    root /data/www;
    index index.html;
  }
  location /api {
    proxy_pass http://192.168.1.1:8989;  # 转发到http://192.168.1.1:8989/api
    proxy_set_header Host $host;
    proxy_set_header X-Real-Ip $remote_addr;

    # 如果直接在nginx处理跨域可以设置一下的header返回给客户端
    add_header Access-Control-Allow-Origin 'xxx.com';
    add_header Access-Control-Allow-Credentials 'true';
  }

}
# 设置正向代理
server {
  listen 80;
  resolver 8.8.8.8; # 指定dns服务器
  location / {
    proxy_pass http://$host$request_uri;
    proxy_buffers 256 4k;
    proxy_connect_timeout 30;
    proxy_send_timeout 30;
    proxy_read_timeout 30;
    proxy_next_upstream error timeout http_500; # 错误重试
  }
}