Cache-control使用Cache-control:privat-inotify-tools+rsync实时同步文件-ftp突然直接连接不上了的解决方法_OpenStack, 云计算等杂项讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  OpenStack, 云计算等杂项讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4282 | 回复: 0   主题: Cache-control使用Cache-control:privat-inotify-tools+rsync实时同步文件-ftp突然直接连接不上了的解决方法        上一篇   下一篇 
    本主题由 Administrator 于 2014-9-9 23:19:48 移动
zwj0287
注册用户
等级:新兵
经验:66
发帖:4
精华:0
注册:2012-2-26
状态:离线
发送短消息息给zwj0287 加好友    发送短消息息给zwj0287 发消息
发表于: IP:您无权察看 2014-9-9 15:11:43 | [全部帖] [楼主帖] 楼主

    ▪Cache-control使用Cache-control:private学习笔记 

    其作用根据不同的重新浏览方式,分为以下几种情况:(1)、打开新窗口值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值......

    ▪inotify-tools+rsync实时同步文件的配置方法 

    服务器A:论坛的主服务器,运行DZ X2论坛程序;服务器B:论坛从服务器,需要把X2的图片附件和MySQL数据实时从A主服务器实时同步到B服务器.MySQL同步设置会在下一编中说到.以下是用于实时同步......

    ▪ftp突然直接连接不上了的解决方法 

    思路: 1、selinux 问题是不是开启了 2、iptbales 中是否加入ftp指定端口了 3、服务是否开启FTP 查找命令: 1、cat :/etc/selinux/config 查看 SELINUX = disable 是否处于关闭状态 2、cat /etc/sysconfig/iptables ......

    土豪金金士顿microSD高速卡(64G)报价399元

    简单大方超值实惠联想c260全新现货促

    实惠卓越一体机昆明惠普M1005报1500元

    其作用根据不同的重新浏览方式,分为以下几种情况:(1)、打开新窗口值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器) 

    (2)、在地址栏回车值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。值为no-cache,那么每次都会访问。值为max-age,则在过期之前不会重复访问。 

    (3)、按后退按扭值为private、must-revalidate、max-age,则不会重访问,值为no-cache,则每次都重复访问 

    (4)、按刷新按扭无论为何值,都会重复访问Cache-control值为“no-cache”时,访问此页面不会在Internet临时文章夹留下页面备份。另外,通过指定“Expires”值也会影响到缓存。例如,指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问: Expires: Fri, 31 Dec 1999 16:00:00 GMT比如:禁止页面在IE中缓存http响应消息头部设置: 

    代码如下:

CacheControl = no-cache
Pragma=no-cache
Expires = -1


 Expires是个好东东,如果服务器上的网页经常变化,就把它设置为-1,表示立即过期。如果一个网页每天凌晨1点更新,可以把Expires设置为第二天的凌晨1点。当HTTP1.1服务器指定 CacheControl = no-cache时,浏览器就不会缓存该网页。 

    旧式 HTTP 1.0 服务器不能使用 Cache-Control 标题。 

    所以为了向后兼容 HTTP 1.0 服务器,IE使用Pragma:no-cache 标题对 HTTP 提供特殊支持。如果客户端通过安全连接 (https://)/与服务器通讯,且服务器在响应中返回 Pragma:no-cache 标题,则 Internet Explorer不会缓存此响应。注意:Pragma:no-cache 仅当在安全连接中使用时才防止缓存,如果在非安全页中使用,处理方式与 Expires:-1相同,该页将被缓存,但被标记为立即过期。 

    header常用指令header分为三部分:第一部分为HTTP协议的版本(HTTP-Version);第二部分为状态代码(Status);第三部分为原因短语(Reason-Phrase)。 

    代码如下:

<?php
// fix 404 pages: 用这个header指令来解决URL重写产生的404 header
header('HTTP/1.1 200 OK');
// set 404 header: 页面没找到
header('HTTP/1.1 404 Not Found');
// 页面被永久删除,可以告诉搜索引擎更新它们的urls
// set Moved Permanently header (good for redrictions)
// use with location header
header('HTTP/1.1 301 Moved Permanently');
// 访问受限
header('HTTP/1.1 403 Forbidden');
// 服务器错误
header('HTTP/1.1 500 Internal Server Error');
// 重定向到一个新的位置
// redirect to a new location:
header('Location: http://www.jbxue.com);


 延迟一段时间后重定向

// redrict with delay:
header('Refresh: 10; url=http://www.sina.com.cn');
print 'You will be redirected in 10 seconds';
// 覆盖 X-Powered-By value
// override X-Powered-By: PHP:
header('X-Powered-By: PHP/4.4.0');
header('X-Powered-By: Brain/0.6b');
// 内容语言 (en = English)
// content language (en = English)
header('Content-language: en');
//最后修改时间 (在缓存的时候可以用到)
// last modified (good for caching)
$time = time() - 60; // or filemtime($fn), etc
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
// 告诉浏览器要获取的内容还没有更新
// header for telling the browser that the content
// did not get changed
header('HTTP/1.1 304 Not Modified');
// 设置内容的长度 (缓存的时候可以用到):
// set content length (good for caching):
header('Content-Length: 1234');
// 用来下载文件:
// Headers for an download:
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
// 禁止缓存当前文档:
// load the file to send:readfile('example.zip');
// Disable caching of the current document:
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
// 设置内容类型:
// Date in the pastheader('Pragma: no-cache');
// set content type:
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain');
// plain text file
header('Content-Type: image/jpeg');
// JPG picture
header('Content-Type: application/zip');
// ZIP file
header('Content-Type: application/pdf');
// PDF file
header('Content-Type: audio/mpeg');
// Audio MPEG (MP3,...) file
header('Content-Type: application/x-shockwave-flash');
// 显示登录对话框,可以用来进行HTTP认证
// Flash animation// show sign in box
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
print 'Text that will be displayed if the user hits cancel or ';
print 'enters wrong login data';
?>


 现在表单的填写,我们可以用AJAX对用户随时进行验证,进行友好的提示,但是在用户没有留意AJAX友好提示,提交了错误的表单,跳回原页,而填写的信息却全部丢失了。要支持页面回跳,有以下的办法:1.使用session_cache_limiter方法: session_cache_limiter('private,must-revalidate');但是要值得注意的是 session_cache_limiter()方法要写在session_start()方法之前才有用;2.用header来设置控制缓存的方法: header('Cache-control:private,must-revalidate'); 

    服务器A:论坛的主服务器,运行DZ X2论坛程序;服务器B:论坛从服务器,需要把X2的图片附件和MySQL数据实时从A主服务器实时同步到B服务器.MySQL同步设置会在下一编中说到.以下是用于实时同步两台服务器的图片。 

    因为一般的RSYNC需要CRON来定期运行SH脚本来实现同步,这样会带来一些问题.比如用户从主服务器上传上一个图片,需要最少一分钟才能从从服务器显示出来.自从Linux 2.6内核后,支持了inotify机制,当某些文件或文件夹有改变时,发出相应的事件,这样,第三方程序只要订阅这些事件,就可以处理相应的操作了.这时,只要有文件被修改,就执行一次RSNYN,把修改的文件主动地上传到另一台服务器上就可以了。 

    我使用的是google的inotify-tools,比较简单.国内有功能很强大的类似的程序,但是好复杂.另外需要注意的是:如果使用inotify-tools来实现实时同步,我们的主服务器--源文件服务器(也就是服务器A)实现是RSYNC的从服务器,我们的从服务器--目标同步的服务器(服务器B)才是RSYNC的主服务器.不要搞混了哦. 

    首先从主服务器A开始,需要确定你的系统是否支持inotify: 

    代码如下:

ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_queued_events
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_user_instances
-rw-r--r-- 1 root root 0 Jan 4 17:56 max_user_watches


 能输出这样的结果表示支持。 

    下载并安装inotify-tools:

    代码如下:

wget --no-check-certificate http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr
make
make install


 完成inotify-tools的安装。 

    接下来需要写两个SH脚本,inotify_init.sh和inotify_monitor.sh:inotify_init.sh 用于第一次初始化,也就是运行一次完整的RSYNC同步. 

vi /root/inotify_init.sh


 代码如下:

#!/bin/sh


 SRC=/主服务器A需要同步的目录/ #记得在最后面加/不然RYNC会自动增加一层目录

DES=bbsatt


 IP=从服务器B的IP

USER=rsync
#DST=/etc/rsyncd 远程rsync模块下的目录
INWT=/usr/bin/inotifywait
RSYNC=/usr/bin/rsync
$RSYNC -zahqt --password-file=/root/rsync.pwd $SRC $USER@$IP::$DES


 保存退出. 

    设置可执行权限:chmod +x /root/inotify_init.sh 

    接下是inotify_monitor.sh,用于订阅文件修改事件.注意,因为特别原因,我在这里做的是增量备份+实时同步,也就是说,当主服务器A上的图片被删除是,从服务器B是不会删除图片的. 

vi /root/inotify_monitor.sh


 代码如下:

#!/bin/bash
##---------------------


 sync[0]='/主服务器需要同步的目录/,从服务器B的IP,bbsatt,rsync' # localdir,host,rsync_module,auth_user

INWT=/usr/bin/inotifywait
RSYNC=/usr/bin/rsync
PASS=/root/rsync.pwd
##---------------------
for item in ${sync[@]}; do
dir=`echo $item | awk -F"," '{print $1}'`
host=`echo $item | awk -F"," '{print $2}'`
module=`echo $item | awk -F"," '{print $3}'`
user=`echo $item | awk -F"," '{print $4}'`
$INWT -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' \
--event CLOSE_WRITE,create,move $dir | while read date time file event
#echo $event'-'$file
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --exclude='*' --password-file=$PASS \
--include=$file $dir $user@$host::$module > /dev/null 2>1&"
echo $cmd
$cmd
MOVED_FROM|MOVED_FROM,ISDIR|DELETE,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --password-file=$PASS --exclude=$file \
$dir $user@$host::$module > /dev/null 2>1&"
echo $cmd
$cmd
esac
done &
done
chmod +x /root/inotify_monitor.sh


 设置RSYNC自动登录验证密码vi /root/rsync.pwdxxxxxx保存,退出 

    设置只有ROOT才可以查看的权限.chmod 0600 /root/rsync.pwd 

    以下是备从务器B的配置:安装RSYNCyum rsync -y 

#----配置RSNYD服务 

    vi /etc/rsyncd.conf内容如下,需要把Apache修改成你运行网站的用户名,我的是因为原来使用apache,虽然现在用Nginx,也一直没改用户名: 

    代码如下:

uid = apache
gid = apache
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[bbsatt]


 path = /从服务器B本地用于存放备份的目录

ignore errors
read only = no
list = false


 hosts allow = 主服务器A的IP

auth users = rsync
secrets file = /etc/rsync.pas
vi /etc/rsync.pasrsync:xxxxxx
chmod 0600 /etc/rsync.pas


 启动RSYNCDrsync --daemon添加开机自动启动服务:vi /etc/rc.localrsync --daemon回到主服务器A,vi /etc/rc.local添加以下内容,实时开机自动同步:

    代码如下:

/root/inotify_init.sh
/root/inotify_monitor.sh


 保存退出 

    代码如下:

/root/inotify_init.sh
/root/inotify_monitor.sh


 这样就能实现实时同步图片文件了,在主服务器A的同步目录下新建一个文件测试下吧。 

    1)、使用命令:getsebool ftpd_disable_trans 可以查看当前的状态如果不是on 

    2)、输入命令:setsebool ftpd_disable_trans 1 

    当然也可以加入-P参数以便不需要每次开机都输入这个命令 

setsebool -P ftpd_disable_trans 1


 最后发现 ftp的状态是on ,开启,ftp就可以连接了。 

©


 2012-2013,169IT.COM,站长邮箱:www_169it_com#163.com(请将#改为@) 

该贴由system转至本版2014-9-9 23:19:48




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论