Rootop 服务器运维与web架构

2015-04-06
发表者 Venus
nginx限制并发连接数及下载带宽已关闭评论

nginx限制并发连接数及下载带宽

nginx版本:nginx-1.6.2

在早期nginx中为limit_zone,新版本改为limit_conn_zone

编译安装时不需要特定参数,默认就会编译进去。

配置过程:
在nginx.conf中的http{}段里添加:

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

在需要限制并发数和下载带宽的虚拟主机配置文件server{}段里添加:

limit_conn perip 5;
limit_conn perserver 2000;
limit_rate 100k;

参数说明:
$binary_remote_addr  #限制同一客户端ip地址
$server_name #限制同一server最大并发数
limit_conn       #限制并发连接数
limit_rate         #对每个连接(而不是对源ip)限制下载速度kb

limit_conn_zone,是针对每个IP定义一个存储session状态的容器。
这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。

同一个浏览器下载2个视频测试:

超过最大连接数效果图:

nginx相比apacha下的第三方模块mod_bw要好一些,不过发现现在apache2.4版本中也有了限速模块。
地址:http://httpd.apache.org/docs/2.4/mod/mod_ratelimit.html

提示:

在windows下的nginx中使用此功能会有问题,nginx错误日志信息:

2015/04/03 09:07:25 [emerg] 1840#548: shared zone “perip” has no equal addresses: 02F40000 vs 02FB0000
2015/04/03 09:07:25 [alert] 612#568: worker process 1840 exited with code 1

在nginx官网有解释:http://nginx.org/en/docs/windows.html#known_issues

The cache and other modules which require shared memory support do not work on Windows Vista and later versions due to address space layout randomization being enabled in these Windows versions.

所以此功能不适用于windows下。

2015-04-05
发表者 Venus
apache2.4使用mod_ratelimit模块限制下载速度已关闭评论

apache2.4使用mod_ratelimit模块限制下载速度

项目中apache需要访问nas共享中的一个目录,会牵扯到身份验证,这里设置nas访问用户为administrator,密码同本地系统administrator密码一致!

修改apache服务,以管理员用户启动,否则访问nas目录会报404错误(应该是访问不到)。

载入限速模块,配置目录权限及限速:

LoadModule ratelimit_module modules/mod_ratelimit.so
<Location /vkvod>
 SetOutputFilter RATE_LIMIT
 SetEnv rate-limit 100 #限速100k
</Location>
#设置虚拟目录权限,否则提示403错误
<Directory //192.168.0.157/NAS/Vod>
 Options Indexes FollowSymLinks Includes ExecCGI
 AllowOverride All
 Require all granted
</Directory>

设置虚拟目录:

<IfModule alias_module>
 Alias /vkvod //192.168.0.157/NAS/Vod
</IfModule>

用浏览器下载 http://192.168.0.156/vkvod/2.mp4 测试 #单线程,不能用迅雷,迅雷为多线程。

通过测试也发现跟nginx一样是限制会话速度而不是限制单个ip速度。

官方手册:http://httpd.apache.org/docs/2.4/mod/mod_ratelimit.html

另外提示,在官方中并不提供windows下的apache2.4下载,只有源码包。可以从第三方网站下载。

提供一个第三方下载地址:http://s1.jisuxia.com/2013/0627/Apache_2.4.4_for_Windows_JiSuXia.rar

2015-04-03
发表者 Venus
windows下配置apache的单ip并发及限速模块(limitipconn2、mod_bw)已关闭评论

windows下配置apache的单ip并发及限速模块(limitipconn2、mod_bw)

limitipconn为单ip并发限制,mod_bw为单ip带宽限制,这两个模块都不属于apache官方模块,均为第三方开发。
limitipconn2第三方官网下载地址:
http://dominia.org/djao/limit/win32/mod_limitipconn.httpd-2.2.11-WIN32.zip

mod_bw第三方官网下载地址(仅支持2.2版本,新版2.4好像不支持没测试):
http://ivn.cl/files/dlls/mod_bw-0.91-2.2.14/mod_bw.dll

