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)
修正:因为开始发布的打包里有些二进制文件不是最新的,所以运行时候遇到问题,现已经修正。
不能用哦.输入localhost什么都不显示哦
还有,这个是你自己写的还是哪里发布的?
回复02F:博主自己写的。
的确输入localhost啥都不显示,重新编译一下吧。一开始的打包有问题。重新下载http://home.xxsyzx.com/home/upfiles/homeserver091024.zip 应该可以解决了。
但是如果使用的是使用代理的要怎样限制每个ip的连接?这样子你的homeserver就无法限制了?
的确。限制每个ip的连接只能在做代理的前端服务器做了。例如HomeServer做iis的代理的时候,限制每个ip的连接数只能在HomeServer上进行设置。这是代理的缺点。
不能修改serverPort修改后访问就提示”unknown host name”应该是BUG吧
如果serverPort不是80的话,需要给每个虚拟站点的名称添加 :端口 就可以用了 。以后可能会改善这个问题。
具体怎么配置啊?
还有你的数据库都共享了
不怕被人黑吗 ?
对哦,怎么连数据库都在里面。。。而且里面的数据。。。。。
嗯,忘了把数据库删除掉呢。 哈哈~~ 我真菜。
其实我发现这个博客的确有个漏洞,但希望大家都是厚道的人,说出来就好了,不要把数据都删除了。
PS: 感谢气泡熊送我百度hi相框。
请问小虾你的虚拟主机是在哪里申请的?收费是多少?此网站是用homeserver弄的吗?
这个网站是HomeServer运行的,服务器目前使用一个大好人提供的VPS 🙂
请问小虾写这些代码,都是用的什么IDE?
Windows上notepad++ ,对utf8支持的很好。
Linux上gedit,简单就行了。
虽然npp的作者的思想不怎么好,但他的贡献也值得肯定。
homeserver使用的是gcc编译的吗?
好像有个makefile文件,难道也可以使用automake做工程管理。
是使用gcc的呀,我现在一般都用开源编译器的。Makefile方便编译,不是为了管理。管理代码可以使用svn。
请问,如何限制log文件大小?
试用了下,发现似乎对某些php网站程序支持的不好。
例如:“http://localhost/type/index.php/archives/1/”这类网址,无法打开。用apache就可以。与php是cgi模式有关么,还是什么其他问题?
补充下,出错提示为:File not found.
呃,毕竟对php的支持是初期的版本,以后会逐步完善。你说的这个问题我还没有遇到过,是index.php/ 这里的缘故??
还没有对log文件大小的限制,不过可以关闭log功能。
19楼的问题我也遇到了,强烈要求小虾修正下。
想了想, 应该是与服务器重写(rewrite)有关。“http://localhost/type/index.php/archives/1/”这类网址需要服务器支持重写
目前还没有做重写模块。能说说
http://localhost/type/index.php/archives/1/
这个URL是如何重写的么?
如果有人使用和支持,我会不断更新下去。
為啥咱那個單位是k而不是b???
to Xiaoxia.俺是菜鸟,什么都不懂,但是在没有重写模块的iis 或者 apache服务器(都没有重写模块),类似http://localhost/index.php/archives/1 是可以的。还有,我用的是wordpress 。
那个不是php的重写 是php的一个url模式 应该叫pathinfo吧
不知道说的对不对 汗。。
搜索后发现是php fastcgi模式中PATH_INFO问题。你的homeserver有点类似nginx,nginx不支持pathinfo模式,类似info.php/hello形式的url会被提示找不到页面。你看看能不能通过正则找出实际文件路径和pathinfo部分的方法,让homeserver支持pathinfo。
这是nginx支持pathinfo模式的方法:http://softendev.blog.techweb.com.cn/archives/6.html
你参考下看看
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.
期待你的新版。之前说的重写问题是这样的,有些服务器不能自动识别请求的是文件还是文件夹,所以访问http://localhost/web时会提示无法显示,而访问http://localhost/web/就可以显示。解决这问题可以利用服务器的重写功能,补全后面的“/”。
楼上的问题已经解决。
至于 http://localhost/index.php/archives/1 , 可以尝试在php.ini里设置 cgi.fix_pathinfo来*暂时*解决此问题。
不错,谢谢了,还有,小虾有没有想过要支持下https?
小虾,能不能自定义添加request header ,因为我的tomcat是在后台的,用homeserver代理之后获取不了ip,能不能像nginx那样,在proxy的时候再添加个request header ,那样tomcat就可以通过header获取真正的ip了.
好的,不难,过两天我就加上去。需要支持自定义HTTP头,给proxy和fcgi都加上。有什么还做得很不足的就告诉我,谢谢!!
数据库怎么用?
小虾,能不能加个功能设置一些特殊文件夹或这文件禁止访问
哦??
to hvder, 你不要把文件放到网页目录不就行了吗?? 就是和网页分离开来。或者起一个特殊的名称~~
你服务器端是用什么语言写的?java,?php?
不明白39楼想表达什么意思,你是不是问HomeServer程序是用什么语言写的呢?(C语言)
还是要问使用HomeServer可以支持什么脚本语言?(PHP、JSP)
又或者是这个小站用什么语言写?(C++)
Xiaoxia,还有个建议,能不能支持gzip压缩?
可以吧。我也有这个打算的,估计不久就会加入。如果谁对压缩算法比较熟悉,给我写一个吧。
to Xiaoxia,对不起,我不会C语言,期待支持gzip压缩。
还有,Xiaoxia 用homeserver wordpress的重写规则如何写?
写个正则表达式,格式在config.xml有例子。
晕。。我对正则一窍不通,看来我只有用nginx了….
用两台机器来测试homeserver,两台都是linux系统,2G内存
webbench -c 30000 -t 60 http://xxx.xxx.xxx.xxx/
但是很快就homeserver进程就挂了,测试了几次都这样,homeserver配置是默认的,
日志里显示走到了work_http
是不是homeserver有bug啊?
还有,Xiaoxia ,有没有想过把这个软件做成GNU开源项目?这样更多人就可以贡献代码了。
to jimku,
请问你使用的是不是最新的版本呢?
我记得之前是有一个这样的bug。
稳定的版本正在写了。。。
嗯,是最新的版本啊!刚才又下载编译了也是一样。难道我人品问题发作?
你使用哪个操作系统平台呢?
奇怪,我这里测试多大的数据都没问题。所以,这个问题不好找。。。
真是我人品问题了。。可能那系统真有问题,换成了centos就没事了。。。。还有,我有个问题要问你,就是url重写的时候能不能判断请求文件或者目录存不存在,如果存在,就不重写,如果不存在,就重写,当然,这是由用户在config.xml写的,像nginx那样,有if语句等等。(*^__^*) 这软件速度还是不错的,很不错,就是不知道你用的是什么开源协议,怕是私有软件,不太敢使用。
刚才又测试了一下,测试静态的没事,但是来跑phpcgi 时候,很快homeserver又挂了,php-cgi的进程倒没挂。终端显示:
fcgi_run /
段错误
在Linux上HomeServer还有很多问题,因为现在出的比比较稳定的版本都是Windows上的。包括本站的HomeServer。我想在Linux下面还需要调试,鉴于本人对Linux下的网络编程不是很熟悉,遇到不少问题,所以需要一段时间来完善它。希望能够理解一下:-) 也希望有人能帮忙检查一下Linux下面的这个问题。
为什么要在windows下开发呢。。。。。
因为我现在测试使用的服务器是朋友提供的windows server,所以优先完善了windows的版本。不过,这个月我也买了一个linux的vps,估计很快我会搭建好平台测试一下,修补一些bug。我也准备在googlecode上增加一个项目。不过名字起什么好呢?
to Xiaoxia:項目名稱就由你來取吧,別忘了告訴項目的地址 ^_^
Linux版本用了一周,还很稳定。目前还没有遇到什么大问题。
很有意思,关注中…
我用的ie7,怎么post过后页面不刷新,看不到我post的内容,非要手工F5一下。
这次刷新了,可能是网速的问题。不是服务器的问题, 呵呵。
嗯。可能线路远,响应慢,偶尔就连不上了。
请教小虾 编译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
学习中……
to 64F, 把xmlparser.c添加进去即可!
小虾 用了 new COM(“Excel.application”) php报崩溃 是不是fcgi模式不支持 ActiveX components ?? 还是homeserver的问题?请指教!
具体如何实现pathinfo?在php.ini里设置 cgi.fix_pathinfo=1还是显示file not found
to 67f,
啊。。。 那是什么东西!! 能够让php崩溃的原因,我现在还没有搞懂!
to hello, 你说的是wordpress ??
类似“http://localhost/type/index.php/archives/7.html”这种url
在php.ini里设置 cgi.fix_pathinfo=1还是显示file not found
这种URL究竟是什么原理呢?
我没用过WordPress,也没用过这种URL。
菜鸟…问下mysql怎么用
俺是绝对的菜鸟,能否给个解包就能用的?不知道如何设置。
mysql在php里设置。
可以用的吧,要在config.xml里配置好。
不知什么时候出新版本,配置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>
To free, 你是使用域名访问还是使用http://localhost来访问的呢?如果使用域名访问但却得到localhost那就很奇怪了。
我是使用的域名访问的,config.xml里还有一点不明白,<list>1</list>的作用是什么?
list是目录列表功能。你说的那个出现localhost的问题我貌似找到了,应该是我的fcgi写的有点问题,已经修正了这个问题。我改天更新一下HomeServer程序,你再下载试试。
谢谢支持哦!
期待新版的homeserver!
嗯,尽量这两天内发布下一个版本。
虾,别越做越臃肿啊。要适可而止啊。gzip可以来找我:)
我也觉得臃肿了很多,所以也觉得不会再扩展下去了 ~~
fcgi好像不支持中文路径
@swchzq:支持呀,你使用什么操作系统?
windows 7
@swchzq:是最新版本的homeserver不? 我记得不同操作系统上的编码问题好像很早就解决了。
粗略看了一下 内存管理器部份其实可以用另一种方法写的 这样的话虽然分配速度可以 但释放太慢
我自己写的代码
__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
请问可以给我一个详细的按照教程么,最好是centos或者debian的,我是菜鸟。。。。。
下个版本可能出个详细点的教程吧!!!
windows下测试 访问到是没问题 就是用 ab压力测试 ab -n 10000 -c 200 http://127.0.0.1:8080/phpinfo.php
到9千多的时候就挂了,用网页访问就 500错误,无法显示了
再就是 日志里 [session.c]session_create(43): failed c->session_num: 30
是什么原因?
这个是因为session的数目有限制。新版本的homeserver已经取消了在请求php页面的时候创建session!你也可以修改代码把创建session的功能去掉,它是用于某些插件的!
好象没有对URL做安全过滤嘛,居然可以通过/../这种形式访问网站根目录的上级目录,被人利用的话,将可访问整个磁盘分区中的文件