部署Nginx反向代理及缓存(2)
时间:2015-04-22 22:58 来源:linux.it.net.cn 作者:IT
keepalive_timeout 60;
tcp_nodelay on; #打开TCP_NODELAY 在包含了keepalived 才有效,上面的四项有效的提高了文件传输性能,用sendfile() 函数来转移大量的数据,协议会需要预先解决数据包包头部分,正常情况下包头很小,而且套接字上设置了TCP_NODELAY 。有包头的包将被立即传输,在一些情况下,因为包成功的被对方收到后需要请求对方确认,这样,大量的数据传输就会被延迟而且产生大量不必要的网络流量交换,但是在socket上是指了TCP_CORK ,就像个管道塞住塞子把带有包头的包填满数据,所有的数据根据大小进行填充,自动通过数据包发送出去,但是在数据传送完成是,需要把塞子打开
#开启gzip 的设置
#gzip on;
gzip on;
#设置允许压缩的页面的最小字节数,页面字节数从Header 头中的Content-Length中获取建议设置成大于1k的字节数,小于1k可能越压越大
gzip_min_length 1k;
#设置以16k为单位4倍申请内存做压缩结果缓存,默认值是申请跟原始数据相同大小的内存空间存储gzip压缩结果
gzip_buffers 4 16k;
#默认1.1 ,大部分浏览器支持gzip 压缩
gzip_http_version 1.1;
#设置压缩级别 压缩比率1-9,压缩比率越大,越消耗系统资源
gzip_comp_level 2;
#设置压缩列席
gzip_types text/plain application/x-javascript text/css application/xml;
#设置前端的缓存服务,如squid缓存经过nginx压缩的数据,该选项在做反向代理是设定压缩,后面参数为验证的header头信息,在做相应的压缩处理,
gzip_vary on;
#proxy_cache
# 该处设置的是缓存的目录及其设置的大小
proxy_cache_path /usr/local/nginx/proxy_temp levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#设置负载池
upstream backend_server {
server 192.168.2.194:80 ;
# 注weight设置的权重 max_fails 设置的是健康监测失败次数,timeout 设置超时时间 当然此处主要是设置nginx的反向代理及其缓存,对于nginx 的负载均衡,在以后的文章中再详细介绍
# server 192.168.2.107:80 weight=1 max_fails=2 fail_timeout=30s;
}
server {
#注:监听的端口号
listen 80;
#server_name localhost;
#设置监听的主机名
server_name freehat.blog.51cto.com;
if ($host !~ 'freehat.blog.51cto.com') {
return 403;
}
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
#}
#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;
}
#设置扩展名以gif .jpg .css 等结尾的静态文件缓存
location ~.*\.(gif|jpg|jpeg|png|bmp|sqf|js|css)$
{
#设置防盗链
valid_referers none blocked freehat.blog.51cto.com;
if ($invalid_referer) {
return 404
#如果后端的服务器返回502 504 执行超时等错误,自动将请求转发到upstream 负责均衡池中的另外一台服务器,实现故障转移
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#进行缓存,使用web缓存去cache_one
proxy_cache cache_one;
#以域名,URI,参数组合成web缓存的Key值,Nginx根据Key值哈希,储存缓存内容到二级缓存目录内
#对不同的HTTP 状态码设置不同的缓存时间
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#设定proxy_set_header Accept-Encoding 或者是后台服务器关闭gzip,该台机器才不会缓存被压缩的文件,造成乱码
proxy_set_header Accept-Encoding "none";
# proxy_set_header Accept-Encoding ""; 同上面一项相同
#设置proxy_cache 支持后台设定的expires , 即使支持HTTP头信息定义的缓存规则
proxy_ignore_headers "Cache-Control" "Expires";
if ( !-e $request_filename )
{
proxy_pass http://backend_server;
}注: 该项是如果client 请求的文件在cache 中保存,nginx 直接从cache中把对应的文件返还给client ,不会在去后端的Server 去取对应的文件
expires 1h; 设置过去的时间
} #set don't php jsp cgi in cache 设置php jsp cgi 不保存在cache中
location ~.*\.(php|jsp|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server;
}
#set js and css cache expire time 设置js|css 在浏览器中过期的时间
location ~ .*\.(js|css)
{
expires 1h;
}
#clean all cache 设置清除所有的cache
location ~/purge(/.*)
{
allow 127.0.0.1;
allow 192.168.2.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
}
}
第五,启动机及其关闭nginx的命令
1 启动之前检查nginx的主配置文件是否有错误
# /usr/local/nginx/sbin/nginx -t
2 启动nginx的方式
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
3 关闭nginx 的方式
# /usr/local/nginx/sbin/nginx -s stop
4 平滑启动nginx
#kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
(责任编辑:IT)
keepalive_timeout 60; tcp_nodelay on; #打开TCP_NODELAY 在包含了keepalived 才有效,上面的四项有效的提高了文件传输性能,用sendfile() 函数来转移大量的数据,协议会需要预先解决数据包包头部分,正常情况下包头很小,而且套接字上设置了TCP_NODELAY 。有包头的包将被立即传输,在一些情况下,因为包成功的被对方收到后需要请求对方确认,这样,大量的数据传输就会被延迟而且产生大量不必要的网络流量交换,但是在socket上是指了TCP_CORK ,就像个管道塞住塞子把带有包头的包填满数据,所有的数据根据大小进行填充,自动通过数据包发送出去,但是在数据传送完成是,需要把塞子打开 #开启gzip 的设置 #gzip on; gzip on; #设置允许压缩的页面的最小字节数,页面字节数从Header 头中的Content-Length中获取建议设置成大于1k的字节数,小于1k可能越压越大 gzip_min_length 1k; #设置以16k为单位4倍申请内存做压缩结果缓存,默认值是申请跟原始数据相同大小的内存空间存储gzip压缩结果 gzip_buffers 4 16k; #默认1.1 ,大部分浏览器支持gzip 压缩 gzip_http_version 1.1; #设置压缩级别 压缩比率1-9,压缩比率越大,越消耗系统资源 gzip_comp_level 2; #设置压缩列席 gzip_types text/plain application/x-javascript text/css application/xml; #设置前端的缓存服务,如squid缓存经过nginx压缩的数据,该选项在做反向代理是设定压缩,后面参数为验证的header头信息,在做相应的压缩处理, gzip_vary on; #proxy_cache # 该处设置的是缓存的目录及其设置的大小 proxy_cache_path /usr/local/nginx/proxy_temp levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g; #设置负载池 upstream backend_server { server 192.168.2.194:80 ; # 注weight设置的权重 max_fails 设置的是健康监测失败次数,timeout 设置超时时间 当然此处主要是设置nginx的反向代理及其缓存,对于nginx 的负载均衡,在以后的文章中再详细介绍 # server 192.168.2.107:80 weight=1 max_fails=2 fail_timeout=30s; } server { #注:监听的端口号 listen 80; #server_name localhost; #设置监听的主机名 server_name freehat.blog.51cto.com; if ($host !~ 'freehat.blog.51cto.com') { return 403; } #charset koi8-r; #access_log logs/host.access.log main; #location / { # root html; # index index.html index.htm; #} #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; } #设置扩展名以gif .jpg .css 等结尾的静态文件缓存 location ~.*\.(gif|jpg|jpeg|png|bmp|sqf|js|css)$ { #设置防盗链 valid_referers none blocked freehat.blog.51cto.com; if ($invalid_referer) { return 404 #如果后端的服务器返回502 504 执行超时等错误,自动将请求转发到upstream 负责均衡池中的另外一台服务器,实现故障转移 proxy_next_upstream http_502 http_504 error timeout invalid_header; #进行缓存,使用web缓存去cache_one proxy_cache cache_one; #以域名,URI,参数组合成web缓存的Key值,Nginx根据Key值哈希,储存缓存内容到二级缓存目录内 #对不同的HTTP 状态码设置不同的缓存时间 proxy_cache_valid 200 304 12h; proxy_cache_valid any 1m; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #设定proxy_set_header Accept-Encoding 或者是后台服务器关闭gzip,该台机器才不会缓存被压缩的文件,造成乱码 proxy_set_header Accept-Encoding "none"; # proxy_set_header Accept-Encoding ""; 同上面一项相同 #设置proxy_cache 支持后台设定的expires , 即使支持HTTP头信息定义的缓存规则 proxy_ignore_headers "Cache-Control" "Expires"; if ( !-e $request_filename ) { proxy_pass http://backend_server; }注: 该项是如果client 请求的文件在cache 中保存,nginx 直接从cache中把对应的文件返还给client ,不会在去后端的Server 去取对应的文件 expires 1h; 设置过去的时间 } #set don't php jsp cgi in cache 设置php jsp cgi 不保存在cache中 location ~.*\.(php|jsp|cgi)?$ { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://backend_server; } #set js and css cache expire time 设置js|css 在浏览器中过期的时间 location ~ .*\.(js|css) { expires 1h; } #clean all cache 设置清除所有的cache location ~/purge(/.*) { allow 127.0.0.1; allow 192.168.2.0/24; deny all; proxy_cache_purge cache_one $host$1$is_args$args; } } } 第五,启动机及其关闭nginx的命令 1 启动之前检查nginx的主配置文件是否有错误 # /usr/local/nginx/sbin/nginx -t 2 启动nginx的方式 # /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 3 关闭nginx 的方式 # /usr/local/nginx/sbin/nginx -s stop 4 平滑启动nginx #kill -HUP `cat /usr/local/nginx/logs/nginx.pid` (责任编辑:IT) |