在nginx下配置自动虚拟主机

作者 : admin 于 2010年01月09日, 00:33:37
2010
01-9

以前用apache,很多虚拟主机的时候,用 mod_vhost_alias 模块去解决。nginx似乎没有这样的功能。

原来为了做这个功能,我用python写了一堆脚本,去自动管理nginx的配置文件,结果还是不理想。频繁重写配置文件,频繁重启,总会出现点问题。

在nginx的0.8.*下,发现了这样的功能:http://wiki.nginx.org/NginxHttpCoreModule

Since nginx 0.8.25 named captures can be used in server_name:
server {
server_name ~^(www\.)?(?.+)$;
location / {
root /sites/$domain;
}
}

大喜,于是乎做出如下配置,实现了nginx下自动虚拟主机的功能:

  1. server {
  2.      listen       80;
  3.      server_name  ~^(?P<domainname>.+)\.autovhost\.sunboyu\.cn$;
  4.      location / {
  5.          #autoindex  on;
  6.          root   /home/vhost/$domainname;
  7.          index  index.html index.htm;
  8.      }
  9.      access_log /home/autovhost.sunboyu.cn.log main;
  10. }
  11. </domainname>

测试通过。

我的开源虚拟主机管理系统nginx版本指日可待。

改变exec的阻塞模式

作者 : admin 于 2009年12月25日, 10:19:41
2009
12-25

很多操作时间会很长,不能让用户在页面上执行PHP脚本,否则页面会被拖死。

一个不错的方案,就是提交到后台去执行。

linux有个命令 nohup command & 这样就会提交到后台,而终端的用户体会不到程序执行的过程。

原来我使用这种方式 shell_exec( “nohuo php file.php &” ) 进行后台提交,后来发现速度依然不快, 还是被挂起了。查看手册,exec函数有如下提示:

Note: 如果用本函数启动一个程序并希望保持在后台运行,必须确保该程序的输出被重定向到一个文件或者其它输出流去,否则 PHP 会在程序执行结束前挂起。

因此,这样修改就达到了目的:

exec( “nohuo php file.php >> /dev/null &” )

nginx做反向代理的配置

作者 : admin 于 2009年12月16日, 18:39:13
2009
12-16

感谢铎哥的配置,感谢宴哥解决ssl连接的问题。

  1. server
  2.  {
  3.         listen      8181;
  4.         resolver 202.96.64.68;
  5.         location /
  6.         {
  7.             proxy_pass http://$http_host$request_uri;
  8.             proxy_redirect          off;
  9.             proxy_set_header        Host            $host;
  10.             proxy_set_header        X-Real-IP       $remote_addr;
  11.             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  12.             client_max_body_size    10m;
  13.             client_body_buffer_size 128k;
  14.             proxy_connect_timeout   90;
  15.             proxy_send_timeout      90;
  16.             proxy_read_timeout      90;
  17.             proxy_buffers           32 4k;
  18.         }
  19.         access_log /home/proxy.log;
  20.  }

django进程管理器

作者 : admin 于 2009年12月16日, 16:42:49
2009
12-16

