nginx.conf配置文件几个案例

nginx配置文件主要分为六个区域:
main(全局设置)、events(nginx工作模式)、http(http设置)、
sever(主机设置)、location(URL匹配)、upstream(负载均衡服务器设置)。
其中还有若干模块,如HttpGzip模块,stubstatus模块等等

结构类似如下:

main
events   {
  ....
}
http        {
  ....
  upstream myproject {
    .....
  }
  server {
    ....
    location {
        ....
    }
  }

1、功能特性
1)基本HTTP服务

   可以作为http代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤,支持SSL,具体包括:

   1>处理静态文件,如HTML网页以及请求;
   2>打开并自行管理文件描述符缓存;
   3>提供反向代理服务,并且可用缓存加速反向代理;
   4>提供远程FastCGI(通用网关接口)服务的缓存机制;
   5>模块化提供过滤器功能,gzip压缩 ranges支持 chunked响应 XSLT SSI 图像缩放 针对包含多个SSI的页面,经由反向代理SSI过滤器可并行处理;
   6>支持安全套接协议SSL;

2)高级HTTP服务

   可以进行自定义配置,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等,具体包括:

   1>支持基于名字和IP的虚拟主机设置;
   2>支持HTTP/1.0 中的keep-alive模式和管线模型(PipelLined)连接;
   3>支持重新升级时,无需中断正在处理的请求;
   4>自定义访问日志格式、带缓存的日志写操作以及快速日志轮转;
   5>提供3xx 5xx错误代码重定向功能;
   6>支持重写模块扩展;
   7>支持HTTP DAV模块,从而为HTTP DAV模块提供PUT DELETE MKCOL COPY MOVE方法;
   8>支持FLV流和MP4流传输;
   9>支持网络监控,访问控制、速度限制或请求限制等;
   10>支持嵌入perl语言;

3)邮件代理服务

   邮件代理服务器,支持IMAP/POP3代理服务功能,支持内部SMTP代理服务功能,具体包括:

   1>支持使用外部HTTP认证服务器重定向用户到IMAP/POP3后端,并支持IMAP认证方式和POP3认证方式;
   2>支持使用外部HTTP认证服务器器认证用户后重定向连接到内部SMTP后端,并支持SMTP认证方式;
   3>支持邮件代理服务下的安全套接层安全协议SSL;
   4>支持纯文本通信协议的扩展协议STARTTLS;

4)常用功能

   1>HTTP代理和反向代理,优势:请求稳定,后端转发与业务配合分离,配置灵活,支持判断表达式。
   2>负载均衡,优势:
       1》将单一的重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总给用户提高网络系统的处理能力;
  2》将大量的前端并发访问或者数据流量分担到多个后端网络节点上分别处理;

nginx的负载均衡策略:

 1》内置策略:轮询、加权轮询、IP hash
  2》扩展策略 主要通过第三方模块实现,常见有url hash
  3>WEB缓存,主要由Proxy_Cache(提供代理服务时,对后端服务器返回内容进行URL缓存)和FastCGI_Cache(对FastCGI程序缓存)指令集构成。

2、常用命令

方法 说明
1)检查: nginx -t
2)启动: nginx 加参数-c指定nginx.conf
3)停止: nginx -s stop
4)重启: nginx -s reload

3、配置
nginx.conf主要由以下三块组成:

1)全局块

配置一些影响整体运行的指令,通常有:服务器用户组、允许生成的worker、process、nginx.pid存放路径、日志存放路径、类型和配置文件引入,全局块配置项有:

配置项 说明 其它可配置的地方
user
配置用户和组,默认为nobody nobody,表示所有用户有启停权限。

daemon 设置是否以守护进程模式运行,默认on。该选项仅用于开发测试。
debug_points 断点调试。
master_process 设置是否启用主进程,默认on。
worker_processes

设置为数字,表示启动后就具有几个worker process,

设置为auto则表示自动检测。

worker_rlimit_nofile worker进程能打开的文件描述符个数
worker_rlimit_sigpending 设置每个用户能够发往worker进程的信号数量(信号队列的大小)
worker_cpu_affinity 为worker进程绑定若干个CPU,OS为linux才能使用此参数。
worker_priority 设置worker进程的优先级
error_log 指定nginx的运行日志存放路径,必须包含文件名称。
全局块、http块、server块和location块

pid
指定nginx的pid存放路径,必须包含文件名称。

SSL_engine

