今天申请了阿里云的OCS内测

OCS是阿里云在线提供的开放缓存服务。基于KV(存储键/值)的高性能分布式内存缓存服务,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据来减少读取数据库的次数,从而提高数据库驱动网站的速度。其访问的客户端可以用多种语言编写,并通过Memcached协议与服务端无缝通信。

OCS特点
性能优越:采用内存 SSD的部署方案,通过内存为用户提供数据访问,响应时间大为缩短。
服务可靠:当某台服务器宕机时,集群将在10S内恢复服务,客户端自动重连即可恢复服务。
数据持久:用户所有KV键值都会分散到集群中保存2份数据,单一服务器损毁不会丢失数据。
兼容性 :兼容Memcached协议,符合该协议的客户端都可使用OCS。

OCS适用对象
适合的用户:ECS RDS 或 ECS内置数据库的用户

OCS适合的应用:
适合于动态Web网站的热点数据缓存
对数据访问速度要求较高
数据更新频率低、读取频率高
单个数据较小,建议在KB级别,最大 1MB
数据可以Key/Value的形式存储

申请地址:http://bbs.aliyun.com/read.php?spm=0.0.0.0.TiLcd7&tid=148748

关于PHP环境部署的可以参考下这里:http://dev.aliyun.com/read.php?spm=0.0.0.0.7nmlLf&tid=119

先研究下,,看看把wordpress扔上去

libmemcached-1.0.16

优化WordPress速度:配合WP Super Cache插件,使用tmpfs文件系统提高网站访问速度

系统环境:debian7

1、借助WP Super Cache插件

WP Super Cache

WP Super Cache 通过以下三种方式缓存(按照缓存效率排序):

Mod_Rewrite:最快的方式是通过 Apache mod_rewrite 模块(或者其他 Web 服务器中类似的模块)向用户提供静态 HTML 文件,这样就完全绕过了 PHP 解析器,速度飞快,可以轻松应对非常大的访问,并且服务器运作非常轻盈。不过这个方式需要 Apache 已经安装了 mod_rewrite 模块(或者其他 Web 服务器中类似的模块)以便博客能够支持固定链接,并且还需要修改你的 .htaccess 文件,匿名访问的用户通过这种方式访问。
PHP:超级缓存静态文件除了 HTML 方式之外,现在还可以通过 PHP 方式来提高服务,速度几乎接近 mod_rewrite 方法,但是 PHP 方法更好配置,并且无需修改 .htaccess 文件。PHP 方法还是需要设置固定链接,还可以让你保持页面部分动态,但是面对大流量访问时候,就没有 mod_rewrite 方法出色了。
传统缓存:这个主要面对已知用户,那些已登录的,留过言的,这个方法更灵活,但也是最慢的,因为每次查看页面,信息是不同的,所以最好对这些用户不要缓存整个页面。

WP Super Cache 基本使用:

WP Super Cache 安装非常简单,只需要上传到插件目录,然后激活之后就可以到 后台 > 设置 > WP Super Cache 进行详细配置。

2、使用tmpfs文件系统提高网站访问速度

tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,tmpfs主要存储暂存的文件。它有如下2个优势
  1)动态文件系统的大小。
  2)tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在内存 RAM 中,读写几乎可以是瞬间的。
同时它也有一个缺点 tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。tmpfs不具备持久性,重启后数据不保留,请务必注意!!!

root@clin003.com:~# mkdir /dev/shm/tmp
root@clin003.com:~# chmod 1777 /dev/shm/tmp //注意权限
root@clin003.com:~# mount –bind /dev/shm/tmp /www/clin003.com/wp-content/cache
root@clin003.com:~# ls -ld /tmp
drwxrwxrwt 2 root root 40 May 29 21:46 /www/clin003.com/wp-content/cache
看到上面这行就表示已经挂载成功了

参考文章:http://bbs.aliyun.com/read.php?tid=139502

PS:如果你的硬盘读写速度可以接受,不想把缓存文件放内存了,可以使用 umount /www/clin003.com/wp-content/cache 断开绑定即可。

通过以下命令可以查看硬盘读写速度

服务器硬盘读写速度:

