Apache中虚拟目录403 Forbidden的问题

Alias /test /var/www/test  正确
Alias /test/ /var/www/test/  正确
Alias /test /var/www/test/  错误

<Directory /var/www/test>
    Options Indexs FollowSymLinks
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

按道理说配到这一步应该可以浏览目录和文件才对,可却提示403 Forbidden错误。

后来翻到httpd.conf中,找到对/根目录的授权,注释掉Require all denied后重启服务,才可以正常访问了。

<Directory />
    AllowOverride none
    #Require all denied
</Directory>

不知为什么只影响到虚拟目录,而后面针对虚拟目录的独立授权,却没覆盖到前面的权限控制。

Ubuntu16.04 Python默认版本要切换

Ubuntu16.04 Python默认版本要切换到Python3,直接执行:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

如果要切换到Python2,执行:

update-alternatives --config python

ubuntu16.04 更改mysql默认数据目录

在 Ubuntu 默认MySQL数据目录是 /var/lib/mysql

现在要将数据目录移到 /server/mysql 做法如下:

#停止MYSQL服务 service mysql stop #复制现有数据目录 cp /var/lib/mysql /server/ #修改MYSQL配置文件将 datadir 对应的值改为 /server/mysql vi /etc/mysql/mysql.conf.d/mysqld.conf #将apparmor中MYSQL配置所有 /var/lib/mysql 改为 /server/mysql vi /etc/apparmor.d/usr.sbin.mysqld #重启appparmor服务 sudo service apparmor restart #重启mysql服务 sudo service mysql start

CSS透明 兼容大部分主流浏览器

{ filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity:0.5; opacity:0.5; }

Jquery简易提示对话框

  一个简易的Jquery提示功能,要求显示几秒后自动消失。网上找过很多第三方插件,结果不是太复杂就是不适用,于是参照网上别人的范例写了这个,仅做记录。

CSS代码
#msgtip { position: absolute; top: 52px; left: 50%; display: none; z-index: 9999; min-width: 200px; text-align: center; filter:alpha(opacity=90); -moz-opacity:0.9; -khtml-opacity: 0.9; opacity: 0.9; }
.altmsg { color: #f57c86; text-align: center; height: 30px; line-height: 28px; background:#ffff99; color: #ff0000; border:1px solid #f57c86; border-radius: 4px; padding-left: 10px; padding-right: 10px; white-space: nowrap; }

JS代码
function ShowMsg(msg, focus) {
    var $tip = $('#msgtip');
    if ($tip.length == 0) {
        $tip = $('<div id="msgtip"></div>');
        $('body').append($tip);
    }
    $tip.stop(true).prop('class', 'altmsg').html(msg).css('margin-left', -$tip.outerWidth(true) / 2).fadeIn(500).delay(3000).fadeOut(500);
    if (typeof(focus) != 'undefined') {
        focus.focus();
        $focus.val('');
    }
}

  由于msgtip定义了min-width值,当显示宽度小于这个min-width值,而内部元素又要求大于它时,就会出现提示框无法居中的问题,且提示文字会换行。只需再增加white-space: nowrap;属性,问题即可解决。

获取SELECT选中项的VALUE值原生JS代码

document.getElementById("id").options[document.getElementById("id").options.selectedIndex].value;
document.getElementById("id").options[document.getElementById("id").options.selectedIndex].text;

可以获取scrollTop值的兼容性代码

获取scrollTop兼容性代码如下:
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;

让PHP的basename支持中文

function get_basename($filename){
     return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}

房贷利率计算器(EXCEL版)

一个EXCEL还款计算工具,可以等额本金、等额本息切换,支持提前还贷和公积金组合贷。

这个工具的原作者不是我,出处哪里我找不到了。原作仅支持商贷,我只做了些适应自己使用的修改和调整。

添加了2015-05-11降息后的最新执行利率。工具不是很完善,但基本能满足自己需要。有用到的就自己下载。

附件1: Mortgage_calculator.xlsx (266.41 K, 下载次数:225)

LINUX同步工具rsync错误提示详解

Rsync configure:

配置一:
ignore errors
说明:这个选项最好加上,否则再很多crontab的时候往往发生错误你也未可知,因为你不可能天天去看每时每刻去看log,不加上这个出现错误的几率相对会很高,因为任何大点的项目和系统,磁盘IO都是一个瓶颈

Rsync error:
错误一:
@ERROR: auth failed on module xxxxx
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为密码设置错了,无法登入成功,检查一下rsync.pwd,看客服是否匹配。还有服务器端没启动rsync 服务也会出现这种情况。

错误二:
password file must not be other-accessible
continuing without password file
Password:
说明:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

错误三:
@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为你在 rsync.conf 中设置的 path 路径不存在,要新建目录才能开启同步

错误四:
rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
说明:防火墙问题导致,这个最好先彻底关闭防火墙,排错的基本法就是这样,无论是S还是C,还有ignore errors选项问题也会导致

错误五:
@ERROR: access denied to www from unknown (192.168.1.123)
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(359)

说明:此问题很明显,是配置选项host allow的问题,初学者喜欢一个允许段做成一个配置,然后模块又是同一个,致使导致

错误六:
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(244) [generator=2.6.9]
rsync error: received SIGUSR1 (code 19) at main.c(1182) [receiver=2.6.9]

说明:导致此问题多半是服务端服务没有被正常启动,到服务器上去查查服务是否有启动,然后查看下 /var/run/rsync.pid 文件是否存在,最干脆的方法是杀死已经启动了服务,然后再次启动服务或者让脚本加入系统启动服务级别然后shutdown -r now服务器

错误七:
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(604) [sender=2.6.9]

说明:原数据目录里没有数据存在

附一个RSYNC定时运行的脚本

#!/bin/bash
if [ `netstat -anp | grep rsync | wc -l` -gt 0 ] ; then
    echo "Prev rsync still running. Skip now. `date`" >> /server/logs/rsync.log
    exit 1
else
    RDIR='sem/'
    LDIR='/server/www/html/sem/'
    RADD='192.168.1.2'
    BAKUSER='rsync'
    PROG='/usr/bin/rsync'
    OPTIONS='-aruHvz --delete'
    export RSYNC_PASSWORD='123456'
    $PROG $OPTIONS $BAKUSER@$RADD::$RDIR $LDIR
fi

进程中包含rsync则退出,使用export RSYNC_PASSWORD语法跳过密码验证,可以让部署的时候少一个文件。

注意一点:如果服务器同时运行着rsync服务端的话,此脚本就不适用了。那样的话,就要把判断部分的代码去掉。