指定所使用的ssl硬件加速设备。
timer_resolution 设置多长时间获取一次系统时间并更新nginx的缓存时钟。
include 引入的其他配置文件路径。 任意位置
2)events块

   影响nginx服务器与用户的网络连接,这一块的设置对服务的性能影响较大。通常有:是否开启对WP下的网络进行序列化、是否允许同时接受多个网络连接、事件驱动模型、每个WP可以同时支持处理的最大连接数,events块配置项有:
配置项 说明 其他可配置的地方
use 设置事件驱动模动模型,建议让nginx自行选择。可以设置为:select、poll、kqueue、epoll、rtsig /dev/poll、eventport。
debug_connection 设置指定的IP产生debug日志。
accept_mutex 是否开启负载均衡锁,即:当只有一个请求进来时,是否只唤醒一个进程(控制“惊群效应”),否则轮流接受请求。
lock_file 设置负载均衡锁文件路径
multi_accept 设置一个进程是否可以同时接受多个请求。
accept_mutex_delay 设置获得负载均衡锁的重试时间间隔。
worker_connections 允许每一个worker process同时开启的最大连接数,此值不能大于操作系统支持的打开的最大文件句柄数,默认512。

3)http块

    nginx.conf最重要的组成部分,包括:MIME-TYPE定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限、代理、缓存和第三方模块的配置。http块中包含http全局块和多个server块。http全局块配置项有:
配置项 说明 其他可配置的地方
allow 配置允许访问服务的ip server块、location块
deny 配置不允许访问服务的ip server块、location块
default_type 默认为text/plain。 server块、location块
log_format [name] [string] string整体需要用'括起来,变量名称使用双引号括起来。
access_log [path] [format_name [buffer=size]] 应答前端请求的服务日志,关闭日志使用off。 server块、location块
sendfile 是否允许sendfile方式传输文件,默认on。
sendfile_max_chunk 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
client_body_in_file_only 指定是否将用户请求体存储到一个文件里。 server块、location块
client_body_in_single_buffer 设置是否将完整的请求主体存储在单个缓冲区中。
client_body_buffer_size 指定用户请求体所使用的buffer的最大值。 server块、location块
client_body_temp_path 设置存储用户请求体的文件的目录路径 server块、location块
client_body_timeout 设置用户请求体的超时时间。 server块、location块
client_header_buffer_size 设置用户请求头所使用的buffer大小 server块
large_client_header_buffers 设置用于读取大型客户端请求头的缓冲区的最大数量和大小
client_header_timeout 设置用户请求头的超时时间。 server块、location块
client_max_body_size 设置所能接收的最大请求体的大小,默认1M。 server块、location块
send_timeout 指定响应客户端的超时时间,单位:秒,默认60
keepalive_timeout 设置用户会话连接的保持时间。 server块、location块
tcp_nopush 设置TCP链接是否不推送,默认on。
tcp_nodelay 设置TCP链接是否延迟,默认on。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞。
autoindex 如果没有首页文件是否列出目录中的所有文件,即是否开启目录浏览功能。 server块、location块
autoindex_format 设置目录浏览功能展示风格,可选:html、xml、json、jsonp server块、location块
autoindex_exact_size 设置文件大小是否以字节数显示,autoindex_format为html时有效。 server块、location块
autoindex_localtime 是否以服务器的文件时间作为显示的时间,autoindex_format为html时有效。 server块、location块
set_real_ip_from 设置符合条件的网段,结合real_ip_header,设置新的$remote_addr server块、location块
real_ip_header 结合set_real_ip_from,设置新的$remote_addr,如果设置X-Forwarded-For则为真实的ip server块、location块
gzip 是否开启gzip压缩。
gzip_min_length 设置允许压缩的页面最小字节数,默认0。
gzip_buffers 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
gzip_http_version 识别http的协议版本。
gzip_comp_level gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)。
gzip_types 匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
gzip_vary 和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩。
gzip_disable 指定版本浏览器不压缩。
upstream 指定负载均衡的后端服务器,例如:server www.xx.com:8080;其后的选项有:weight:负载均衡策略权重, 默认为1;max_fails:在一定时间内(这个时间在fail_timeout参数中设置) 检查这个服务器是否可用时产生的最多失败请求数;fail_timeout:在fail_timeout时间内经历了max_fails次失败后, 暂停服务的时间。 max_fails可以和fail_timeout一起使用, 进行对后端服务器的健康状态检查;backup:当所有后端服务器都宕机时, 可以指定代理服务器自身作为备份, 对外提供维护提示页面;down:永久不可用。
proxy_cache_path 定义一个完整的缓存空间,指定缓存数据的磁盘路径、索引存放的内存空间以及一些其他参数。常用选项有:levels:配置在该目录下再分两层目录,一层1个随机字符作为名称,二层2个随机字符作为名称,levels最多三层,每层最多两个字符,这是为了加快访问文件的速度;最后使用代理url的哈希值作为关键字与文件名;keys_zone:用来为这个缓存区起名,并设置大小;max_size:指定最大缓存数据磁盘空间的大小;inactive:在inactive指定的时间内,未被访问的缓存数据将从缓存中删除。
proxy_cache 用来proxy_cache_path中keys_zone定义的缓存空间, 打开缓存功能,off表示关闭缓存。
proxy_cache_valid 设置不同响应代码的缓存时间
    每个server块中包含server全局块和多个location块,采用就近原则生效。server全局块配置项有:
配置项 说明 其他可配置的地方
keepalive_requests 单连接请求上限次数。 location块
listen 设置监听地址和端口,可加如下参数:address:ip地址,如果是ipv6需要使用[fe13:..]格式;port:端口号,如果只有ip则默认80;path:socket文件路径;default_server:标识符,将ip:port设置为默认的虚拟主机; backlog:设置监听函数listen()最多允许多少网络连接同时处于挂起的状态,默认511(FreeBSD 为-1) rcvbuf:设置监听socket接受缓存区大小;sendbuf:设置监听socket发送缓存区大小;deferred:标识符,将accept()设置为Deferred模式;bind: 标识符,使用独立的bind()处理此adress:port,一般情况下端口相同而IP地址不同,只使用一个 ssl:标识符,设置会话使用ssl模式(https);accept_filter:设置监听端口的请求过滤,被过滤的内容不能被接受和处理(只在FreeBSD NetBSD中有用); setfib:为监听socket关联路由表,只对FreeBSD起作用;
server_name 设置虚拟主机名称,支持多个。可以使用正则,~作为正则开始的标记,并支持捕获。匹配的优先级为:1. 精确匹配,如:www.li.com2. 通配符在开始 ,如:.li.com3. 通配符在结尾 ,如:www.4. 正则表达式匹配 ,以波浪线开头(~^*.li.com$)如果都不匹配1.优先选择listen配置项后有default或default_server的2.找到匹配listen端口的第一个server块
server_name_hash_bucket_size 为实现快速主机查找,nginx使用hash表保存主机名,该参数用来设置hash表大小。
root 设置服务器收到请求后查找资源的根目录路径,最终路径拼接为:root路径+location路径。通常realpath_root只在location块中使用。 location块
alias 设置服务器收到请求后查找资源的根目录路径,最终路径替换为:alias路径+文件名。alias无法在正则的location中使用。 location匹配有四种:按优先顺序分别为:①=:用于普通uri之前,表示严格匹配; ②:uri包含正则表达式,并且区分大小写;③* :表示包含正则表达式,并且不区分大小写; ④!~:与②相反,不匹配区分大小写的正则; ⑤!~*:与③相反,不匹配不区分大小写的正则; ⑥^~ :如果找到与uri匹配度最高的location,立即处理请求,会对uri进行反编码;location块可以使用if条件,配置项有:
配置项 说明 其他可配置的地方
add_header [key] [value] 设置response响应报文的header
auth_basic 是否开启认证功能,并设置提示信息,off关闭。
auth_basic_user_file 指定包含用户名信息的文件路径。
rewrite 重写跳转地址,支持正则。重写规则后需指定控制标识,控制标识有:last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮(从第一个开始)重写检查,在循环中则提前重启新一轮循环;break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;在循环中则结束循环,建议在location中使用;redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头,使用相对路径,状态码:302;permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301。 server块
rewrite_log 是否把重写过程记录到错误日志中,默认为off,级别默认notice。
return [code] [url] 用于结束rewrite规则,并且为客户端返回状态码204,400,402-400,500-504等。格式可以为return code、return url或者return code url
index 设置网站的默认首页。
error_page [code] [path] 设置网站的错误页面。 http块、server块
proxy_pass 指定反向代理的服务器池,如:192.168.10.10 或使用upstream
proxy_set_header 设置发往后端请求头,参数有:Host:指定反向代理到哪个主机名;X-REMOTE-IP:上一跳的ip;X-Forwarded-For:设置客户端ip;http_user_agent:设置客户端OS;默认情况下,只有两个请求头会被重新定义:proxy_set_header Host $proxy_host;proxy_set_header Connection close;
proxy_body_buffer_size 设置客户端请求主体缓冲区大小,可以理解为先保存到本地在传给用户。
proxy_connect_timeout 设置后端服务器连接的超时时间,即发起握手等候响应的超时时间。
proxy_send_timeout 设置后端服务器的数据回传时间,即在规定的时间内后端服务器必须传完所有的数据,否则nginx将断开这个连接。
proxy_read_timeout 设置从后端服务器获取信息的时间,表示连接建立成功之后,nginx等待后端服务器的响应时间,其实nginx已经进入后端的排队之中等候处理。
proxy_buffer_size 设置缓冲区大小。
proxy_buffers 设置缓冲区的数量和大小。
proxy_busy_buffers_size 设置系统忙碌时可以使用的proxy_buffers大小,官方推荐为proxy_buffers*2
proxy_tmep_file_write_size 指定proxy缓存临时文件的大小
proxy_next_upstream 请求出错后,转向下一个节点
fastcgi_pass 指定fastcgi进程监听的IP地址和端口,例如127.0.0.1:9000或者unix:/tmp/fastcgi.socket。也可以使用upstream指定,例如:
upstream backend  {

     server  127.0.0.1:9000;

}

