Feb 3

[原]lighttpd基础配置-限速、与Squid配合、监控状态 晴

linuxing , 16:00 , 网络服务 » 常见服务 , 评论(0) , 引用(0) , 阅读(15201) , Via 本站原创 | |
    前段时间服务器硬盘坏了,导致提供镜像下载的服务终止,年前硬件虽修好。但发现提供下载的FTP配置丢失,重新配置比较麻烦。又考虑到原提供FTP下载时,存在不少的弊端,特别是暴力破解攻击的问题很严重,导致系统日志不正常的暴涨,故决定直接提供http链接算了。我一直觉得lighttpd是相当不错的Web服务端软件,特别是对于静态文件的处理效率相当高,资源占用很少。实际使用中,需解决的几个问题是:
引用
1、限速,毕竟网速有限,可不能因为下载把所有的带宽都用完了;
2、可分析来源地址,由于网络架构前端用的是Squid 2.6做反向代理,客户访问后端的服务器时默认只记录了前端的IP,这给分析访问的客户信息带来麻烦。
3、lighttpd自带简单的状态监控工具,激活它吧。

基础配置部分就不再说明了,请搜索我之前的日志吧。以上问题解决并不复杂,提及一些重要部分即可。

一、限速
lighttpd从1.3.8开始就支持限速功能,还支持plugin等。更详细的信息,请看:Lighttpd - Docs-TrafficShaping
限速功能在Core中即有提供,不需要启动额外的模块,可用两个设定:
引用
connection.kbytes-per-second
Limit the throughput for each single connection to the given limit in kbyte/s
Default: 0 (no limit)
限制单个连接可使用的带宽,默认值是0,不限制

server.kbytes-per-second
Limit the throughput for all connections to the given limit in kbyte/s
Default: 0 (no limit)
对某个域、或链接路径限制可用的总带宽

需要注意的是:
引用
1、我没有找到对链接数的限制,这是一个比较麻烦的问题,可能需要用iptables来处理;
2、单连接的限制无法防止使用迅雷、快车等多并发工具下载的情况,所以需要同时控制对整个域或路径的最大带宽;
3、控制的单位是KBytes/sec ;
4、由于存在TCP send buffer的情况,一般实际数据会比限制的数据要高一点。

例如,lighttpd.conf中有:
引用
#单个连接不能超过30KB/s
connection.kbytes-per-second = 30

$HTTP["host"] == "download.linuxfly.org" {
  server.name = "download.linuxfly.org"
  server.document-root = "/var/www/html/iso"
  accesslog.filename = "/var/log/lighttpd/iso-access.log"
  $HTTP["url"] =~ "^/download/" {
    dir-listing.activate = "enable"
    #/download路径下可用的最大是100KB/s
    server.kbytes-per-second = 100
  }
  #除/download路径外,该域可用的最大带宽是200KB/s
  server.kbytes-per-second = 200
}

对特定客户端或plugin的使用,请参考上面官方网站WiKi上的说明。

◎ 意外
限速后,可能更多的朋友会使用多线程的下载工具来加速。此时,可能会发现系统日志报错:
引用
2009-02-04 17:39:02: (network_linux_sendfile.c.143) open failed:  Too many open files
2009-02-04 17:39:02: (connections.c.603) connection closed:

原因是,lighttpd是个单线程的服务器,所以受到Linux的单线程允许打开文件数的资源限制。
在lighttpd配置文件中,需要加入(默认1024):
引用
server.max-fds = 8192

此外,系统本身也有限制,查看Linux的最大文件描述符:
引用
# cat /etc/redflag-release
Red Flag DC Server release 5.0 (Trinity SP2)
# cat /proc/sys/fs/file-nr
580     0       131072

三个值的意思分别是:
引用
580:总共打开的文件描述符的数量(从系统开机开始算, 所有打开的文件描述符的数量)
0:总共的空闲的文件描述符的数量
131072:最大能打开的文件描述符的数量

修改:

# echo “132096″ > /proc/sys/fs/file-max

或加入/etc/sysctl.conf文件中。

二、与Squid的配合
我的网络架构是:
引用
Squid ———— vz:lighttpd:80

默认在lighttpd的accesslog里面,是无法记录透过Squid(或Apache的mod_proxy)过来的用户ip地址的,而全记录的是Squid(或Apache机器)的代理网关ip地址。在我们需要分析客户端来源信息时,就需要做些设定了。

1、Squid配置
修改/etc/squid/squid.conf配置文件,确认下面的设置:
引用
#要禁用重写url头,否则后台的http服务器日志看不到客户端的来源信息了
url_rewrite_host_header off

更详细,请看这里:[原]配置Squid 2.6实现反向代理

2、lighttpd设置
把mod_accesslog模块打开,然后修改accesslog格式,即有:
引用
server.modules              = (..., "mod_accesslog", ... )
#### accesslog module
accesslog.filename          = "/var/log/lighttpd/access.log"
accesslog.format = "%{X-Forwarded-For}i %v %u %t \"%r\" %s %b \"%{User-Agent}i\" \"%{Referer}i\""

其中”%{X-Forwarded-For}i 就是记录了用户来源的ip地址,这里日志与Apache combined相同。

三、监控状态
lighttpd的mod_status是可以提供server-status监控页面的,需要在配置文件中加入:
引用
server.modules = ( ..., "mod_status", ... )
status.status-url = "/server-status"
status.config-url = "/server-config"
status.statistics-url = "/server-statistics"

重启lighttpd服务后,访问
引用
http://ip/server-status
http://ip/server-config
http://ip/server-statistics

页面即可:
点击在新窗口中浏览此图片
其他可选参数,请见:Lighttpd - Docs-ModStatus

※ lighttpd更多可用的模块说明,请见这里:Wiki Modules Documentation
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]