TUX概述

TUX是一个基于内核的Web服务器,专为Linux设计,提供静态和动态内容服务。它能实现零拷贝缓存,提高网络传输效率,并与Apache等用户区Web服务器配合工作。TUX 2.0增加了零磁盘读拷贝、网络写零拷贝和虚拟主机等功能。安装TUX需要Linux 2.4.x及以上系统,推荐配置为TUX为主服务器,Apache为辅助服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、什么是TUX?

1.介绍

  TUX是一种有GPL(GNU General Public License )许可的基于内核的Web服务器。

  目前它还只能提供静态的网页服务,只有和内核区模块,用户区模块,以及一般的用户区Web服务器后台一起应用的时候才提供动态的内容服务。一般用户区的Web服务器不需要为了适应TUX而改变很多地方。然而,用户区数据段代码必须要有一个通向TUX的系统调用的接口。

  虽然动态的内容服务现在增长的很迅速,但是也必须要提供静态的内容服务。如,所有的图片文件就都是静态的。TUX能给在Linux的内核里提供非常高效率的静态内容服务,就想在内核里运行的NFS网络文件系统服务一样。

  TUX也有处理动态内容的功能。TUX模块用网页缓冲存储动态内容的对象。当一个动态的请求到达的时候,一个TUX的模块就发送会一个联合的动态请求并缓冲这个请求。这就是TUX的零拷贝缓存校验的结构。(建议TUX模块不许运行在用户区,虽然他们也可以运行在内核区。)

  这个新的动态内容的处理需要一个新的API接口。当前的CGI的API接口不能充分的用在TUX的API上。因此,当前的CGI程序为了使用TUX就要修改当前的程序。如果CGI程序不需要增加TUX的速度的话,TUX也可以把它安一般的CGI来处理。要实现这个功能就要用TUX的CGI模块。TUX也可以处理复杂的CGI或是其他的请求,这要通过它把请求重定向到另外一个web服务器后台程序,如Apache。也就是说,静态的内容,TUX模块,老的CGI程序,以及为TUX Web服务器编写的特定的程序都可以在TUX这个主服务器里运行。

  一句话,TUX和其他的Web服务器的区别和TUX的好处包括:

TUX是作为Linux的内核2.4.x或更高的一部分来运行的,另外一部分可以做为用户区来运行。

TUX缓存部分的TCP校验并用它们来加快网络数据传输速度。

用一个特定的网络卡,TUX可以从页面缓存定向分散的DMA直接到网络,这样就避免了数据的拷贝。

当TUX不知道如何去处理一个请求或是接受到一个请求不能去运行的时候,它一般会把这个请求传送到用户区的Web服务器后台去处理它。一个典型的用户区Web服务器就是Apache。

2.TUX 2.0的新功能

  TUX 2.0是从TUX 1.0升级成的,仍然保守着与用户区模块的兼容性。

  增加的功能包括:

     真正的零磁盘读拷贝,TUX1.0是放到一个临时的缓存里的。
     生成网络写的零拷贝。
     零拷贝解析。
 
 其他新功能:

     提高用户去功能模块的支持。
     虚拟主机的支持,它不限制 虚拟主机的数量。
     CGI可以绑定到特定的进程
     一些BUG的修复。

3.系统的基本需要

     TUX需要基于2.4.x内核或是更高版本的系统。
     基于X86的服务器。
     交替的Web服务器如Apache来处理不知道的请求
 当前的限制:
  
     内核模块只支持服务器端。
     TUX只在x86的Linux平台上测试过。
     TUX能请求其他的Web服务器如Apache来处理请求。在当前的版本,它对回滚不是处理的很好。
二、如何安装

为了实现最好的效果,为TUX生成一个新的分区来作为文档目录。

配置和安装TUX的内置内核支持。

安装TUX的包rpm –Uvh tux-2.0-1.i386.rpm

日志文件

  对于每一个请求,TUX会记录请求者的地址,一个日期和时间戳,能精确到1秒,还要记录请求的文件类型,文件传输的大小,和最后请求的状态。

  TUX的日志文件用二进制存储在/var/log/tux。用这样的二进制格式,日志文件会比用ASCII格式存储小近50%。Tux2w3c程序把这样的二进制日志文件转换成标准的HTTPD的日志文件。

三、配置