fastcgi_pass   backend;

http块、server块
fastcgi_pass_header

设置请求fastcgi的请求头。 http块、server块
fastcgi_read_timeout fastcgi服务器的响应超时时间。 http块、server块
fastcgi_send_timeout
为上游服务器设置等待一个FastCGI进程的传送数据时间。

http块、server块
fastcgi_split_path_info 0.7.31以上版本使用,是否允许设置SCRIPT_FILENAME (SCRIPT_NAME)和PATH_INFO变量,分别对应:fastcgi_path_info。 http块、server块
fastcgi_store 设置存储前端文件的路径,on指定将使用root和alias指令相同的路径,off禁止存储,此外还可以指定具体的路径。 http块、server块
fastcgi_store_access 指定创建文件或目录的权限,比如:
user:rw group:rw all:r

http块、server块
fastcgi_temp_path 指定存储从别的服务器传送来的数据临时文件路径 http块、server块
fastcgi_index 如果请求fastcgi的URI以/结束,该指令设置的文件会被附加到URI的后面并保存在变量$fastcgi_script_name中 http块、server块
fastcgi_param 指定参数传递给fastcgi http块、server块
fastcgi_redirect_errors 已重命名为:fastcgi_intercept_errors。指定是否传递4xx和5xx错误信息到客户端,或者是否允许nginx使用error_page处理错误信息。 http块、server块
4、内置变量

变量名 说明
$uri 当前请求的URI,不带参数
$document_uri 当前请求的URI,不带参数
$request_uri 请求的uri,带完整参数
$is_args 表示请求中的 URI 是否带参数,如果带参数,$is_args 值为 ?,如果不带参数,则是空字符串
$args http请求的完整参数
$arg_[param] http请求中某个参数的值
$query_string http请求的完整参数,只读不可改变
$host http请求报文中的host首部,如果请求中没有host首部,则以处理此请求的虚拟主机的主机名代替
$hostname nginx服务运行在的主机的主机名。
$proxy_host nginx对于upstream默认使用的是基于IP的转发,所以表示请求到对应的upstream配置的域名的ip
$remote_addr 客户端的ip地址,如果客户端有代理,则为最新的代理服务器的ip
$http_x_real_ip 客户端的ip地址,如果客户端有代理,则为已设置的最新的代理服务器的ip
$http_x_forwarded_for 客户端的ip地址,默认是空。使用proxy_set_header设置后,多个ip按顺序用逗号隔开http_x_forwarded_for和$remote_addr,中间用逗号隔开
$binary_remote_addr 二进制格式的客户端地址
$remote_port 客户端端口
$remote_user 启用用户认证时,客户端输入的用户名
$request_method 请求方法
$request_filename 用户请求中的uri经过本地root或alias转换后映射的本地文件路径
$request_body 表示http请求中的body体,该参数只在proxy_pass或fastcgi_pass中有意义
$request_body_file 表示http请求中的body体存储的临时文件名
$request_completion 当请求已经全部完成时,其值为 “ok” 。若没有完成,就要返回客户端,则其值为空字符串;或者在断点续传等情况下使用http range访问的并不是文件的最后一块,那么其值也是空字符串。
$server_addr 服务器地址
$server_name 服务器域名
$server_port 服务器端口
$server_protocol 服务器向客户端发送响应时的协议,如http/1.1
$scheme 在请求中使用scheme,如https://www.magedu.com/中的scheme
$http_[header] 匹配请求报文中指定的HEADER,例如:$http_host匹配请求报文中的host首部
$sent_http_[header] 匹配响应报文中指定的HEADER,例如:$sent_http_content_type匹配响应报文中content-type首部
$document_root 当前请求映射到的root配置项
$time_local 访问时间与时区
$request 请求的url与http协议
$status 请求状态,成功是200
$body_bytes_sent 发送给客户端文件主体内容大小
$http_referer 记录从那个页面链接访问过来的
$http_user_agent 记录客户端浏览器的相关信息
$content_length 请求头部中的Content-Length字段
$content_type 请求头部中的Content-Type字段
$cookie_COOKIE 请求头部中的cookie字段
$limit_rate 表示当前连接的限速是多少,0表示无限速
$nginx_version 表示当前Nginx的版本号