据网上资料说mod_bw模块是根据每个客户端进行带宽限制,但实际测试效果并不是这样,测试效果是对全局或者某个虚拟主机整体产生了影响。

配置过程:
修改apache配置文件,开启 mod_status.so 和载入 mod_limitipconn.dll :

LoadModule status_module modules/mod_status.so
ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.dll

<IfModule mod_limitipconn.c>
<Location /vkvod>
MaxConnPerIP 3
</Location>
</IfModule>
#以上部分为对vkvod目录进行单ip线程连接限制,为实现效果设置为3,当超过线程连接数时,会报503错误。

LoadModule bw_module modules/mod_bw.dll

BandWidthModule On
ForceBandWidthModule On
BandWidth all 100000

Alias /vkvod "\\\\192.168.0.157\\NAS\\Vod"

#以上部分为载入mod_bw.dll模块,整体限速为100kb。
以上配置可以放到httpd.conf中也可以放到虚拟主机配置文件中,针对全局或虚拟主机进行限制。

参数说明:
MaxConnPerIP 3 #限制的线程数
BandWidthModule On #是否开启限速
ForceBandWidthModule On #强制带宽限制
BandWidth all 100000 #最大带宽100kb

效果截图:

当超过最大连接数时,错误提示:

限速模块效果:当开启一个下载过程基本达到100kb的速度。

当开启3个下载过程(3台独立客户端下载)基本在40-60kb:

所以说mod_bw的带宽限速效果不太适合我当前环境,可以用于针对某个虚拟主机限速。防止下载量过大影响其他虚拟主机。

经过查阅apache2.4官方文档,已经自带了限速模块:http://httpd.apache.org/docs/2.4/mod/mod_ratelimit.html

2015-04-02
发表者 Venus
windows下apache设置虚拟目录为NAS路径已关闭评论

windows下apache设置虚拟目录为NAS路径

项目需要在windows下的apache中访问共享中的数据,配置虚拟目录。
参数:

Alias 虚拟目录 物理路径

#本地目录写法

Alias /vkvod "C:\vkvod"

#cifs共享写法

Alias /vkvod "\\\\192.168.0.157\\NAS\\Vod" #反斜杠

或者

Alias /vkvod "//192.168.0.157/NAS/Vod" #正斜杠

重启下apache服务即可。
这里测试了一下,在windows中,通过正斜杠/和反斜杠\都支持访问,不过反斜杠还需要加一个反斜杠来进行转义。

在linux下的话,不支持通过\\访问共享,只能挂载到本地目录。而且路径只能为正斜杠。

2015-04-01
发表者 Venus
华为服务器重启管理口已关闭评论

华为服务器重启管理口

有一批华为的服务器,通过管理口远程查看硬件状态,登陆不进去,之前是可以的。

打华为技术支持电话说通过ssh登陆管理口执行个命令就可以重启服务。

新版本远程管理叫iMana200,在这里面可以通过命令直接重启管理口服务。
root@BMC:/#ipmcset -d restart

但是我发现没有这条命令,400说是软件版本太老了,需要按UUID按钮重启管理口,记不太清楚了。还得跑机房。
思考一下,想了个办法。既然可以ssh,那么就是基于linux的了,那直接干掉进程,再启动下服务就ok了。

1、根据端口号查找进程
# netstat -tnlp | grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 22781/webgo

看到是webgo这个程序占用了443端口。
# ps axu | grep webgo
22781 root 2424 S /usr/local/bin/webgo /usr/local/www
22782 root 1348 S /usr/local/bin/webgo /usr/local/www
22783 root 2424 S /usr/local/bin/webgo /usr/local/www
22784 root 2424 S /usr/local/bin/webgo /usr/local/www
22942 root 456 S grep webgo

启动了好几个进程,批量杀死进程。第一列为进程id。
# kill -9 $(ps aux | grep webgo | grep -v “grep”| awk ‘{print$1}’)

# /usr/local/bin/webgo /usr/local/www

再次通过浏览器访问管理口,登陆正常了。