1.运行模式

  建议的配置运行模式是把TUX作为主Web服务器来运行,把Apache作为辅助的服务器。

  客户端端口:8080(或是其他)

  Web服务器端口:80

  因为建议的运行模式TUX是作为主Web服务器来运行,所以用户区后台必须改变到端口8080。对于Apache的配置,改变的配置在文件
    
   /etc/apache/conf/httpd.conf里在:

  Port 80

  改为

  Port 8080

  基于对安全的考虑

  BindAddress *

  应该改为

  BindAddress 127.0.0.1

  这样就可以避免外部的用户可以访问到Apache的目录。你必须重新启动Apache以使改变的配置生效,用/etc/rc.d/init.d/httpd restart。

  运行模式需要改变到用户区后台运行作为TUX的辅助服务

  客户端口:80

  Web服务器的端口:8080(或是其他)

2.压缩的GZIP数据流

  TUX现在能够支持传送压缩的GZIP数据。这样也能减少web服务器和客户端浏览器的数据流量和等待时间。

  默认情况下,这个压缩功能是禁止的。如果要用到这个功能,就要在/etc/sysctl.conf修改

  net.tux.compression=1

  你的GZIP文件,有.gz的文件必须和你的解压版本在一个目录下。另外,下面的一些情况必须满足。

TUX的解压功能在/etc/sysctl.conf启动。

客户端能明确的支持gzip的编码。

源文件存在,并有正确的权限。

.gz文件的存在,并且有正确的权限。

.gz文件比源文件新,或是和源文件有一样的数据。

.gz比源文件小

3.参数

  参数列表:

  下面的参数是在/proc/sys/net/tux和/proc/net/tux设定的。注意这个已经从源地址/proc/sys/net/http和/proc/net/http改变的。

名称
默认
描述
-----------
serverport
80
主web服务器监听的端口
-----------
clientport
8080
用户区的http后台的监听端口
------------
documentroot
/var/www/html
网页的存储目录,如果用初始脚本 /etc/rc.d/init.d/tux, 文档目录应该设置到 /etc/sysconfig/tux 作为 DOCROOT.
------------
threads
服务器的线程数目,一般每个按CPU数目,每个CPU对应值1。
内核用到的线程数目,不.能超过系统的CPU数目。如果用初始脚本/etc/rc.d/init.d/tux, 线程应该设置 /etc/sysconfig/tux 成 TUXTHREADS.
-------------
mode_allowed
S_IROTH
需要的TUX文件进程的权限,用"man 2 stat"看更多的信息。
-------------
mode_forbidden
dir+sticky+execute
禁止权限的文件TUX不会去运行。看"man 2 stat" 得到所有的值。.
-------------
mode_cgi
0x8d40
权限位联合表明这个以给的饿文件允许用做为一个GCI文件。文件每年感和URL被替换并且$docroot/cgi-bin/$filename被执行为一个真正的CGI程序。和这些权限不相关可以保留为空
-------------
mode_userspace
S_IXUSR
用户区的模块的特殊权限位。
-------------
nonagle
2
如果设置为0,和标准的Nagle输出包结合。如果设置为1。就没有输出包的结合。如果设置为2,TCP_CORK格式的输出包结合
--------------
page_age_start
1
可调LRU页面缓存
----------------
page_age_adv
1
可调LRU页面缓存
-----------------
page_age_max
8192
可调LRU页面缓存
----------------
push_all
0
如果设置为0,会结合并发的包。如果设置为1,强制一个包边界右移到TUX请求
-----------------
compression
0
如果设置为零就禁止。如果设置为1就发送gzip的压缩数据。看相关的章节了解详细的信息。
-----------------
cgi_uid
-1
UID用来运行CGI程序,在TUX脚本的默认设置ID为“nobody”
---------------
cgi_gid
-1
GID用来运行CGI程序。早TIX的初始脚本里设置为"nobody"
----------------
cgiroot
/var/www/tux/cgiroot/
TUX运行CGI程序的目录。在初始脚本里默认为$DOCROOT
------------------
max_connect
1000
当前的最大连接数
----------------
max_keepalive_bw
0
最大的在线输出带宽bytes/sec. 默认值为0表明不限制输出带宽
-----------------
max_object_size
100MB
TUX的最大服务文件大小
----------------
Dprintk
0
如果TUX_DEBUG开启,就会有很冗长的信息记录到syslog.,这个只作为调试的目的来用的。
----------------
ack_pingpong
1
延迟TCP ACK 进入的桢
-----------------
keepalive_timeout
0
没有完成,现在不可用。是设置点客户连接的超时的
------------------
logentry_align_order
N/A
当前不可用
-----------------
logfile
/var/log/tux
TUX 二进制日志文件。
-----------------
logging
1
设置为1,日志记录开启。如果设置为0,记录就禁止。
-----------------
max_backlog
2048
最大的TUX监听的套接字SYN backlog 限制。
-----------------
virtual_server
0 (off)
开启启动 虚拟主机的支持。主机用目录$DOCROOT/<Host> 'virtual docroots.' 标识。
-----------------
zerocopy_parse
1
用输缓冲器来做为一个临时的缓冲来避免拷贝输入数据。
-----------------

  如果用到TUX初始脚本/etc/rc.d/init.d/tux。下面的参数可以在文件/etc/sysconfig/tux配置。它们不能在/etc/sysctl.conf 配置因为初始脚本会忽略在/etc/sysctl.conf.设置的参数。用初始脚本启动是启动TUX的首选配置。

  Table 3-2. /etc/sysconfig/tux parameters