例一:

这是一个比较完整的nginx配置文件示例,下面的nginx.conf简单的实现nginx在前端做反向代理服务器的例子,处理js、png等静态文件,jsp等动态请求转发到其它服务器tomcat,以及负载均衡的配置。

user  www www;
worker_processes  2;
 
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
pid        logs/nginx.pid;
 
 
events {
    use epoll;
    worker_connections  2048;
}
 
 
http {
    include       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"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    # tcp_nopush     on;
 
    keepalive_timeout  65;
 
  # gzip压缩功能设置
    gzip on;
    gzip_min_length 1k;
    gzip_buffers    4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 6;
    gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;
 
  # http_proxy 设置
    client_max_body_size   10m;
    client_body_buffer_size   128k;
    proxy_connect_timeout   75;
    proxy_send_timeout   75;
    proxy_read_timeout   75;
    proxy_buffer_size   4k;
    proxy_buffers   4 32k;
    proxy_busy_buffers_size   64k;
    proxy_temp_file_write_size  64k;
    proxy_temp_path   /usr/local/nginx/proxy_temp 1 2;
 
  # 设定负载均衡后台服务器列表 
    upstream  backend  { 
              #ip_hash; 
              server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;  
              server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;  
    }
 
  # 很重要的虚拟主机配置
    server {
        listen       80;
        server_name  itoatest.example.com;
        root   /apps/oaapp;
 
        charset utf-8;
        access_log  logs/host.access.log  main;
 
        #对 / 所有做负载均衡+反向代理
        location / {
            root   /apps/oaapp;
            index  index.jsp index.html index.htm;
 
            proxy_pass        http://backend;  
            proxy_redirect off;
            # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;  
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
 
        }
 
        #静态文件,nginx自己处理,不去backend请求tomcat
        location  ~* /download/ {  
            root /apps/oa/fs;  
 
        }
        location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$   
        {   
            root /apps/oaapp;   
            expires      7d; 
        }
        location /nginx_status {
            stub_status on;
            access_log off;
            allow 192.168.10.0/24;
            deny all;
        }
 
        location ~ ^/(WEB-INF)/ {   
            deny all;   
        }
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
 
  ## 其它虚拟主机,server 指令开始
}


#运行用户
user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;
 
#全局错误日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
#工作模式及连接数上限
events {
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,
    #仅用于linux2.6以上内核,可以大大提高nginx的性能
    use   epoll; 
 
    #单个后台worker process进程的最大并发链接数    
    worker_connections  1024;
 
    # 并发总数是 worker_processes 和 worker_connections 的乘积
    # 即 max_clients = worker_processes * worker_connections
    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
    # 为什么上面反向代理要除以4,应该说是一个经验值
    # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
    # worker_connections 值的设置跟物理内存大小有关
    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
    # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
    # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
    # $ cat /proc/sys/fs/file-max
    # 输出 34336
    # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
    # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
    # 使得并发总数小于操作系统可以打开的最大文件数目
    # 其实质也就是根据主机的物理CPU和内存进行配置
    # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
    # ulimit -SHn 65535
 
}
 
 
http {
    #设定mime类型,类型由mime.type文件定义
    include    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"';
 
    access_log  logs/access.log  main;
 
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile     on;
    #tcp_nopush     on;
 
    #连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;
 
    #开启gzip压缩
    gzip  on;
    gzip_disable "MSIE [1-6].";
 
    #设定请求缓冲
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;
 
 
    #设定虚拟主机配置
    server {
        #侦听80端口
        listen    80;
        #定义使用 www.nginx.cn访问
        server_name  www.nginx.cn;
 
        #定义服务器的默认网站根目录位置
        root html;
 
        #设定本虚拟主机的访问日志
        access_log  logs/nginx.access.log  main;
 
        #默认请求
        location / {
 
            #定义首页索引文件的名称
            index index.php index.html index.htm;   
 
        }
 
        # 定义错误提示页面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }
 
        #静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
 
            #过期30天,静态文件不怎么更新,过期可以设大一点,
            #如果频繁更新,则可以设置得小一点。
            expires 30d;
        }
 
        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
 
        #禁止访问 .htxxx 文件
            location ~ /.ht {
            deny all;
        }
 
    }
}


