nginx之nginx.conf配置文件

标签简介

Nginx 配置文件组成部分

  • main(全局设置)
  • events(配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。)
  • http(可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。)
  • upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)
  • server(配置虚拟主机的相关参数,一个http中可以有多个server。)

demo案例

nginx.conf

user       www www;  ## Default: nobody 定义Nginx运行的用户和用户组
worker_processes  5;  ## Default: 1  nginx进程数,通常设置成和cpu的数量相等
error_log  logs/error.log;
pid        logs/nginx.pid;  #进程pid文件

#指定进程可以打开的最大描述符:数目
#工作模式与连接数上限
##这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
#这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
worker_rlimit_nofile 8192;


#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型
#是Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型。


events {
  #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型
  #是Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型。
  use epoll
  worker_connections  4096;  ## Default: 1024 单个进程最大连接数(最大连接数=连接数+进程数)
  keepalive_timeout 60; # 超时时间
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
  include    conf/mime.types; #文件扩展名与文件类型映射表
  include    /etc/nginx/proxy.conf; #配置反向代理
  include    /etc/nginx/fastcgi.conf; #配置fastcgi 将该请求转发给 php-fpm
  index    index.html index.htm index.php; #默认入口文件名称

  default_type application/octet-stream; #默认文件类型
#日志格式设定
  #$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
  #$remote_user:用来记录客户端用户名称;
  #$time_local: 用来记录访问时间与时区;
  #$request: 用来记录请求的url与http协议;
  #$status: 用来记录请求状态;成功是200,
  #$body_bytes_sent :记录发送给客户端文件主体内容大小;
  #$http_referer:用来记录从那个页面链接访问过来的;
  #$http_user_agent:记录客户浏览器的相关信息;
  #通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

  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; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件
  tcp_nopush   on; #使用TCP_CORK套接字选项。 选项仅在使用sendfile的时候才开启
  server_names_hash_bucket_size 128; # #服务器名字的hash表大小

  #虚拟主机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;  #请注意此处端口号不能与虚拟主机监听的端口号一样(也就是server监听的端口)
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      add_header backendIP $upstream_addr;     #请注意此处 测试时候打开 通过查看Header 就能查看 nginx 实际转发到后端哪 ip上
      add_header bacnendCode $upstream_status; #请注意此处端 测试时候打开 通过查看Header 就能查看 nginx 实际转发到后端 状态
    }
  }
  
 # 负载均衡
  server { 
    listen          80;
    server_name     big.server.com;
    access_log      logs/big.server.access.log main;

    location / {
      proxy_pass      http://big_server_com;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
  #定义负载均衡设备的Ip及设备状态
  #1.down表示单前的server暂时不参与负载
  #2.weight为weight越大,负载的权重就越大。
  #3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
  #4.fail_timeout:max_fails次失败后,暂停的时间。
  #5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
  upstream big_server_com {
    ip_hash; #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    server 127.0.0.3:8000 weight=5;
    server 127.0.0.3:8001 weight=5;
    server 192.168.0.1:8000 down;
    server 192.168.0.1:8001 backup;;
  }

}

proxy.conf

proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffers           32 4k;

内置全局变量

$args :这个变量等于请求行中的参数,同$query_string
$content_length : 请求头中的Content-length字段。
$content_type : 请求头中的Content-Type字段。
$document_root : 当前请求在root指令中指定的值。
$host : 请求主机头字段,否则为服务器名称。
$http_user_agent : 客户端agent信息
$http_cookie : 客户端cookie信息
$limit_rate : 这个变量可以限制连接速率。
$request_method : 客户端请求的动作,通常为GET或POST。
$remote_addr : 客户端的IP地址。
$remote_port : 客户端的端口。
$remote_user : 已经经过Auth Basic Module验证的用户名。
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme : HTTP方法(如http,https)。
$server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name : 服务器名称。
$server_port : 请求到达服务器的端口号。
$request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri : 与$uri相同。
posted @ 2020-05-24 14:53  aaaak  阅读(436)  评论(0)    收藏  举报