当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪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 .........

[1]Cache-control使用Cache-control:private学习笔记
    来源: 互联网  发布时间: 2013-12-24

其作用根据不同的重新浏览方式,分为以下几种情况:
(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');


    
[2]inotify-tools+rsync实时同步文件的配置方法
    来源: 互联网  发布时间: 2013-12-24

服务器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需要同步的目录/index.html #记得在最后面加/不然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
do
#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
fi

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
fi

esac
done &
done

chmod +x /root/inotify_monitor.sh

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

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

以下是备从务器B的配置:
安装RSYNC
yum 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.pas
rsync:xxxxxx

chmod 0600 /etc/rsync.pas

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

代码如下:

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

保存退出

运行:

代码如下:

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

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


    
[3]ftp突然直接连接不上了的解决方法
    来源: 互联网  发布时间: 2013-12-24
思路:

1、selinux 问题是不是开启了
2、iptbales 中是否加入ftp指定端口了
3、服务是否开启FTP

查找命令:

1、cat :/etc/selinux/config
查看 SELINUX = disable 是否处于关闭状态

2、cat /etc/sysconfig/iptables
查看防火墙是否开通ftp指定端口

3、
1)、使用命令:getsebool ftpd_disable_trans 可以查看当前的状态如果不是on
2)、输入命令:setsebool ftpd_disable_trans 1
当然也可以加入-P参数以便不需要每次开机都输入这个命令
setsebool -P ftpd_disable_trans 1

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

    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
数据库其它 iis7站长之家
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3