使用cloudflare CDN构建网站

cloudflare提供了免费的CDN(内容分发网络),周末实际试验了一次。

首先要注册,登陆后需要将现有的网站对应的dns解析都重新在cloudflare实现,包括A记录、MX记录等,设置完成后要将对应的nameserver解析到cloudflare的nameserver。登上一段时间后就可以自动代理内容了。

使用cloudflare存在的问题,主要是访客IP地址的解析问题,其自身提供了一个访客分析系统,但通常我们都还希望使用自己的访客分析系统,以及google analytics或piwik等,甚至直接解析apache log。google analytics有插件,可以在cloudflare上直接设置,piwiki上有一段专门的代码可以设置cloudflare访客。但apache log需要安装一个单独的mod来处理,暂时还没有试验。

解析完成后,ping对应的域名地址,就是cloudflare的ip了,同时提供了免费的ssl证书(这点不错)。

解决网站index无法访问的问题

最近web服务器上会遇到奇怪的不能访问问题,包括/index、/index/index都不能访问,但使用/访问是正常的,访问别的页面也是正常的。

在google中搜索,首先使用关键词进行搜索:

zend framework index not found

利用这里返回的结果,并不能解决此问题。

于是查看服务器的log,发现有此错误:

[Sun Oct 19 05:36:05.884390 2014] [negotiation:error] [pid 4496] [client 218.206.170.106:2100] AH00687: Negotiation: discovered file(s) matching request: /var/www/heihedata.org/htdocs/index (None could be negotiated).

利用这个信息,再度google,这次终于有结果了,找到了一个相关性的答案:
http://serverfault.com/questions/372733/apache-file-negotiation-failed

