HomeServer100419( Linux&Win32 )发布(x86bin src package )

100419 更新:

修正CGI传递SERVER_NAME参数问题。

可设置多个CGI程序。

自定义文档类型。

自定义错误页面。

 

Linux版本已经可以运行使用 🙂 FastCGI可以定制IP和端口,详细见样例的config.xml。 无聊时写的服务器,山寨Apache的。最新增加 Rewrite 功能,修正访问多级目录的bug。PHP的PathInfo功能可以通过Rewrite来模拟,或者在php.ini里设置cgi.fix_pathinfo=1。

虽然这不是正式版本,但是都蛮稳定的了。现在我博客就是使用Homeserver来服务。除了我博客,还有几个php小站和论坛也使用了HomeServer。

新增功能: 虚拟站点、FastCGI、Proxy(代理)

为什么选择HomeServer了? 原因: 配置简单,安全,高效。

至于为什么配置简单,因为功能简单。如果你玩过apache的话,只需要用httpd.conf和config.xml对比一下就知道了。
config.xml

本站下载: homeserver100419.zip(x86bin&src package)

修正:因为开始发布的打包里有些二进制文件不是最新的,所以运行时候遇到问题,现已经修正。

HomeServer100419( Linux&Win32 )发布(x86bin src package )》有93个想法

  1. Xiaoxia

    的确输入localhost啥都不显示,重新编译一下吧。一开始的打包有问题。重新下载http://home.xxsyzx.com/home/upfiles/homeserver091024.zip 应该可以解决了。

    回复
  2. Xiaoxia

    的确。限制每个ip的连接只能在做代理的前端服务器做了。例如HomeServer做iis的代理的时候,限制每个ip的连接数只能在HomeServer上进行设置。这是代理的缺点。

    回复
  3. Xiaoxia

    如果serverPort不是80的话,需要给每个虚拟站点的名称添加 :端口 就可以用了 。以后可能会改善这个问题。

    回复
  4. Xiaoxia

    嗯,忘了把数据库删除掉呢。 哈哈~~ 我真菜。
    其实我发现这个博客的确有个漏洞,但希望大家都是厚道的人,说出来就好了,不要把数据都删除了。
    PS: 感谢气泡熊送我百度hi相框。

    回复
  5. Xiaoxia

    Windows上notepad++ ,对utf8支持的很好。
    Linux上gedit,简单就行了。
    虽然npp的作者的思想不怎么好,但他的贡献也值得肯定。

    回复
  6. Xiaoxia

    是使用gcc的呀,我现在一般都用开源编译器的。Makefile方便编译,不是为了管理。管理代码可以使用svn。

    回复
  7. haha

    试用了下,发现似乎对某些php网站程序支持的不好。

    例如:“http://localhost/type/index.php/archives/1/”这类网址,无法打开。用apache就可以。与php是cgi模式有关么,还是什么其他问题?

    回复
  8. Xiaoxia

    呃,毕竟对php的支持是初期的版本,以后会逐步完善。你说的这个问题我还没有遇到过,是index.php/ 这里的缘故??
    还没有对log文件大小的限制,不过可以关闭log功能。

    回复
  9. haha

    想了想, 应该是与服务器重写(rewrite)有关。“http://localhost/type/index.php/archives/1/”这类网址需要服务器支持重写

    回复
  10. murua

    to Xiaoxia.俺是菜鸟,什么都不懂,但是在没有重写模块的iis 或者 apache服务器(都没有重写模块),类似http://localhost/index.php/archives/1 是可以的。还有,我用的是wordpress 。

    回复
  11. haha

    搜索后发现是php fastcgi模式中PATH_INFO问题。你的homeserver有点类似nginx,nginx不支持pathinfo模式,类似info.php/hello形式的url会被提示找不到页面。你看看能不能通过正则找出实际文件路径和pathinfo部分的方法,让homeserver支持pathinfo。

    回复
  12. Xiaoxia

    Thank you! I will check it out and try to solve this problem then release a new patched version here in the coming two days.

    回复
  13. haha

    期待你的新版。之前说的重写问题是这样的,有些服务器不能自动识别请求的是文件还是文件夹,所以访问http://localhost/web时会提示无法显示,而访问http://localhost/web/就可以显示。解决这问题可以利用服务器的重写功能,补全后面的“/”。

    回复
  14. kmad

    小虾,能不能自定义添加request header ,因为我的tomcat是在后台的,用homeserver代理之后获取不了ip,能不能像nginx那样,在proxy的时候再添加个request header ,那样tomcat就可以通过header获取真正的ip了.

    回复
  15. Xiaoxia

    好的,不难,过两天我就加上去。需要支持自定义HTTP头,给proxy和fcgi都加上。有什么还做得很不足的就告诉我,谢谢!!

    回复
  16. Xiaoxia

    哦??
    to hvder, 你不要把文件放到网页目录不就行了吗?? 就是和网页分离开来。或者起一个特殊的名称~~

    回复
  17. Xiaoxia

    不明白39楼想表达什么意思,你是不是问HomeServer程序是用什么语言写的呢?(C语言)
    还是要问使用HomeServer可以支持什么脚本语言?(PHP、JSP)
    又或者是这个小站用什么语言写?(C++)

    回复
  18. Xiaoxia

    可以吧。我也有这个打算的,估计不久就会加入。如果谁对压缩算法比较熟悉,给我写一个吧。

    回复
  19. jimku

    用两台机器来测试homeserver,两台都是linux系统,2G内存
    webbench -c 30000 -t 60 http://xxx.xxx.xxx.xxx/
    但是很快就homeserver进程就挂了,测试了几次都这样,homeserver配置是默认的,
    日志里显示走到了work_http

    回复
  20. Xiaoxia

    to jimku,
    请问你使用的是不是最新的版本呢?
    我记得之前是有一个这样的bug。
    稳定的版本正在写了。。。

    回复
  21. Xiaoxia

    你使用哪个操作系统平台呢?
    奇怪,我这里测试多大的数据都没问题。所以,这个问题不好找。。。

    回复
  22. jimku

    真是我人品问题了。。可能那系统真有问题,换成了centos就没事了。。。。还有,我有个问题要问你,就是url重写的时候能不能判断请求文件或者目录存不存在,如果存在,就不重写,如果不存在,就重写,当然,这是由用户在config.xml写的,像nginx那样,有if语句等等。(*^__^*) 这软件速度还是不错的,很不错,就是不知道你用的是什么开源协议,怕是私有软件,不太敢使用。

    回复
  23. jimku

    刚才又测试了一下,测试静态的没事,但是来跑phpcgi 时候,很快homeserver又挂了,php-cgi的进程倒没挂。终端显示:

    fcgi_run /
    段错误

    回复
  24. Xiaoxia

    在Linux上HomeServer还有很多问题,因为现在出的比比较稳定的版本都是Windows上的。包括本站的HomeServer。我想在Linux下面还需要调试,鉴于本人对Linux下的网络编程不是很熟悉,遇到不少问题,所以需要一段时间来完善它。希望能够理解一下:-) 也希望有人能帮忙检查一下Linux下面的这个问题。

    回复
  25. Xiaoxia

    因为我现在测试使用的服务器是朋友提供的windows server,所以优先完善了windows的版本。不过,这个月我也买了一个linux的vps,估计很快我会搭建好平台测试一下,修补一些bug。我也准备在googlecode上增加一个项目。不过名字起什么好呢?

    回复
  26. hi

    请教小虾 编译plugin_fcgi.bat报这个错 怎么解决

    C:\Dev-Cpp\aa>C:\Dev-Cpp\bin\gcc plugin_fcgi.c -o plugins/plugin_fcgi.dll -share

    d -Wl,–add-stdcall-alias -s -L. -lwsock32

    C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8ibaaa.o(.text+0xf85):plugin_fcgi.c: undefi

    ned reference to `xml_readnum’

    C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8ibaaa.o(.text+0xfa2):plugin_fcgi.c: undefi

    ned reference to `xml_readstr’

    collect2: ld returned 1 exit status

    回复
  27. hi

    小虾 用了 new COM(“Excel.application”) php报崩溃 是不是fcgi模式不支持 ActiveX components ?? 还是homeserver的问题?请指教!

    回复
  28. Xiaoxia

    to 67f,
    啊。。。 那是什么东西!! 能够让php崩溃的原因,我现在还没有搞懂!

    to hello, 你说的是wordpress ??

    回复
  29. hello

    类似“http://localhost/type/index.php/archives/7.html”这种url

    在php.ini里设置 cgi.fix_pathinfo=1还是显示file not found

    回复
  30. free

    不知什么时候出新版本,配置config.xml后安装mambo5.50,界面显示有问题,mambo的网站地址应该是:http://域名才对,但从后台查看是http://localhost。
    mambo5.50下载地址:http://www.mambochina.net/
    请帮忙看一下是不是config.xml修改出错。
    config.xml中修改的内容如下:
    <virtualHost name="域名">
    <root>w:</root>
    <list>1</list>
    <rewrite base="/">
    <rule>
    <pattern>^/(.+)-(.+)\.html$</pattern>
    <result>show.php?id=$1&page=$2</result>
    </rule>

    回复
  31. Xiaoxia

    To free, 你是使用域名访问还是使用http://localhost来访问的呢?如果使用域名访问但却得到localhost那就很奇怪了。

    回复
  32. Xiaoxia

    list是目录列表功能。你说的那个出现localhost的问题我貌似找到了,应该是我的fcgi写的有点问题,已经修正了这个问题。我改天更新一下HomeServer程序,你再下载试试。
    谢谢支持哦!

    回复
  33. MagicBear

    粗略看了一下 内存管理器部份其实可以用另一种方法写的 这样的话虽然分配速度可以 但释放太慢
    我自己写的代码
    __inline void *mm_malloc(size_t size,int funcID,int source_line)
    {
    void *ptr;
    pmm_alloc_def pdef;
    __sync_add_and_fetch(&mm_alloc,1);
    __sync_add_and_fetch(&mm_alloc_bytes,size);
    __sync_add_and_fetch(&mm_alloc_function[funcID],1);

    ptr = malloc(size+sizeof(struct mm_alloc_def));
    pdef = (pmm_alloc_def)ptr;
    pdef->size = size;
    pdef->funcid = funcID;
    pdef->source = source_line;
    ptr=(void *)((unsigned long)ptr+sizeof(mm_alloc_def));
    return ptr;
    }

    __inline void mm_free(void *ptr)
    {
    DEBUG_ACTION();
    pmm_alloc_def pdef;
    ptr=(void *)((unsigned long)ptr-sizeof(mm_alloc_def));
    pdef = (pmm_alloc_def)ptr;
    __sync_sub_and_fetch(&mm_alloc,1);
    __sync_sub_and_fetch(&mm_alloc_bytes,pdef->size);
    __sync_sub_and_fetch(&mm_alloc_function[pdef->funcid],1);

    free(ptr);
    }

    欢迎+Q共同研究~~ 130012321

    回复
    1. Xiaoxia 文章作者

      这个是因为session的数目有限制。新版本的homeserver已经取消了在请求php页面的时候创建session!你也可以修改代码把创建session的功能去掉,它是用于某些插件的!

      回复
  34. tgy

    好象没有对URL做安全过滤嘛,居然可以通过/../这种形式访问网站根目录的上级目录,被人利用的话,将可访问整个磁盘分区中的文件

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据