[nginx]默认ngixn.conf配置文件源码解析

 

备注:因为经常使用nginx部署php项目,所以源码带有php配置注释例子

 

 


 

#user nginx nginx;

Nginx用户及组:用户组

默认为#user nobody;

 

worker_processes 4;

工作进程:通常根据硬件调整,等于CPU处理机数量或两倍数量

 

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

错误日志:logs目录,存放日志路径

 

#pid logs/nginx.pid

pid:进程标识符的存放路径

 

events {

  #use epoll;

使用epoll的I/O模型,epoll使用于Linux内核2.6版本及以后的系统

nginx与apache相类,针对不同的OS,有不同的事件模型:

A)标准事件模型

Select、poll属于标准事件模型,如果当前系统不存在更有效的方法(如epoll),nginx会选择select或poll

B)高效事件模型

Epoll:使用于Linux内核2.6版本及以后的系统。

Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。

等等...

  worker_connections 204800;

每一个工作进程的最大连接数量,根据硬件调整,可以尽量大,但别吧CPU跑到100%就行。

每一个进程允许的最多连接数,理论上=worker_processes*worker_connections

  #keepalive_timeout 60;

设置超时时间

  #client_header_buffer_size 4k;

设置客户端请求头部的缓冲区大小。可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小(分页大小可以使用命令getconf PAGESIZE获取)

注意,client_header_buffer_size该值必须设置为“系统分页大小”的整倍数

  #open_file_cache max=65535 inactive=60s;

为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存

  #open_file_cache_valid 80s;

设置多久检查一次缓存的有效信息

  #open_file_cache_min_uses 1;

open_file_cache指令中的inactive参数时间内文件的最少使用次数,比如60s。

如果超过这个时间,文件描述符一直是在缓存中打开的,如设置为1,即如果有一个文件在inactive时间内一次没被使用,它将被移除

}

 

设定http服务器,利用它的反向代理功能提供负载均衡支持,通过不同的域名请求分发到不同的项目目录中

http {  

  include mime.types;

设定mime类型,类型由mime.types文件定义

 

  default_type application/octet-stream;

 

  #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

  #         '$status $body_bytes_sent "$http_referer" '

  #            '"$http_user_agent" "$http_x_forwarded_for"';

  #log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';

设置日志格式

$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地址和原来客户端的请求的服务器地址。

 

  #access_log  logs/host.access.log  main;  

用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径

 

  sendfile on;

  #tcp_nopush on;

sendfile指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime

tcp_nopush允许或禁止使用socket的TCP_CORK的选项,此选项仅在使用sendfile的时候使用

 

  #keepalive_timeout 0;

  keepalive_timeout 65;

keepalive超时时间。

 

  #gzip on;

  gzip on;

 

  upstream bakend {

定义负载均衡设备的ip及设备状态

bakend为访问域名image.***.com,比如cms.project.com,对于其他域名访问,如www.project.com,同样使用upstream配置

    server 127.0.0.1:8027;

    server 127.0.0.1:8028;

    server 127.0.0.1:8029;

    hash $request_uri;

  }

nginx的upstream目前支持4种方式的分配

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
  server 192.168.0.14 weight=10;
  server 192.168.0.15 weight=10;
}

2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访问固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
  ip_hash;
  server 192.168.0.14:88;
  server 192.168.0.15:80;
}

3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
  server server1;
  server server2;
  fair;
}

4、url_hash(第三方)

按访问url的hash结果来分配,使每个url定向到同一个后端服务器,在后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {
  server squid1:3128;
  server squid2:3128;
  hash $request_uri;
  hash_method crc32;
}

示例:

upstream bakend{#定义负载均衡设备的Ip及设备状态}{
  ip_hash;
  server 127.0.0.1:9090 down;
  server 127.0.0.1:8080 weight=2;
  server 127.0.0.1:6060;
  server 127.0.0.1:7070 backup;
}

1.down表示单前的server暂时不参与负载

2.weight为weight越大,负载的权重就越大。

3.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

 

备注:可以配置多个upstream,即支持多组的负载均衡,用来给不同的server虚拟机使用

 

配置虚拟机

  server {

    listen 80;

配置监听端口

    server_name image.***.com;

 

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

 

配置访问域名

    location / {

      root  /opt/javaweb/tianti-module-gateway;

      index  index.html index.html;

    }

根目录访问

    location /static {

      root  /opt/javaweb/tianti-module-gateway;

    }

含static目录访问

    location ~* \.(mp3|exe)$ {

      root /opt/javaweb/tianti-module-admin;

      expires 24h;

    }

以“mp3|exe”结尾的地址

    error_page  500 502 503 504  /50x.html;

    location = /50x.html {

      root  html; 

    }

  }

 

server {

  ...

 

  location / {

对根目录访问进行负载均衡

      root  /opt/javaweb/tianti-module-admin;

      index  index.html index.html;

 

      #proxy_pass http://img_relay$request_uri;

      proxy_pass  http://127.0.0.1:8080;

设置被代理服务器的端口嗯或套接字,以及URL

该例设置动态请求都转发到http://127.0.0.1:808的tomcat应用去处理

 

      proxy_set_header Host $host;

      proxy_set_header X-Real-IP $remote_addr;

      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

以上三行,目的是将代理服务器收到的用户的信息传送到真实的tomcat服务器上

      proxy_set_header REMOTE-HOST $remote_addr;

    }

 

  ...

}

  


 

更多详细了解可以阅读另一位博友的文章  

posted @ 2018-06-08 01:30  hoanfir  阅读(627)  评论(0编辑  收藏  举报