一般网站上线后,有些文件几乎都不常更新了,比如css,js,图片等。
减少HTTP请求是优化网站的最佳方案之一,可以利用nginx缓存服务器的静态文件。
在Nginx中可以使用nginx proxy_cache将用户的请求缓存到本地一个目录,当下一个请求时可以直接调取缓存文件,就不用去请求服务器了。
具体操作
打开nginx.conf配置文件
在http层级加入以下代码
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
在server层级加入以下代码
#要缓存文件的后缀,可以在以下设置。
proxy_pass http://appserver ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
}
说明:
1、http设置。
设置临时目录
proxy_temp_path /tmp/temp_dir;
设置缓存目录为二级目录,共享内存区大小,非活动时间,最大容量,临时目录要跟缓存目录在同一个分区。
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
2、server设置
proxy_cache cache_one;
设置http状态码为200,302缓存时间,24h为24小时
proxy_cache_valid 200 302 24h;
设置失期时间,90d为90天
expires 90d;
不进行缓存直接转到后端服务器
proxy_pass http://127.0.0.1:9000;
多台Web同时提供服务,后台如何固定在一台机器上?
这种情况是web的前端和后台在一台服务器上,无法分离或不好分离,应用范围为已开发好的固定模板,如Discuz!等。
Nginx前端代理实现,在配置文件中:
upstream bbs_hk {
server 192.168.2.10:80;
}
upstream bbs {
ip_hash;
server 192.168.2.10:80;
server 192.168.2.20:80;
}
server {
listen 80;
server_name bbs.;
access_log /var/log/nginx/bbs.web.access.log;
error_log /var/log/nginx/bbs.web.error.log;
location ~ ^/admin.php(.?)+ {
proxy_pass http://bbs_hk;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://bbs;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
当访问后台 http://bbs./admin.php是自动转到192.168.2.10这台服务器上。
测试:可以停掉192.168.2.10这台服务器的web服务检查下。
nginx与apache日志格式的区别,感兴趣的朋友可以参考下。
nginx的日志格式:
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
日志格式说明:
$remote_addr 远程请求使用的IP地址
$remote_user 远端登录名
$time_local 时间,用普通日志时间格式(标准英语格式)
$request 请求的第一行
$status 状态。
$body_bytes_sent 请求返回的字节数,包括请求头的数据
$http_referer 请求头Referer的内容
$http_user_agent 请求头User-Agent的内容
$request_time 处理完请求所花时间,以秒为单位
apache的日志格式:
CustomLog log/access_log combined
日志格式说明:
%h 请求使用的IP地址
%l 远端登录名(由identd而来,如果支持的话),除非IdentityCheck设为"On",否则将得到一个"-"。
%u 远程用户名(根据验证信息而来;如果返回status(%s)为401,可能是假的)
%t 时间,用普通日志时间格式(标准英语格式)
%r 请求的第一行
%s 状态。对于内部重定向的请求,这个状态指的是原始请求的状态,---%>s则指的是最后请求的状态。
%b 以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示'-'而不是0。
\"%{Referer}i\" 发送到服务器的请求头Referer的内容。
\"%{User-Agent}i\" 发送到服务器的请求头User-Agent的内容。
%T 处理完请求所花时间,以秒为单位。
%I 接收的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。
%O 发送的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。
您可能感兴趣的文章:
nginx 日志分析的实例学习
Nginx日志模块分析详解
Nginx关闭日志的方法
Nginx日志分析 Nginx日志切割与Awstats配置
nginx日志配置、Nginx日志分割
有关nginx日志格式的设计分享
nginx日志统计访问时间的例子
nginx日志配置文件的格式说明
nginx日志报大量400错误的解决方法
nginx关闭favicon.ico日志记录的方法
nginx日志中记录cookie的实现方法
修改nginx访问日志的时间格式的方法
Nginx日志中过滤关键字的写法
nginx 日志分析实例