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

 

备注:由于常用nginx部署php项目,因此源码带有php配置注释例子php

 

 


 

#user nginx nginx;html

Nginx用户及组:用户组java

默认为#user nobody;nginx

 

worker_processes 4;web

工做进程:一般根据硬件调整,等于CPU处理机数量或两倍数量算法

 

#error_log  logs/error.log;apache

#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种方式的分配

一、轮询(默认)

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

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

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

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

四、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;

    }

 

  ...

}

  


 

更多详细了解能够阅读另外一位博友的文章  

相关文章
相关标签/搜索