在其第二个回答中提到,由于debian服务器的升级导致了此问题,而我们的服务器是Ubuntu,基于Debian,故也存在同样的问题。
具体的解决方法很简单,修改/etc/mime.types文件,搜索php,将此行对应的注释去掉(即第一个#)即可,然后重启apache服务。

application/x-httpd-php phtml pht php

使用fail2ban防范非正常的apache高负载

fail2ban可以防范非正常的apache高负载,即各种攻击导致的高负载。今天在数据中心服务器上又出现了高负载情况(之前是mediawiki导致的攻击负载),经检查,是某wordpress网站被攻击导致的高负载。之前此服务器上也有使用fail2ban来防范ssh暴力破解,提高系统安全性。经搜索后,发现其实也可以使用fail2ban来防范这种攻击导致的apache高负载。

其实,很简单,修改/etc/fail2ban/jail.conf文件,将涉及到apache的几个配置都激活(设置为true即可)。

参考:How to protect Apache with Fail2ban

永久保存apache的log文件

默认apache的配置文件中,customlog是这样配置的:

CustomLog /var/log/apache2/westdc.westgis.ac.cn-access.log combined

其使用效果是默认保存最近一年的log,但之前的log就丢失了,对于数据中心而言,网站的log文件可以分析得出很多有意思的结论,如数据的共享使用评价因子就可以从log中分析得出,因此有必要保存所有时期的log文件。

可以采用cronolog来分文件保存,首先要安装:

sudo apt-get install cronolog

然后再apache的site文件中修改默认的配置:

CustomLog /var/log/apache2/westdc.westgis.ac.cn-access.log combined    
CustomLog "|/usr/bin/cronolog /var/log/apache2/westdc.westgis.ac.cn-access-%Y%m%d.log" combined

注意,这里是采用了两个CustomLog方式,意思就是可以同时保存两份log,因为之前默认的log文件在进行awstats分析时要用到,就不想再额外动了。

但之后估计会遇到log文件过大(过多)的问题,因此还需要在crontab中进行gzip压缩并传递到数据存储服务器上。

另类反向代理DNN4

之前在反向代理DNN4时一直有问题(DNN4通过HEADER进行重定向,导致无法使用基于内部域名的反向代理)
在这儿找到一个办法:
http://www.r2integrated.com/dnn/Forum/tabid/170/aff/1/aft/9187/afv/topic/afpg/1/Default.aspx
在代理服务器上:
/etc/hosts中添加一个解析:192.168.50.238 heihe.westgis.ac.cn
在apahce中配置:
ServerName heihe.westgis.ac.cn
ProxyPass / http://heihe.westgis.ac.cn/
ProxyPassReverse / http://heihe.westgis.ac.cn/

在虚拟机上配置:
\windows\system32\drivers\etc\hosts中添加一行:192.168.50.238 heihe.westgis.ac.cn

重启对应服务,搞定!

升级ubuntu server

ubuntu jaunty已经发布了,服务器现在的版本还是hardy,正好遇到了奇怪的问题,所以就想升级了。

sudo aptitude install update-manager-core

然后修改/etc/update-manager/release-upgrades文件内容,把

Prompt=lts

修改为:

Prompt=normal

然后开始升级:

sudo do-release-upgrade

注意:
1 在升级过程中有个提示,是否要继续操作,其中提示为[yN],但在中文locale下需要输入”是“,估计这是个翻译的BUG?
2 apache在升级后会产生问题,导致所有的网站都定向到默认网站了,需要修改/etc/apache2/ports.conf文件,把

NameVirtualHost *:80

给注释掉,然后在修改默认网站/etc/apache2/sites-enable/000-default,在第一行添加:

NameVirtualHost *

检测mysql进程并重启服务

服务器上的mysql老是拖累apache,导致WWW服务不正常,前面修改过对应的mysql参数,但还是不行,因此,就决定设定让系统CRON下面这个脚本,注意脚本来自傅翮鹤 ,我仅仅修改了ubuntu下对应的参数而已。

#!/bin/bash
#check apache,mysql thread and auto reboot service
#Powered by 傅翮鹤 [www.fuhehe.com]
#Date 2007-06-15

#config
MaxApacheThread=100
MaxMysqlThread=50
HttpService=`ls /etc/init.d|grep apache2`
MysqlService=`ls /etc/init.d|grep mysql`

ApacheThread=`ps -A|grep apache2|wc -l`
MysqlThread=`ps -A|grep mysql|wc -l`

NeedReboot=0

if [ $ApacheThread -gt $MaxApacheThread ]
then
NeedReboot=1
fi
if [ $ApacheThread -eq 0 ]
then
NeedReboot=2
fi

if [ $MysqlThread -gt $MaxMysqlThread ]
then
NeedReboot=3
fi
if [ $MysqlThread -eq 0 ]
then
NeedReboot=4
fi

if [ $NeedReboot -eq 1 ]
then
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "Apache is busy,reboot"
/etc/init.d/$HttpService stop
/etc/init.d/$HttpService start
elif [ $NeedReboot -eq 2 ]
then
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "Apache is down,reboot"
/etc/init.d/$HttpService start
elif [ $NeedReboot -eq 3 ]
then
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "Mysql is busy,reboot"
/etc/init.d/$MysqlService stop
/etc/init.d/$MysqlService start
elif [ $NeedReboot -eq 4 ]
then
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "Mysql is down,reboot"
/etc/init.d/$MysqlService start
else
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "System is normal"
fi

apache2下的ssl支持

在UBUNTU FEISTY下如何添加APACHE2的SSL支持?

假设你的APACHE2已经可以运行了,现在只是需要添加SSL支持,首先安装:

sudo aptitude install openssl ssl-cert libapache-mod-ssl

注意,默认make-ssl-cert产生的ca只有一个月的有效期,因此我们需要延长这个时间,可以通过修改make-ssl-cert命令来实现:

sudo nano /usr/sbin/make-ssl-cert

假设需要把期限修改为10年:
就把”-keyout $output”修改为”-keyout $outpu -days 3650″。
然后来创建我们自己的签名,当然你也可以申请商业认证的签名。

sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

注意,在填hostname的时候,要选择你所使用的域名。
接着,启用ssl模块

sudo a2enmod ssl

添加443监听端口

echo “Listen 443” | sudo tee -a /etc/apache2/ports.conf

site文件的第一行修改为:

在site文件的最后一行前面添加:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM

重新启动服务:

sudo /etc/init.d/apache2 restart

若想强制所有的80端口访问都转送到443端口,可以这样设置:

sudo a2enmod rewrite

然后修改site文件,添加如下内容:

RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]

reference:
https://help.ubuntu.com/community/forum/server/apache2/SSL
http://www.linode.com/wiki/index.php/Apache2_SSL_in_Ubuntu

安装wordpress 1.0 mu到UBUNTU SERVER

前面我提到如何安装wordpress mu 1.0,这次在ubuntu edgy server版上安装就轻车熟路了。
首先要确保ubuntu server上安装了apache2, php, mysql。
然后要激活rewrite mod。

sudo a2enmod

创建westgis.ac.cn的vhost文件:


ServerAdmin wlx@mygis.org
ServerName westgis.ac.cn
ServerAlias westgis.ac.cn *.westgis.ac.cn
DocumentRoot /var/www/westgis.ac.cn


Options FollowSymLinks
AllowOverride None


Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo Options
Order allow,deny
allow from all

ErrorLog /var/log/apache2/westgis.ac.cn-error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/westgis.ac.cn-access.log combined
ServerSignature On


激活这个vhost就可以了,注意AllowOverride部分和默认是不同的。