赞
踩
Nginx配置详解
欢迎关注我的公众号《pencil带你玩转Linux》,回复“Linux学习资料”获取视频教程哦。
#nginx进程,一般设置为和cpu核数一样
worker_processes 4; #或者auto
#错误日志存放目录
error_log /data1/logs/error.log crit;
#运行用户/组,默认即是nginx,可不设置
user nginx nginx;
#进程pid存放位置
pid /application/nginx/nginx.pid;#最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
worker_rlimit_nofile 51200; #为nginx工作进程改变打开最多文件描述符数目的限制。用来在不重启主进程的情况下增加限制,理论上这个值是最多打开文件数(ulimit -n)与nginx工作进程相除。
Events事件
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024; #;单个后台worker process进程的最大并发链接数
Http设置
Include mime.types;设置mime类型,类型由mime.type文件定义
default_type application/octet-stream; #默认文件类型
#limit模块,可防范一定量的DDOS攻击
#用来存储session会话的状态,如下是为session分配一个名为one的10M的内存存储区,限制了每秒只接受一个ip的一次请求 1r/s
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
#第三方模块lua防火墙
lua_need_request_body on;
#lua_shared_dict limit 50m;
lua_package_path "/application/nginx/conf/waf/?.lua";
init_by_lua_file "/application/nginx/conf/waf/init.lua";
access_by_lua_file "/application/nginx/conf/waf/access.lua";
#设定请求缓存
server_names_hash_max_size 64; 服务器名称哈希表的最大值 默认值:512 使用字段:http
server_names_hash_bucket_size 128; 服务器名称哈希表每个页框的大小,这个指令的默认值依赖于cpu缓存 默认值:32 ,64, 128 使用字段:http
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;
client_max_body_size 100m;
#隐藏响应header和错误通知中的版本号
server_tokens off;
#开启高效传输模式
sendfile on;#senfile指令指定nginx是否调用 sendfile函数来输出文件,对于普通的应用必须设为 on,如果用来进行下载等应用磁盘IO负载应用,可以设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime
#激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,
积极的作用是减少网络报文段的数量
tcp_nopush on;
#激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
tcp_nodelay on;
#FastCGI相关参数:为了改善网站性能:减少资源占用,提高访问速度
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_intercept_errors on|off;
这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
你必须明确的在error_page中指定处理方法使这个参数有效,正如Igor所说“如果没有适当的处理方法,nginx不会拦截一个错误,这个错误不会显示自己的默认页面,这里允许通过某些方法拦截错误。
增加头标
add_header
语法: add_header name value
如: add_header Cache-Control no-cache;
默认值: none
作用域: http, server, location
当HTTP应答状态码为 200、204、301、302 或 304 的时候,增加指定的HTTP头标。
其中头标的值可以使用变量。
open_file_cache max 102400
使用字段:http, server, location 这个指令指定缓存是否启用,如果启用,将记录文件以下信息: ·打开的文件描述符,大小信息和修改时间. ·存在的目录信息. ·在搜索文件过程中的错误信息 -- 没有这个文件,无法正确读取,参考open_file_cache_errors 指令选项:
·max - 指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除
例: open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
open_file_cache_errors
语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.
open_file_cache_min_uses
语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 使用字段:http, server, location 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如 果使用更大的值,文件描述符在cache中总是打开状态.
open_file_cache_valid
语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息.
----------------------------------------------
#连接超时时间,单位是秒/长连接
keepalive_timeout 60;
keepalive_requests 8192; --每个连接最大请求数
Log_format日志
普通模式:
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 /usr/local/nginx/access/access.log main buffer=32k;
#日志文件存放路径
Error_log /usr/local/nginx/error/error.log error; #错误日志文件存放路径
字段 | 说明 |
$remote_addr | 客户端地址 |
$remote_user | 客户端用户名称 |
$time_local | 访问时间和时区 |
$request | 请求的URI和HTTP协议 |
$http_host | 请求地址,即浏览器中你输入的地址(IP或域名) |
$status | HTTP请求状态 |
$upstream_status | Upstream状态 |
$body_bytes_sent | 发送给客户端的文件内容大小 |
$http_user_agent | 用户终端浏览器等信息 |
$ssl_protocol | Ssl协议版本 |
$ssl_cipher | 交换数据中的算法 |
$upstream_addr | 后台upstrean的地址,即真正提供服务的主机地址 |
$request_time | 整个请求总时间 |
$upstream_response_time | 请求过程中,upstream响应时间 |
$http_referer | Url跳转来源 |
Server虚拟主机设置
Listen 80; #监听端口
server_name www.abc.com abc.com; #虚拟主机名称
index index.html index.htm index.php; #首页排序,能够识别的文件类型
Root /var/www/html; #网站根目录
error_page 500 502 404 /templates/kumi/phpcms/404.html; #错误页面
Charset utf-8;#编码识别
SSL相关
Listen 443 ssl;#监听端口443
ssl on; #开启ssl
ssl_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/server.crt; #服务的证书
ssl_certificate_key /ls/app/nginx/conf/mgmtxiangqiankeys/server.key; #服务端key
ssl_client_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/ca.crt; #客户端证书
ssl_session_timeout 5m; #session超时时间
ssl_verify_client on; # 开户客户端证书验证
ssl_protocols SSLv2 SSLv3 TLSv1; #指定用于启动特定的加密协议,nginx1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1与TLSv1.2要确保OpenSSL>=1.0.1,SSLv3 现在还有很多地方在用但是有不少被攻击的漏洞
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #加密算法,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OPENSSL库能够识别的写法,你可以通过openssl -v cipher ‘RC4:HIGH:!aNULL:!MD5’(后面是你所指定的套件加密算法)来看所支持的算法。
ssl_prefer_server_ciphers on; #启动加密算法
ssl_session_cache shared:SSL:10m;#设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是sheared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1m可以存放越4000个sessions。
Location 标签
deny all;#禁止访问
fastcgi_pass 127.0.0.1:9000; #抛给本机的9000端口
fastcgi_index index.php; #设置动态页面
allow 219.237.222.30 ;#允许访问的ip
expires 30d;#客户端缓存30天
负载均衡,反向代理相关
proxy_pass http://server反向代理到upstream server1{}模块
#后端的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_redirect off指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
proxy_max_temp_file_size 0; #这是每个请求能用磁盘上临时文件最大大小。这些当上游响应太大不能装配到缓冲区时被创建。
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
client_max_body_size #上传文件大小最大限制
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
分页大小可以用命令getconf PAGESIZE 取得。
client_body_buffer_size 512k;
如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。
无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误
proxy_max_temp_file_size 0;
设置最大的缓存大小,0位不缓存
resolver指令用于指定DNS服务器的IP地址
resolver address ... [valid=time];
resolve_timeout指令用于设置DNS服务器域名解析超时时间
resolve_timeout time;
缓存设置
nginx的http_proxy模块,可以实现类似于Squid的缓存功能。Nginx对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络拥塞,同时还能减小数据传输延迟,提高用户访问速度。同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务器的鲁棒性。
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
Poxy_cache此缓存设置应该写在http模块里
/usr/local/nginx/cache 缓存文件存放地址
Levels=1:2
默认所有缓存文件都放在同一个/usr/local/nginx/cache下,但会影响缓存性能,因此通常会在/usr/local/nginx/cache下面建立子目录用来分别存放不同的文件。假设levels=1:2,Nginx为将要缓存的资源生成key为f4cd0fbc769e94925ec5540b6a4136d0,那么key的最后一位0,以及倒数第2-3位6d作为两级的子目录,也就是该资源最终会被缓存到/usr/local/nginx/cache/0/6d目录中
Keys_zone=my_cache
在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数)这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key 10m可以存储80000个key
max_size
(设置硬盘缓存区空间大小)最大的ceche空间,如果不指定,会使用所有的disk space ,当达到配额后,会删除最少使用的cache文件
Inactive=60m
未被访问文件在缓存中保留的时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
use_temp_path
如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
location / {
...
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
}
proxy_cache_use_stale
增强站点容错能力
源站有问题时,nginx可以通过proxy_cache_use_stale指令开启容错能力,即使用缓存内容来响应客户端的请求。
proxy_set_header Host $host;
自定义http header头,用于发送给后端真实服务器。
proxy_cache cache_one;
启用proxy cache,并指定key_zone。另外,如果proxy_cache off表示关闭掉缓存。
proxy_cache_valid
为不同的HTTP返回状态码的资源设置不同的缓存时长。
proxy_cache_valid 200 304 12h;
为响应码是200和304的资源,设置缓存时长为12小时
proxy_cache_valid 301 302 1m;
为响应码是301和302的资源,设置缓存时长为1分钟
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args;
nginx对缓存的资源会设置一个key,NGINX生成的键的默认格式是类似于上面的NGINX变量的MD5哈希值:$scheme$proxy_host$request_uri,实际的算法有些复杂。 为了改变变量(或其他项)作为基础键,可以使用proxy_cache_key命令。例如,
proxy_cache_methodes
语法:proxy_cache_methodes[ GET HEAD POST];
该指令用于设置缓存那些HTTP方法,默认缓存HTTP GET/HEAD方法,不缓存HTTP POST
方法
proxy_cache_min_uses
语法:proxy_cache_min_uses the_number;
该指令用于设置缓存的最小使用次数,默认值为1
proxy_cache_purge
缓存清理指令
Gzip压缩
在ngixn服务器配置文件中可以通过配置Gzip的使用,可以配置http块,server块或者location块中设置,nginx服务器可以通过ngx_http_gzip_module模块,ngx_http_static_module模块,ngx_http_static_module模块功能ngx_http_gunzip__module模块对这些指令进行分析和处理。
用于打开或者关闭gzip压缩功能,用法如下:
gzip on|off #默认为off
用于指定gzip功能压缩文件时使用的缓存空间的大小,语法结构为:
Gzip_buffers number | size;
Number #指定Nginx服务器需要向服务器申请的缓存空间个数
Size #指定每个缓存空间的大小,从nginx0.7.8开始,默认number*size的值为128,其中size取系统中内存页一页的大小,为4k或者8k等
Gzip_buffers 32 4k | 12 8k;
2.gzip_http_version
早期的一些浏览器或者http客户端可能不支持gzip压缩,因此有客户有时候会看到乱码,那是因为客户端无法进行解压,因此可以根据不同的http协议版本进行选择性的打开或关闭gzip功能,用法如下:
gzip_http_version 1.0 | 1.1; #对使用htto协议1.0和1.1的请求进行压缩
3.gzip_comp_level
指定gzip压缩级别,级别为1-9,默认为1,级别越高压缩率越高即压缩后的文件越小,但占用cpu,压缩率越小压缩后的文件越大,但是节约cpu。
Gzip_comp_level 4; #推销先设置为中间值,比如4或5
4.gzip_disbale
针对不同客户端发起的请求进行有选择的打开或关闭gzip命令,后跟浏览器的名称,用法如下:
Gzip_disable msie[1-6]\. 3使用正则表达式可以配置UC字符串中MSIE 1-6浏览器,这三个浏览器在发起请求后nginx将不进行数据包的压缩。
5、gzip_min_length
设置最少压缩的数据包大小,小于此值的数据包将不被压缩,因为大量的小的数据压缩后没有明显的效果还占用了CPU的资源,因此可以设置最少多大的数据才进行压缩,用法如下:
gzip_min_length 1024; #默认为20,建议设置位1KB,如果设置为0则表示压缩全部数据包
6、gzip_proxine
在Nginx 服务器作为反向代理的时候有效,用于设置nginx 服务器是否对后端返回的结果进行gzip压缩,用法如下:
gzip_proxied off | any; #off为关闭,any为压缩所有后端服务器返回的数据。
7、gzip_types
设置Nginx服务器可以根据响应页面的类型进行选择性的打开或关闭gzip功能,用法如下:
gzip_types text/plain application/x-javascript text/css application/xml; #一般情况下如此设置
8、gzip_vary
用于设置是否在使用gzip功能时发送带有"vary:Accept-Encoding" 头域的响应头部,该头域的主要功能时要告诉客户端数据已经在服务器进行了压缩,默认设置为off,用法如下:
gzip_vary on| off; #默认为off
还可以使用Nginx 配置的add_header指令强制在Nginx服务器的响应头部添加“Vary:Accept-Encoding”也可以实现相同的效果。
二:ngx_http_gzip_static_module 模块:
该模块辅助用于搜索和发送经过gzip功能压缩的数据,这些数据以*.gz作为后缀名存储在服务器上,如果客户端请求的数据之前被压缩过,并且客户端的浏览器支持压缩,将直接范湖压缩后的数据,该模块使用的是静态编码,在http响应头部包含content-length头域来指明报文的长度,用于服务器可以确定
响应数据的长度的情况,而ngx_http_gzip_module使用chunked编码动态压缩,主要用于服务器无法确定响应数据长度的情况,比如较大文件的下载等情形,此时就要实时生成数据的长度,用法与ngx_http_gzip_module一样,如下:
1、gzip_static
gzip_static off | on | always; #on为开启并检查客户端浏览器是否中吃gzip压缩功能,off为关闭,always一直发送gzip压缩文件,而不检查浏览器是否支持gzip压缩
注:这是一个可选模块,如果要使用,必须在编译nginx时添加--with-http_gzip_static_module编译,与该模块有关的 指令与ngx_http_gzip_module的模块使用方法是一致的,本模块有gzip_static、gzip_http_version、gzip_proxied、gzip_disable和gzip_vary等。
三:ngx_http_gunzip_module 模块处理的两个指令
1、gunzip
设置Nginx服务器对不支持gzip的客户端返回解压后的数据,如果客户的浏览器支持压缩还仍然返回压缩的后的数据,及可以同时响应支持gzip的浏览器进程压缩,有可以响应不支持gzip的浏览器。
gunzip on|off ;#on为打开off为关闭
2、gunzip_buffers #用于设置nginx服务器解压gzip文件时候使用的缓存空间大小的,用法如下:
gunzip_buffers number size; #number为nginx服务器向系统向系统申请缓存空间的个数,size为每个空间的大小,单位为k,默认情况下number * size的大小为128k,其中size 的值取系统内存页一页的大小为4KB或者8KB即可,用法如下:
gunzip_buffers 32 4k | 16 8k; #与ngx_http_gzip_module模块下的使用方法一致。
反向代理,负载均衡
设置负载均衡服务器列表
upstream [名称]
{
Ip_hash;当用户再访问时,会将该请求通过哈希算法,自动定位到该服务器。这样每个访客固定访问一个后端服务器,可以解决session的问题。
server 192.168.52.128 weigth 8;
#weigth参数表示权值,权值越高被分配到的几率越大,轮询的加强版
#fail_timeout 等待请求的目标服务器发送响应的时长。
#backup 用于fallback的目的,所有服务器故障时才启动此服务器
#down 手动标记其不再处理如何请求
#fair 顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。Nginx本身不支持fair,必须下载Nginx的upstream_fair模块。
#least_conn(最少连接数)
# consistent_hash $request_uri; 一致性hash
keepalive 128;
}
URL重写(rewrite)
和apache等web服务一样,rewrite的主要功能是实现URL地址重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规制匹配的,默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持
Rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记
语法:
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
关键字:其中关键字rewrite不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
Rewrite参数的标签段位置:
Server,location,if
例如:
Rewrite ^/(.*) http://www.baidu.com/$1 permanent;
说明:
rewrite为固定关键字,表示开始进行rewrite匹配规则
regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上
Regex常用正则表达式说明
字符 | 描述 |
\ | 将在后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如:\n匹配一个换行符,而 \$则匹配 $ |
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或多次。如 ”ol*”能匹配 ”0”及ol, “oll” |
+ | 匹配前面的字符一次或多次。如"ol+”能匹配 ”ol”及 “oll”但不能匹配 “ o” |
? | 匹配前面的字符零次或一次,例如 “do(es)?”能匹配“do”或者 “does”,“?”等效于“{0,1}” |
. | 匹配除“\n”之外的任何单个字符,若要匹配包括 “\n”在内的任意字符。请使用诸如 “[.\n]”之类的模式 |
(pattern) | 匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要 |
rewrite 企业应用场景
Nginx的rewrite功能在企业里应用非常广泛:
u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com
u 根据特殊变量、目录、客户端的信息进行URL调整等
-----------------------------------------------------------------------------------------------------------------
附:完整的nginx.conf配置文件
user nginx nginx;
worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
http {
include mime.types; #设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'fwf[$http_x_forwarded_for] tip[$http_true_client_ip] '
'$upstream_addr $upstream_response_time $request_time '
'$http_host $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_accept_language" "$http_user_agent" ';
#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; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
#将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
tcp_nopush on;
tcp_nodelay on;
#配置nginx代理服务器哦缓存来减少响应时间
#keepalive_timeout 0;
keepalive_timeout 65; #连接超时时间
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;
proxy_temp_path /usr/local/nginx/temp;
gzip on; #开启gzip压缩
#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
proxy_buffer_size 64k;
proxy_buffers 8 64k;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
#设定负载均衡的服务器列表
upstream server1 {
#weigth参数表示权值,权值越高被分配到的几率越大
# #本机上的Squid开启3128端口
# ip_hash; #当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。这样每个访客固定访问一个后端服务器,可以解决session的问题。
#server 192.168.52.129:8080 weight=5;
#server 192.168.52.129:80 weight=1;
server 192.168.52.134:8080;
#max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;
#fail_timeout:等待请求的目标服务器发送响应的时长;
#backup:用于fallback的目的,所有服务均故障时才启动此服务器;
#down:手动标记其不再处理任何请求
}
upstream server2 {
server 192.168.52.134:8080;
}
server {
listen 192.168.52.134:80;
server_name www.web1.com;
index index.php index.html;
charset UTF-8;
#charset koi8-r;
access_log /web1/log/access.log ;
error_log /web1/log/error.log error;
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
proxy_cache cache_one;
proxy_pass http://server1;
#以下是一些反向代理的配置可删除.
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;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
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 {
}
location /backend {
proxy_pass http://server1/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;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
#
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~*/{
#proxy_pass http://server1;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
# }
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|php|html)$
{
proxy_pass http://server1;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args;
}
}
server {
listen 192.168.52.134:8080;
server_name www.web1.com;
root /var/www/html/newscms/web;
index index.php index.html;
charset UTF-8;
#charset koi8-r;
access_log /web1/log/access.log ;
error_log /web1/log/error.log error;
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
#以下是一些反向代理的配置可删除.
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;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
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 {
}
rewrite /backend /backend/index.php break;
#last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮(从第一个开始)重写检查;提前重启新一轮循环。
#break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用。
#redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头,使用相对路径,状态码: 302。
#permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301。
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
expires 30d;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
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;
}
rewrite /backend /backend/index.php break;
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。