root@clin003.com:~# dd if=/dev/zero of=testfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 21.8899 s, 24.0 MB/s
root@clin003.com:~# cd /dev/shm
root@clin003.com:/dev/shm# dd if=/dev/zero of=testfile bs=1M count=500
dd: writing `bigfile’: No space left on device
248+0 records in
247+0 records out
259317760 bytes (259 MB) copied, 0.269954 s, 961 MB/s

iptables防御DDOS轻量攻击脚本

SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。SYN Flood攻击虽然原理简单,但是造成的危害却十分严重。
首先检测短时间内大量IP发起请求,两种方法:
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
netstat -alnt | awk ‘{print $5}’ |awk -F “:” ‘{print $1}’ | sort | uniq -c |sort -n
一.
初步先制定iptables关于单个IP并发TCP连接。
1.1
限制单个IP并发TCP连接的方法适应于保护Linux上的各种TCP服务,使用iptables
iptables是v1.3.5以上。
1.2
实现细节:
限制连往本机的web服务,1个C段的IP的并发连接不超过100个,超过的被拒绝:
#iptables -I INPUT -p tcp –dport 80 -m iplimit –iplimit-above 100 –iplimit-mask 24 -j REJECT
延伸例子:
限制连往本机的telnet单个IP并发连接为2个,超过的连接被拒绝:
#iptables -I INPUT -p tcp –dport 23 -m iplimit –iplimit-above 2 -j REJECT
1.3
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT
也有人写作
#iptables -A INPUT -p tcp –syn -m limit –limit 1/s -j ACCEPT
–limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改
防止各种端口扫描
# iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
Ping洪水攻击(Ping of Death)
# iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT

二.
内核优化,通过修改内核参数或使用TCP Cookie技术只能在一定程度上减轻SYN Flood攻击的影响,但是加大了服务器的负担,但是可以减缓被拒绝攻击,实现细节:
sysctl -a | grep syn
看到:
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN的重试次数。
加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分SYN攻击,降低重试次数也有一定效果。
调整上述设置的方法是:
增加SYN队列长度到2048:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
打开SYN COOKIE功能:
sysctl -w net.ipv4.tcp_syncookies=1
降低重试次数:
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3

附录:iptables防DDOS攻击和CC攻击设置

防范DDOS攻击脚本
#防止SYN攻击 轻量级预防
iptables -N syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood
iptables -I syn-flood -p tcp -m limit –limit 3/s –limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
iptables -A INPUT -i eth0 -p tcp –syn -m connlimit –connlimit-above 15 -j DROP
iptables -A INPUT -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT

#用Iptables抵御DDOS (参数与上相同)
iptables -A INPUT -p tcp –syn -m limit –limit 12/s –limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT
##########################################################
防范CC攻击
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
1.系统要求
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
(2)iptables版本:1.3.7
2. 安装
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
3. 配置相应的iptables规则
示例如下:
(1)控制单个IP的最大并发连接数
iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30
#默认iptables模块不包含connlimit,需要自己单独编译加载

(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 –hitcount 30 -j REJECT iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT
#单个IP在60秒内只允许最多新建30个连接

4. 验证
(1)工具:flood_connect.c(用来模拟攻击)
(2)查看效果:
使用
watch ‘netstat -an | grep:21 | grep< 模拟攻击客户机的IP>| wc -l’

实时查看模拟攻击客户机建立起来的连接数,
使用
watch ‘iptables -L -n -v | \grep< 模拟攻击客户机的IP>‘

查看模拟攻击客户机被 DROP 的数据包数。
5.注意
为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:
#cat/etc/modprobe.conf options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
#记录1000个IP地址,每个地址记录60个数据包 #modprobe ipt_recent

参考文章:
http://blog.chinaunix.net/uid-20773865-id-113920.html
http://sookk8.blog.51cto.com/455855/321242

Restarting web server: apache2apache2: apr_sockaddr_info_get() failed for

重启Apache的时候提示:

[….] Restarting web server: apache2apache2: apr_sockaddr_info_get() failed for (none)
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
… waiting ……….apache2: apr_sockaddr_info_get() failed for (none)
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

解决办法:
打开 /etc/apache2/apache2.conf
在里面加入:

ServerName localhost

即可。
或者 打开 /etc/apache2/httpd.conf
在里面加入

ServerName localhost

然后重启服务器就ok了。

PS:其实这个只是警告没有配置默认主机名,可以不用理会的,如果你和我一样看不顺眼那警告信息,那就加个servername好了。

用Xshell开启socket代理

准备:
一个国外vps的ssh账号
安装一个xshell(官方网址:http://www.netsarang.com/)

步骤:
1、ssh连接到远程vps
2、点击:view -> Tunneling Pane
3、选择Forwarding Rules
4、在空白处右键:add。在弹出的Forwarding Rule,Type选择“Dynamic(SOCK54/5”;Listen Port使用默认的1080;配置后点击OK会弹出一个对话框,点击yes的话会对当前会话进行保存,以后每次连接此ssh会话,本地socket代理会自动打开。
5、可以看到Status的状态是“Open”,代理服务器设置已经完成了,然后就可以进行浏览器客户端的配置。
xshell-forwarding-rules

配置浏览器代理连接:

选一个火狐浏览器,
Options–>Network–>Manual Proxy configuration:

Socks Host:127.0.0.1 Port:1080

firefox-options-network

如图设置就可以了。

在线网站压力测试工具

可以模拟多个客户端同时访问站点,并分析出站点可同时支撑的访客数量。

网址:http://loadimpact.com/

loadimpact

通过图例可以看出在同时在线30人以下的时候网站都是比较稳定的。过了30这个数后就开始跳了。
loadimpact2

由于网站的配置不一样,所以支撑的同时在线访客数也是不一样的,这里是阿里云的空间1M带宽、512内存、1核的配置。在4分46秒的时候达到高峰之后可能被云盾拦截了,后面就没有连接了!!