参数
默认
描述
--------------
TUXTHREADS
服务器的线程数目,一般每个按CPU数目,每个CPU对应值1
内核用到的线程数目(和后台进程联系),不能比系统中的CPU数目大
--------------
DOCROOT
/var/www/html
文档的根目录,这个目录用来存储网页
-------------
CGI_UID
nobody
运行CGI程序的用户UID (user)
---------------
CGI_GID
nobody
运行CGI程序的组GID (group)
---------------
CGIROOT
/var/www/html
CGI程序存储的目录,如果你希望CGI程序能访问整个系统,就要把变量CGIROOT设置为CGIROOT=/
----------------
TUXMODULES
默认没有模块的列表
TUX用户区的模块列表
----------------
MODULEPATH
默认没有路径设置
TUX用户区模块的路径
----------------

  需要的参数:

  在启动TUX前,下面的参数不许设定:

  serverport

  clientport

  DOCROOT

四、配置脚本

1、TUX开启

  TUX可以用/etc/rc.d/init.d/tux start来启动。

  这个脚本是用来启动为TUX的单进程模式或是多进程服务模式的。

  如果你选择编写你自己的TUX启动脚本或是从/usr/sbin/tux来启动,你就可以用下面的选项:

  Table 4-1. /usr/sbin/tux options
-------------------------------------------
选项
  描述

-t, --threads=N
TUX的线程数字号

-d, --docroot=path
文档的主目录

-m, --modpath=path
TUX的用户区可加载模块的目录

-d, --daemon
在后台运行

-D, --date-interval=seconds
数据串的更新频率,默认为1

-?, --help
显示帮助信息

--usage
显示简短的用法信息

--------------------------------
  注意:IRQ中断功能能对系统执行效果有一点的影响。如果你没有很好的经验不建议你应用下面的东西。

2、IRQ中断

  为CPU绑定中断是2。4内核的新功能。这个功能也在在TUX的一部分实现。在linux的每一个IRQ的都会在/proc/irq目录有一个入口。如,配置IRQ 40为/proc/irq/40。这些IRQ关系的,都是通过同一目录下smp_affinity配置的,它是一个CPU的位的掩码。如,允许一个中断资源,默认的smp_affinity是十六位的0xffffffff.这表明进程把中断发送到所有CUP时间。你不允许关闭一个中断的CPU。如果中断控制不支持IRQ affinity,这个值就不能从默认改变。如果多CPU定义了,那么IRQ源就会用到剩下的CPU。这叫做底优先的APIC路由。IRQ affinity是用来绑定中断到特定的CPU或是一组CPU,通过计算一些中断的十六进制的中断smp_affinity。

3、停止TUX

  如果TUX用/etc/rc.d/init.d/tux start脚本启动。就可以用/etc/rc.d/init.d/tux stop脚本来停止它。这样会自动卸载所有的用户区的的TUX模块。

  如果你没有用提供的脚本,也可以用命令/usr/sbin/tux –s或是/usr/sbin/tux –stop。

五、安全

  TUX设计的非常严格和安全的。这可能是因为辅助的用户区的后台来处理复杂的其他请求。

  TUX只提供一个下面的文件服务:

URL没有包括 ?。
URL没有用 /. 开始的
URL指向一个存在的文件。
文件是可读的。
文件不是一个目录。
文件不可以执行。
文件不包含粘粘位。
RUL没有包括禁止的或是一些子串。

  注意:要配置sysctl参数在/proc/sys/net/tux。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值