'Unix/Linux' Category

  • Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践

    July 21, 2011

    Nginx团队维护的PPA源带有PHP 5.3.x的子源,更新迅速,现在在Ubuntu部署Nginx+PHP环境真是太容易了(虽然LAMP更容易,一句apt-get install lamp-server^搞定,别漏了最后的上尖号)。像以前那样跑cgi-fcgi简直弱爆了。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 apt-get install python-software-properties add-apt-repository ppa:nginx/stable add-apt-repository ppa:nginx/php5   #Ubuntu 10.10 以后可不需添加以上源   apt-get update apt-get install nginx apt-get install php5-cgi php5-mysql php5-fpm php5-curl php5-mcrypt   #或者你需要更齐全的php包: #aptitude install php5-cgi php5-mysql php5-fpm php5-curl php5-gd php5-idn php-pear php5-imagick [...]

  • nginx+uwsgi架设自用Mercurial hg仓库:hgwebdir

    March 11, 2011

    Mercurial/hg是分布式版本管理工具之一,如google code等公共代码服务都直接支持。不过公共服务通常都有如公开开源、空间大小等等的限制,如果特殊情况,需要自己在VPS上假设一套,也不太难。 如果单独一个hg仓库,直接运行hg serve就已经是在线仓库,用nginx做的http_proxy反向代理就够了,各种功能齐全。但是要host多个hg仓库,需要用hgwebdir。 Ubuntu当中安装的mercurial已经包含了架设仓库所用的程序,包括cgi/fcgi/wcgi的,主接口在/usr/share/doc/mercurial-common/examples下的hgwebdir.(ws|(f)c)gi。虽然其中的wsgi有效的只有三行。 Mercurial官方Wiki上主要介绍了用apache2来跑cgi方式的仓库,但是作为python的程序,wsgi才是最原生的嘛。用Nginx+uwsgi的方式,资源占用、响应效率等,都要比apache + cgi靠谱。 Nginx+uwsgi的方式很普遍,参见本博客之前的MoinMoin 与 Nginx, fastcgi 与 uwsgi 的配置一文。 但是因为uwsgi处于快速开发过程当中,ppa的打包也还不十分成熟,里面的路径跟以前有些不一样了。 add-apt-repository ppa:nginx/stable add-apt-repository ppa:uwsgi/release apt-get update apt-get install nginx uwsgi-python python-virtualenv mercurial   mkdir -p /var/www/hgwebdir virtualenv /var/www/hgwebdir/python-home   cat >/var/www/hgwebdir/hgwebdir_wsgi.py << EOF from mercurial import demandimport; demandimport.enable() from mercurial.hgweb.hgwebdir_mod import hgwebdir   class hgwebdir_with_fixed_staticfile(hgwebdir): def __call__(self, env, respond): [...]

  • Manage multiple wordpresses with new Vimpress

    March 10, 2011

    Update Vimpress 已经升级到2.x版本,使用、配置都有改进,请关注在vim.org的插件页面: Vimpress had been updated to 2.x, usage and configurations are now different, read the officle page in vim.org: http://www.vim.org/scripts/script.php?script_id=3510 If you noticed Vimpress before and got more than one wordpress to write, must glad now to know this VimRePressed support multiple configs and swith freely. The new VimRePressed (Version: 1.2.0) Changes: Add: [...]

  • 使用wp-super-cache插件静态缓冲的nginx rewrite规则

    March 3, 2011

    WordPress的缓冲插件wp-super-cache默认支持apahce的缓冲方式,在生成了静态页面数据后,通过.htaccess的规则直接让apache读取静态文件,完全不经过PHP,可以很大的提高博客的页面性能。 但是Nginx的改写规则就没这么容易让代码来配置了,虽然wp-super-cache的第二种缓存方式就是为这种使用环境设计,但实际上是用了PHP来提供静态数据了,在使用apache benchmark压力的时候,php-cgi依然占很高的CPU占有率。 通过编写nginx的rewrite规则还是可以让nginx直接读取静态文件,参考来自Code Exchange: nginx rewrite rules for WordPress + WP Super Cache,这里的配置被很多地方引用过,但实际尝试使用过程看到那里面的代码还需要微调。 server { listen 80; server_name apt-blog.net; root /var/www/pt-sites/wordpress; index index.html index.htm index.php; location / { # enable search for precompressed files ending in .gz # nginx needs to be complied using –-with-http_gzip_static_module # for this to work, comment out if using [...]

  • 黑莓续断膏 MDS服务器的Linux版本

    February 23, 2011

    黑莓系统5.0以上系统在没有购买使用黑莓网络服务的手机上的断网现象一直比较恼人。几个月前有人做出了“黑莓续断膏”,原理是自架一台服务器,程序模拟MDS服务的简单回应,可以忽悠手机继续在线。 5.0系统断网自动修复程序黑莓断续膏(AntiBrokenNet!) BrokenNetFixup断网修复工具 区别是前者后台自动修复,后者要手动运行修复。 从网友的留言看出,虽然软件虽然有效,但没有稳定的服务器,软件刚出现时候确实有一批地址提供了服务,但很快就失效了。北京小C这里提供了模拟MDS服务器的程序,是VC写的一个小UDP服务器,虽然原理很简单,但用一台Windows的服务器来跑成本太高了,当然很难稳定提供。 其实服务只是很简单的几行代码,稍微改了一下就可以在Linux下面运行。一台低端Linux VPS的费用大概一年200RMB,这个费用对大多数人来说都不是什么问题的,所以推荐想要稳定防断网服务器的人去弄一台,一台可以很多人共享了。VPS侦探 、Lowendbox上有很多这样的推荐。 Linux版本的MDS服务器代码在Google Code上,可以直接下载。 在服务器(Debian/Ubuntu系统)上编译并运行: 1 2 3 4 5 sudo apt-get install build-essential wget http://ptcoding.googlecode.com/svn/trunk/mds_server.c gcc -Wall -o mds_server mds_server.c sudo cp mds_server /usr/local/bin/ /usr/local/bin/mds_server 现在可以设置手机的续断软件使用这个服务器来连接断网测试了,手机连接的时候,会实时打印出手机的连接信息跟PIN码。 当然最好把程序加入系统自动启动: sudo touch /var/log/mds_server.log sudo chown nobody /var/log/mds_server.log sudo sed -i '/^exit 0/isu nobody -c "nohup /usr/local/bin/mds_server >>/var/log/mds_server.log &"' /etc/rc.local 这样程序会在系统启动后自动在后台运行,运行的LOG会记录在/var/log/mds_server.log文件当中。 下面也无偿提供一枚MDS服务器,就是跑在我的Linux服务器上的。 [...]

  • MoinMoin 与 Nginx, fastcgi 与 uwsgi 的配置

    October 13, 2010

    给自己架了个Wiki http://wiki.apt-blog.net作为自己的知识管理工具。虽然这个博客本来就是工具之一,也累积了快两年了,但经常碰到有些小东西,不值得为之写篇博客,很有用,但用完就忘记。个人wiki适合做写细小的笔记,当累积一定的时候还可以整理成博客。 Wiki我选择了用Python的MoinMoin,一定程度上受CPYUG社区 ZoomQuiet 大妈的推荐影响,首次试用感觉非常impresive,所以就定了。再加上 GraphViz 工具的支持,实在的强大。 在vps上服务,肯定是无视apache的,内存有限。之前架设过用来上Twitter奶瓶腿,是Nginx + php-cgi的方案,nginx是必须的。 Python跟web前端的架构方式有太多选择了,五花八门,MoinMoin的发行包里面都提供了moin.cgi moin.scgi moin.ajp moin.fcgi moin.wsgi等多种启动方式。MoinMoin里面全部通过内置的flup作为中间件提供这些接口,目前我仅尝试使用了fastcgi和wsgi。 虽然解压了moin的源码包就可以直接运行里面的wikiserver.py来本地访问了,但在服务器上通常是由nginx/lighttpd等服务来综合转发。php的话是通过spawn-fcgi启动一些php-cgi的进程,服务器接受到动态的请求就通过本地socket跟php-cgi通讯,返回的结果展现回给客户。php-cgi是使用FastCGI协议的。 MoinMoin 源码当中wiki/server/moin.fcgi就是一个类似php-cgi功能的fastcgi服务,类似地可以使用spawn-fcgi来启动moin.fcgi,作为后端的处理进程。 Running MoinMoin Wiki with Nginx via FastCGI and Flup该文章很形象解释了fastcgi的角色,以及提供了一段很方便的服务脚本来启动spawn-fcgi。 Client ----> Nginx Web Frontend -----------+ | fastcgi_pass \|/ +-------------------------+ moin.fcgi | spawn-fcgi-moin.socket | spawn-fcgi ---------------> | or | | localhost:port | +-------------------------+ 但是文章当中的nginx配置不完整,而且复杂了,这是我的配置: server { listen 80; [...]

  • OpenVPN连接后自动替换DNS服务器

    October 7, 2010

    因为国内的DNS服务器存在污染问题,用VPN后都不愿意用国内的DNS服务器;但是如果常用8.8.8.8等,又导致访问国内的cdn时候返回线路,导致访问缓慢;这个问题不好解决,相对好点的方法在连接vpn前使用isp提供的dns,而连接后替换成外国的dns。 但是OpenVPN的--dhcp-option配置,对非Win32的客户端是无效的,只能考虑执行自定义脚本来完成: vpnup.sh 1 2 3 4 5 6 7 8 9 #!/bin/bash RESOLVE=/etc/resolv.conf FOREIGNDNS1='4.2.2.1' FOREIGNDNS2='4.2.2.2' DNSMARK='_MK'   sed "s/^nameserver/#$DNSMARK nameserver/" -i $RESOLVE echo "nameserver $FOREIGNDNS1" >> $RESOLVE echo "nameserver $FOREIGNDNS2" >> $RESOLVE vpndown.sh 1 2 3 4 #!/bin/bash RESOLVE=/etc/resolv.conf DNSMARK='_MK' sed -e '/^nameserver/d' -e "s/^#$DNSMARK //" -i $RESOLVE 很简单,就是使用sed来完成/etc/resolv.conf文件的内容替换。 实际上我还使用了chnroutes的脚本生成的国内路由表,上面两段只是分别贴到其中的vpnup/vpndown当中。

  • Nginx与奶瓶腿(Dabr)

    September 27, 2010

    上个月买了台在美帝的超廉价vps,基本上跑跑openvpn什么的,一个月下来流量一个百分点都没过,于是试试架点别的服务,先试试奶瓶腿。 VPS的内存就是钱。虽然这台VPS有384M内存,不算小,但apache什么的内存大户还是不考虑了,直接上nginx+fastcgi。 此前有做过这个组合的笔记《简单配置nginx+fastcgi后端的WordPress服务器》,不做博客的话mysql就省掉了。 但是启动php-cgi是个问题,还好有人写了不错的启动脚本/etc/init.d/php-fastcgi,Nginx, PHP and a PHP FastCGI daemon init script。而这篇How to set up nginx with PHP on Ubuntu的脚本稍微简化一点,而且是用Unix Socket来绑定nginx跟fastcgi的通讯。这样就免除了lo interface的依赖。 假设奶瓶Dabr是没什么难度的事情,奶瓶腿的话,我从项目的SVN checkout出源码后,下载 user_oauth.php并改名覆盖原来的common/user.php,以支持后台自动oauth登录Twitter;然后配置到nginx的虚拟主机目录下,基本就结了。 当然兽兽Showfom的Dabr教程里面提到了使用nginx的伪静态改写规则,这必须的(跟用wordpress一样): 1 2 3 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; } 最后遇到的问题是,访问奶瓶腿的Setting,保存后502错误,查看error.log看到报的是: 24219#0: *40 upstream sent too big header while reading response header from upstream 直接Google找到答案,就是调大nginx的fastcgi缓冲区。 1 2 [...]

Page optimized by WP Minify WordPress Plugin

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org