user  www www;  #指定Nginx Worker进程运行用户以及用户组
 
worker_processes 2; #指定了Nginx要开启的进程数,多核CPU指定和核数一样多的进程数
 
pid        logs/nginx.pid; #指定进程id的存储文件位置
 
worker_rlimit_nofile 65535; #指定单进程打开文件数,需与系统设定一致
 
 
 
events {
 
use epoll;  #指定nginx工作模式,nginx主要的工作模式有select、poll、kqueue、epoll
 
            其中select、poll是标准工作模式,kqueue、epoll为高效工作模式,epoll用在Linux系统中,而kqueue用在BSD系统中
 
    worker_connections  65535;#指定单进程的最大连接数
 
}
 
 
 
HTTP部分
 
 
 
http {
 
    include      mime.types; #指定配置文件所包含的文件
 
    default_type  application/octet-stream; #指定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口
 
 
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#设定日志格式
 
                      '$status $body_bytes_sent "$http_referer" '
 
                      '"$http_user_agent" "$http_x_forwarded_for"';;
 
   
 
 
 
client_max_body_size  20m;  #设置允许客户端请求的最大的单个文件字节数
 
    client_header_buffer_size    16k;#指定来自客户端请求头的headerbuffer大小,如果自定义了消息头或有更大的cookie,可以在这里增加缓冲大小
 
    large_client_header_buffers  4 32k;#指定客户端请求中较大的消息头的缓存最大数量和大小,4为个数,32k为大小,最大缓存为4个32kb
 
 
 
    sendfile        on;#开启高效传输模式
 
    tcp_nopush    on;  # tcp_nopush,tcp_nodelay设置on,防止网络阻塞
 
    tcp_nodelay    on;         
 
   
 
    keepalive_timeout  65; #指定客户端连接保持活动的超时时间
 
    client_header_timeout  10;#指定客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
 
    client_body_timeout  10;#指定客户端请求主体读取超时时间,如果超过这个时间���客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
 
send_timeout        10;#指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接
 
 
 
 
 
    gzip  on; #开启gzip压缩,实时压缩输出数据流
 
    gzip_min_length  1k; #设置允许压缩的页面最小字节数
 
    gzip_buffers    4  16k; #指定内存空间来存贮压缩结果,这里指定4个单位为16k的内存来存储压缩结果,即总大小为64k
 
    gzip_http_version  1.1;#指定识别HTTP协议版本,默认是1.1
 
    gzip_comp_level  2;#指定gzip压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源
 
    gzip_types  text/plain application/x-javascript text/css application/xml;#指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩
 
    gzip_vary  on;#该选项开启可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Varnish缓存经过Nginx压缩的数据
 
 
 
server_tokens off;#隐藏Nginx版本号
 
 
 
server {
 
        listen      8000; #指定Nginx监端口
 
        server_name  localhost;#用来指定IP或者域名
 
 
 
        charset utf-8;#指定Nginx默认的字符集,只有utf-8支持中文字符
 
        access_log  logs/host.access.log  main;#指定访问日志的名称及位置
 
 
 
        location / {
 
            index  index.html index.htm;#设定默认首页
 
            root /tom/webapps/ROOT;#指定网页根目录
 
        }
 
 
 
location ~ (jsp|\?) {      #指定url中包含jsp或者?的全部转发到192.168.0.10的80端口即tomcat处理
 
            proxy_pass  http://192.168.0.10:80;
 
        }

状态监控模块:

image

image

注意访问的url

你可能感兴趣的:(nginx.conf配置文件几个案例)