nginx+php,php有个进程管理器,为php-fpm,Django没有,网上大概看了看,找出了几段,小改一下,能用了。

  1. #!/bin/bash
  2. siteroot="/home/project/sun"
  3. sitename="http://python.sunboyu.cn"
  4. cd $siteroot
  5. if [ $# -lt 1 ];then
  6.     echo "Usages: server.sh [start|stop|restart]"
  7.     exit 0
  8. fi
  9.  
  10. if [ $1 = start ];then
  11.     isrun=`ps aux|grep "manage.py runfcgi"|grep -v "grep"|wc -l`
  12.     if [ $isrun -eq 1 ];then
  13.         echo $sitename" has running!"
  14.         exit 0
  15.     else
  16.         python manage.py runfcgi method=threaded host=127.0.0.1 port=8000 --settings=settings
  17.         echo $sitename"is running!!"
  18.     fi
  19. elif [ $1 = stop ];then
  20.     djid=`ps aux|grep "manage.py runfcgi"|grep -v "grep"|awk '{print $2}'`
  21.     kill -9 $djid
  22.     echo $sitename" is stop!"
  23. elif [ $1 = restart ];then
  24.     djid=`ps aux|grep "manage.py runfcgi"|grep -v "grep"|awk '{print $2}'`
  25.     kill -9 $djid
  26.     echo $sitename" is stop!!"
  27.     python manage.py runfcgi method=threaded host=127.0.0.1 port=8000 --settings=settings
  28.     echo $sitename" is start!!"
  29. else
  30.     echo "Usages: server.sh [start|stop|restart]"
  31. fi

django+nginx的部分配置

作者 : admin 于 2009年12月16日, 11:26:55
2009
12-16

nginx的配置,特别感谢爱词霸吕同学,发扬了开源共享的精神,大大缩短了我的调试成本。

  1. server {
  2.     listen 80;
  3.     server_name python.sunboyu.cn;
  4.     location / {
  5.           fastcgi_pass 127.0.0.1:8000;
  6.           fastcgi_buffers      16  128k;
  7.           fastcgi_ignore_client_abort  on;
  8.           fastcgi_read_timeout 60;
  9.  
  10.           fastcgi_param PATH_INFO $fastcgi_script_name;
  11.           fastcgi_param REQUEST_METHOD $request_method;
  12.           fastcgi_param QUERY_STRING $query_string;
  13.           fastcgi_param CONTENT_TYPE $content_type;
  14.           fastcgi_param CONTENT_LENGTH $content_length;
  15.           fastcgi_param SERVER_PROTOCOL  $server_protocol;
  16.           fastcgi_param SERVER_PORT      $server_port;
  17.           fastcgi_param SERVER_NAME  $server_name;
  18.  
  19.           fastcgi_pass_header Authorization;
  20.           fastcgi_intercept_errors off;
  21.  
  22.     }
  23. }

同时附上一个额外的文档,nginx变量跟cgi协议的对应关系。
注:在配置中,并不是所有的变量必须加上,而是根据环境选择其中应该有的变量,至于具体加哪些变量,得求助高人了。

  1. #    Fast CGI param reference
  2. #    fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  3. #    fastcgi_param    QUERY_STRING  $query_string;
  4. #    fastcgi_param    REQUEST_METHOD  $request_method;
  5. #    fastcgi_param    CONTENT_TYPE  $content_type;
  6. #    fastcgi_param    CONTENT_LENGTH  $content_length;
  7. #    fastcgi_param    GATEWAY_INTERFACE  CGI/1.1;
  8. #    fastcgi_param    SERVER_SOFTWARE  nginx;
  9. #    fastcgi_param    SCRIPT_NAME  $fastcgi_script_name;
  10. #    fastcgi_param    REQUEST_URI  $request_uri;
  11. #    fastcgi_param    DOCUMENT_URI  $document_uri;
  12. #    fastcgi_param    DOCUMENT_ROOT  $document_root;
  13. #    fastcgi_param    SERVER_PROTOCOL  $server_protocol;
  14. #    fastcgi_param    REMOTE_ADDR  $remote_addr;
  15. #    fastcgi_param    REMOTE_PORT  $remote_port;
  16. #    fastcgi_param    SERVER_ADDR  $server_addr;
  17. #    fastcgi_param    SERVER_PORT  $server_port;
  18. #    fastcgi_param    SERVER_NAME  $server_name;

squid,nginx,apache几个代理软件的比较

作者 : admin 于 2009年09月13日, 11:51:03
2009
09-13

最近一直在研究代理缓存之类的东东,几个软件一直在瞎鼓捣,没弄出个结果,自己也稀里糊涂,总结一下几天折腾的成绩:

在并发上,nginx无疑是老大,做反向代理的时候,没有发现squid的并发方面介绍,所以暂且认为ngnix是老大,apache的稳定性有目共睹,但在并发方面的确不是很如意。

缓存方面:squid,apache都支持diskcache和memcache,根据http的head头来确定是否缓存,nginx不支持缓存,不过我在google开源上看见了新浪的水杨老大的一个东东,给nginx加上了文件缓存,不过没有大规模使用,暂时不把它当做一种解决方案。

在代理和缓存的规则上,apache很强,很强大的重写功能,尤其是强制修改http规则,不过这个功能我始终没有调试成功,no-cache的页面始终无法去缓存。

如果只是做网站的反向代理,负载均衡,nginx感觉要比squid强,性能强悍,配置方便。

如果是做代理+缓存加速,那squid的功能和稳定性还是很好的,毕竟在互联网上大量应用。

apache呢?好像没它的事情了。当然不是,有些地方可以拿他的功能当中间件使用,这个等下次分解。

给.Net程序加个cache

作者 : admin 于 2009年09月06日, 22:47:07
2009
09-6

朋友说一个.net的网站总被dos攻击,让给个方案,还不能贵了。听对方描述一番,感觉是iis的垃圾造成连接数的问题。

很少研究iis,但我知道linux下很多软件可以很好的提升并发连接数,于是出一简单方案去尝试。

未命名-1

apache自动生成目录文件列表配置

作者 : admin 于 2009年07月22日, 19:13:00
2009
07-22

由于种种原因,服务器给卖掉了,因此,我做的源码目录也就没了。这里把该目录的配置属性介绍一下:

  1. <directory /home/sunboyu/www_source.sunboyu.cn>
  2.         MaxConnPerIP 1
  3.         ReadmeName foot.html        #页面的头
  4.         HeaderName top.html          #页面的脚
  5.         IndexIgnore top.html foot.html    #列目录的时候,忽略这些文件
  6.         ServerSignature Off       #关闭服务器标志
  7.         IndexOptions FancyIndexing VersionSort FoldersFirst SuppressLastModified NameWidth=* Charset=UTF-8
  8.         Options FollowSymLinks
  9.         Options +Indexes
  10.         AllowOverride all
  11.         Order deny,allow
  12.         Allow from all
  13.  </directory>

FancyIndexing 打开列表功能

VersionSort 同一文件不同版本分类列出

FoldersFirst 文件夹优先

SuppressLastModified 禁止列出最后修改时间

NameWidth=* 文件名长度 *当然是全部显示

Charset=UTF-8 页面输出编码

AddIcon /other/icons/exe.gif .bin .exe 给exe bin扩展名添加exe.gif图标

ScanHTMLTitles 如果有html文件,则度html的title为描述

Linux配置几个关键点需要注意

作者 : admin 于 2009年07月15日, 04:30:16
2009
07-15

前两天机房断电,弄得兄弟我太郁闷。机房网管居然直接硬关机,这么来回弄了两三次,问技术,不是那一拨,问销售,没啥解释,人家说不知道……

一分钱一分货有道理,结果我机器挂了,机房那边说linux启动,中间卡死了。因为那个机房没有懂linux的网管,所以,我开车(捷安特)去了机房。

后发现,其实没什么问题,卡在了一个依赖python的启动进程上,另外mysql貌似也没有启动。

我用ubuntu live版的cd进入系统(有点像win下的PE的思路),修改了python设置:

原来python默认是2.3版本,我升级到了2.5,默认关联的是2.5版的,但这样会有一些问题,比如yum对版本依赖性很强,修改后则其不工作,所以我修改了yum的配置,让其寻找2.3版本。而另一下对python有依赖的模块我却没有发现,造成down机后无法启动。

mysql无法自启动,没找出是哪的问题,不过,我在ubuntu下加载了原来的分区,修改了rc.local配置,灭了mysql,系统顺利启动。

总结:ubuntu live cd的作用跟我修理xp时候的pe功能相似,系统挂掉的时候修改个配置啥的还是很好用的。

除非很了解软件之间的依赖性,否则不要随意修改那些配置,否则会造成依赖性问题。

事发现场图片

server-mysql

Centos4.7(Linux)下架设BT服务器

作者 : admin 于 2009年06月09日, 13:21:02
2009
06-9

穷人,就得想穷人的办法,带宽被坑,严重缩水,为了分享大量资源,最终决定使用bt发布一些大资源。

网上找了很多BitTorrent架设btserver的教程,不是版本不对,就是安装复杂,所以,我找了个比较老的版本,一次装上调通。

我使用了BitTorrent-3.9.1,官方下载地址为 http://download.bittorrent.com/dl/archive/BitTorrent-3.9.1.tar.gz

防止墙,我传到本地 bittorrent-3.9.1.tar.gz

首先你服务器要预装python,centos4.7预装python2.3,我预留,但服务器环境python使用了2.5版,2.3不能删,yum对版本依赖性比较强,还得预留。

解压 BitTorrent-3.9.1.tar.gz 后进入文件夹,按照说明进行安装:

  1. python setup.py install

即可安装。当然中间会遇到各种问题,大部分是关于python版本或者依赖的,错误可以跟帖发一下,一起解决。

好了,首先启动服务器:

  1. python bttrack.py --port 6969 --dfile dfile.log

其中port参数是服务的端口(一定记得调一下防火墙),dfile是日志

然后打开 http://ip:6969/ 如果显示

BitTorrent download info

* tracker version: 3.9.1
* server time: 2009-06-09 05:12 UTC

则证明服务启动成功。

下面创建一个种子文件

  1. btmaketorrent.py http://bt.sunboyu.cn:6969/announce /root/soft/xmlrpc-epi-0.54.tar.gz

这样,就针对 /root/soft/xmlrpc-epi-0.54.tar.gz 文件创建了一个种子文件,使用的track地址是 http://bt.sunboyu.cn:6969
生成的种子位置,是这样:如果针对一个文件,则在文件同一文件夹下,如果针对文件夹,则在文件夹同级目录。

然后发布一个种子(很多人可能对种子这个概念不了解,可以查看资料,关于bt协议的)

  1. btdownloadheadless.py /root/soft/xmlrpc-epi-0.54.tar.gz.torrent --save_as /root/soft/xmlrpc-epi-0.54.tar.gz

发布种子有很多参数要限制,可以看命令具体参数,比如占用的端口跟限速等。

我测试了一下,linux发布的文件,就可以下载了。这只是服务器建立的阶段,要管理,还得写好多管理脚本,否则文件多的话,手工可受不了。

另外还有好多的开源web监控、管理、发布的系统,大家可以下来搭建尝试。欢迎交流。

相关资料 http://zh.wikipedia.org/wiki/BitTorrent

 Page 1 of 7  1  2  3  4  5 » ...  Last »