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;
}
状态监控模块:
注意访问的url