Debian或Ubuntu运行php5-fpm报错connect() to unix:/var/run/php5-fpm.sock

在ubuntu12.04中安装配置LNMP时 出现在php5-fpm的错误

1
2
3
4
5
6
7
8
2013/04/26 04:01:05 [crit] 6119#0:
 *4 connect() to unix:/var/run/php5-fpm.sock failed
(2: No such file or directory) while connecting to upstream,
client: 159.53.110.141,
server: 216.238.88.42,
request: "GET / HTTP/1.1",
upstream: "fastcgi://unix:/var/run/php5-fpm.sock:",
host: "216.238.88.42:9090

nginx中是这样配置的

1
2
3
4
5
6
7
8
9
10
11
location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

我个人的配置是想用sock的方法 毕竟sock方式对于高并发来说 还是比使用cgi方式好的
问题其实出现在 fastcgi_pass得配置上面。在ubuntu 12.10安装了php5-fpm之后。我们可以去

1
/etc/php5/fpm/pool.d/www.conf

里面找到这样一段代码:

1
listen = 127.0.0.1:9000

在这上面代码的下面添加一行:

1
listen = /var/run/php5-fpm.sock

保存后启动php5-fpm

1
/etc/init.d/php5-fpm restart

这时就可以正常访问了

另外有可能是sock文件的执行权限有问题,对sock文件执行

1
chmod 777 php5-fpm.sock

再启动php5-fpm问题解决。

linux zip 命令详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
功能说明:压缩文件。
语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>]
补充说明:zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。
参 数:
-A 调整可执行的自动解压缩文件。
-b<工作目录> 指定暂时存放文件的目录。
-c 替每个被压缩的文件加上注释。
-d 从压缩文件内删除指定的文件。
-D 压缩文件内不建立目录名称。
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-F 尝试修复已损坏的压缩文件。
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
-h 在线帮助。
-i<范本样式> 只压缩符合条件的文件。
-j 只保存文件名称及其内容,而不存放任何目录名称。
-J 删除压缩文件前面不必要的数据。
-k 使用MS-DOS兼容格式的文件名称。
-l 压缩文件时,把LF字符置换成LF+CR字符。
-ll 压缩文件时,把LF+CR字符置换成LF字符。
-L 显示版权信息。
-m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
-n<字尾字符串> 不压缩具有特定字尾字符串的文件。
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
-q 不显示指令执行过程。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-S 包含系统和隐藏文件。
-t<日期时间> 把压缩文件的日期设成指定的日期。
-T 检查备份文件内的每个文件是否正确无误。
-u 更换较新的文件到压缩文件内。
-v 显示指令执行过程或显示版本信息。
-V 保存VMS操作系统的文件属性。
-w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。
-x<范本样式> 压缩时排除符合条件的文件。
-X 不保存额外的文件属性。
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
-z 替压缩文件加上注释。
-$ 保存第一个被压缩文件所在磁盘的卷册名称。
-<压缩效率> 压缩效率是一个介于1-9的数值。
linux unzip 命令详解
功能说明:解压缩zip文件
语 法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>]unzip [-Z]
补充说明:unzip为.zip压缩文件的解压缩程序。
参 数:
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
-f 更新现有的文件。
-l 显示压缩文件内所包含的文件。
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t 检查压缩文件是否正确。
-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 执行是时显示详细的信息。
-z 仅显示压缩文件的备注文字。
-a 对文本文件进行必要的字符转换。
-b 不要对文本文件进行字符转换。
-C 压缩文件中的文件名称区分大小写。
-j 不处理压缩文件中原有的目录路径。
-L 将压缩文件中的全部文件名改为小写。
-M 将输出结果送到more程序处理。
-n 解压缩时不要覆盖原有的文件。
-o 不必先询问用户,unzip执行后覆盖原有文件。
-P<密码> 使用zip的密码选项。
-q 执行时不显示任何信息。
-s 将文件名中的空白字符转换为底线字符。
-V 保留VMS的文件版本信息。
-X 解压缩时同时回存文件原来的UID/GID。
[.zip文件] 指定.zip压缩文件。
[文件] 指定要处理.zip压缩文件中的哪些文件。
-d<目录> 指定文件解压缩后所要存储的目录。
-x<文件> 指定不要处理.zip压缩文件中的哪些文件。
-Z unzip -Z等于执行zipinfo指令

范例:
zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。
1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:

1
zip -r yasuo.zip abc.txt dir1

2.我下载了一个yasuo.zip文件,想解压缩:

1
unzip yasuo.zip

3.我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们:

1
unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。
4.我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:

1
unzip -v large.zip

5.我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了

1
unzip -t large.zip

6.我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

1
unzip -j music.zip

Linux常用知识杂汇

操作系统环境Ubuntu
笔记本触摸板
对于使用笔记本的情况,控制触摸板,需要root权限
关闭笔记本触摸板:

1
sudo rmmod psmouse

开启笔记本触摸板:

1
sudo modprobe psmouse

笔记本亮度
对于使用笔记本的情况,开机时调节屏幕亮度
编辑rc.local文件

1
sudo vim /etc/rc.local

加入如下指令,500是亮度值,具体根据设备不同,亮度值会有不同的设置

1
echo 500 > /sys/class/backlight/intel_backlight/brightness

可以在终端中直接输入如上命令,更改亮度值,觉得合适的时候,将此亮度值作为开机启动的设置亮度的默认值

文本编辑器
较好的文本编辑器sublime-text,目前版本2
sublime-text比较特别,原则上是收费的,但是不限制使用,偶尔会弹出让使用者购买正版认证,不买可以继续用
目前作为linux下的文本编辑器,在开发中使用个人电脑编辑程序或者阅读程序推荐使用sublime-text
安装需要使用ppa

1
2
3
4
sudo add-apt-repository ppa:webupd8team/sublime-text-2
sudo apt-get update
sudo apt-get install sublime-text-2-beta
sudo apt-get install sublime-text-2-dev

等待安装结束

修复grub
需要使用Live CD,可以用usb存储器虚拟一个,以便不时之需
进入Live CD,打开终端,开启root权限

1
sudo -i

查看分区

1
fdisk -l

找到你的ubuntu硬盘分区,如sda*
挂在你的ubuntu硬盘分区到/mnt文件夹

1
mount /dev/sda* /mnt

安装grub到ubuntu硬盘分区

1
grub-install --root-directory=/mnt /dev/sda

重启系统

1
reboot

如果之前硬盘上有引导记录,那么恢复之后应该会有正常的启动项列表

如果grub无记录
提示符号grub>需要手动配置启动镜像,并加载

1
2
find /grub/core.img
find /boot/grub/core.img

找到所属硬盘分区,如(hd n,n)

1
2
3
4
root (hd n,n)
kernel /grub/core.img
kernel /boot/grub/core.img
boot

boot成功进入ubuntu

1
sudo grub-install /dev/sda

更新grub菜单

1
sudo update-grub

查看Linux硬件信息

内存型号

1
dmidecc -t memory

CPU型号

1
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

CPU核心

1
cat /proc/cpuinfo | grep physical | uniq -c

机器支持的运算位数

1
getconf LONG_BIT

查看CPU是否支持LONG MODE,64位运算

1
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l

结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit

查看当前操作系统内核信息

1
uname -a

查看当前操作系统发行版信息

1
cat /etc/issue | grep Linux

查看机器型号

1
dmidecc | grep "Product Name"

查看网卡信息

1
dmesg | grep -i eth

测试硬盘IO

1
2
dd if=/dev/zero of=test bs=64k count=16k oflag=dsync
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync

UB测试,权威的Unix性能测试,需要获取测试脚本,非系统原生

1
2
wget http://www.CTOHome.com/linux-vps-pack/unixbench.sh;
sh ./unixbench.sh

使用dotdeb软件源安装LNMP

系统环境:Debian 6

默认Debian 6 里面没有vim,可以首先安装一下vim

1
apt-get install vim

然后打开软件源文件

1
vim /etc/apt/sources.list

在文件末尾加入如下内容

1
2
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all

先更新一下apt

1
apt-get update

会有错误提示,因为没有密钥

下载密钥,并且添加

1
2
wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -

再更新一下apt

1
apt-get update

没有错误提示,成功了
如果出现提示 …the public key is not available: NO_PUBKEY …错误执行下面这条
apt-get install debian-keyring debian-archive-keyring

有了Dotdeb源之后,安装LNMP就很简单了,而且不会出错
安装php5和常用组件:

1
2
3
apt-get install build-essential
apt-get install php5-common
apt-get install php5-cli php5-suhosin php5-fpm php5-cgi php5-mysql

安装过程可能出错,提示xmllib2版本问题,系统默认源可能不会更新至支持php组件的版本,
http://xmlsoft.org/sources/中选择依赖的最低版本,如2.8.0
解压缩,进入目录后编译

1
2
3
4
5
$ ./configure
make
make check
make install
ldconfig -v|ldconfig -v|grep libxml2

安装xmllib2.8.0之后可以继续安装php
需要curl支持的,需要单独安装

1
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

需要memcache支持的,需要单独安装

1
sudo apt-get install php5-memcache memcached

安装mysql:

1
apt-get install mysql-server mysql-client

安装过程中会提示设置mysql root帐号的密码,输入两次,回车即可
修改mysql配置文件,去掉innodb,这样可以节省不少内存

1
vi /etc/mysql/my.cnf

增加下面语句

1
skip-innodb

保存后,mysql重启一下就生效
重启mysql可以使用

1
service mysqld restart

或者

1
2
$mysql_dir/bin/mysqladmin -uroot -p shutdown
$mysql_dir/bin/mysqld_safe &amp;

安装nginx:

1
apt-get install nginx

安装过程很快,版本更新速度几乎与官网一致
备注:使用Wordpress程序开启permalinks功能需要在nginx配置文件中添加一句

1
try_files $uri $uri/ /index.php?$args;

例如:

1
2
3
4
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}

然后重新载入

1
nginx -s reload

至此LNMP所需软件全部安装完毕。

备注:可能很多时候还需邮件服务,需要安装sendmail
首先安装支持

1
apt-get install sendmail-bin

然后安装sendmail

1
apt-get install sendmail

php发邮件的功能就可用了

安装GD库

1
apt-get install php5-gd

php GD库支持

后记:使用dotdeb会使安装很多软件变的简单,并且很少出错,使用原生debian系统目前笔者尚未发现有任何异常。使用ubuntu的用户也可以使用,介于ubuntu发行版和衍生版众多,不敢妄下结论,只要apt不出问题一般使用dotdeb源安装的程序不会有什么问题。

mongodb正则表达式应用

mongodb中完全支持正则表达式,一般查询中可以使用操作符$regex

1
2
db.lnmopy.find({ 'name': /*.lnmopy.com/i } );
db.lnmopy.find( { 'name': { $regex: '*.lnmopy.com', $options: 'i' } } );

以上两种完全等价,可以直接对域(field)即上例中的’name’键,使用正则表达式或者使用操作符,可选项目是i,即忽略大小写。
关于正则可选项,mongodb和其他语言标准正则稍有不同,有自己的标准。
$options的可选值
i 忽略大小写;
m 多行查找,如果内容里面不存在换行符号(例如 \n)或者构造上没有(start/end),该选项没有任何效果;
x 空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两头,也都被忽略;
s 圆点元字符(.)匹配所有的字符,包括换行符

假设我们有一个数据库名为mongoDemo

1
use mongoDemo

数据库中有个集合名为lnmopy

1
db.lnmopy.find()

有如下数据:

1
2
3
{ "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "www.lnmopy.com", "site" : "website", "tag" : "l,n,m,o,p,y"}
{ "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "demo.lnmopy.com", "site" : "unknown", "tag" : "d,e,m,o"}
{ "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "welcome.lnmopy.com", "site" : "website", "tag" : "w,e,l,c,o,m,e"}

mongodb的正则表达式仅支持i和m的javascript原生写法(如/*.lnmopy.com/i)。如果要是用x和s选项就必须使用“$regex”操作符并在“$options”中指定选项。
使用正则表达式的更新操作:

1
db.lnmopy.update( { 'name': /*.lnmopy.com/i }, { $set: { 'site':'www.lnmopy.com' } } );

意思是,查找当前数据库中名为“lnmopy”的集合中“name”字段符合“/*.lnmopy.com/i”正则的条目,并只将“site”字段更新为“www.lnmopy.com”,该条更新语句仅更新一条数据,如果不是用$set,那么这条记录就会只剩下你更新的部分和默认的ObjectId,可以说是替换了。如果想替换所有,可以加入参数:

1
db.lnmopy.update( { 'name': /*.lnmopy.com/i }, { $set: { 'site':'www.lnmopy.com' } } , false, true);

参数有顺序,false是upsert,如果没有就插入新的。true就是multi多条记录更新,所有匹配到的结果。或者直接指定{ multi: true }:

1
db.lnmopy.update( { 'name': /*.lnmopy.com/i }, { $set: { 'site':'www.lnmopy.com' } } , { multi: true });

这样就把所有的“site”字段全都更新为“www.lnmopy.com”了。

我设计的字段“tag”有个缺陷,就是本来是一个单词,现在每个字母都被“,“分隔开了。实际工作中也存在类似问题,由于批量转换数据,或者其他程序操作不当,或者业务需求更改等等原因需要对某些字段进行正则批量处理,mongodb的一般更新方法是不能实现的,这时就需要使用javascript语句。

正则表达式替换查询结果中’,’为”

1
db.lnmopy.find().forEach( function(u) { u.tag = u.tag.replace(/\,/, ""); db.lnmopy.save(u); } );

最后执行

1
db.lnmopy.find()

显示如下数据:

1
2
3
{ "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "www.lnmopy.com", "site" : "www.lnmopy.com", "tag" : "lnmopy"}
{ "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "demo.lnmopy.com", "site" : "www.lnmopy.com", "tag" : "demo"}
{ "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "welcome.lnmopy.com", "site" : "www.lnmopy.com", "tag" : "welcome"}

后记:javascript是mongodb的一大特色,也是优势,很多复杂的查询和处理都可以用javascript实现,要注意的是,javascript的工作效率较低,原则上应该尽量避免在主要业务逻辑中大量使用。类比的讲,javascript就相当于oracle的存储过程,介于10gen(mongodb的开发团队)是由oracle出来的这点,就一点也不奇怪了。关于如何使用更复杂的javascript,以后会写到。

服务器被黑了,处理SSH-SCAN

为一个甲方做工程的时候,一天发现测试服务器打开网页很慢,ssh登录到测试服务器

1
ps -e

一看全是ssh-scan进程,才知道是被黑了,ssh-scan运行消耗了大量的系统资源,导致程序变慢,先处理掉它。

1
cd /

发现系统根目录下最前面多出来个没有名字的文件夹,这个如果心粗点就发现不了,因为终端命令行里面前面就是空的,只不过占用了一个文件夹的位置,介于有些时候攻破你服务器linux内核的人个人喜好问题,他可能会将ssh-scan源程序放在不同的地方,通用的做法如下:

1
ps -ef|grep ssh-scan

找到ssh-scan对应的进程号PID,如有一个是19087。
进入到/proc/PID对应的目录

1
cd /proc/19087
1
ls -al

查看cwd和exe对应的选项,找到应用ssh-scan程序所在目录,我的情况是在”/”系统根目录下。
首先,将其进程全部杀死

1
killall -9 scanssh

然后,删除对应目录

1
rm \  -fr

注意\后面是个空格,一般你按Tab键能够提示并补全,也许有的名字不是空格,而是别的字符类型或者特殊符号,这样需要ls出来,然后复制其名字,必要时将名字用引号括起来。
最后,将ssh用户密码全部修改。

1
netstat -an|grep 22

查看输出,仍然有很多连接,reboot服务器,系统运行正常。

后记:虽然处理完了,但毕竟liunx内核被攻破了,这样最好是紧急处理完之后,备份全部数据,然后重装操作系统。预防方法就是定期修改密码,密码不要简单,越复杂越好,这样对于猜密码或者穷举的攻击方式可以有效预防。另外也可使用现成的软件或者脚本来预防暴力破解,原理是拒绝ssh验证访问失败的ip,阈值自己设置,比如5次,就是5次访问失败以后不接受该ip访问ssh的22号端口请求。还有种方式就是更改ssh默认端口,一般ssh-scan的目标都是22号端口,如果你改变ssh请求端口,就意味着很少会成为攻击目标了。

Ubuntu/Debian安装Nginx和upstream-fair

在ubuntu或debian上安装nginx,可以直接采用使用指令安装

1
apt-get install nginx

假定工作操作目录为用户根目录即~或者/home/uname(当前你是uname用户),如果你是root用户,那么你的根目录应该是/root

获取nginx及安装依赖包
使用官方源安装可能不能满足选择版本的需求,手动安装nginx首先安装依赖包
apt-get指令需要root权限,确保你使用root用户或者获得root权限

1
2
3
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libpcre3 libpcre3-dev libssl-dev libxslt-dev libgd2-xpm-dev libgeoip-dev

nginx源码可以访问nginx官方网站的下载页面:http://nginx.org/en/download.html
比如选择 Stable version nginx-1.2.7
复制下载地址,然后使用命令下载tar包

1
wget http://nginx.org/download/nginx-1.2.7.tar.gz

解压缩

1
tar zxvf nginx-1.2.7.tar.gz

upstream-fair模块
upstream-fair是比内建的负载均衡更加智能的负载均衡模块,一般google关键词nginx-upstream-fair可以找到相关资源和文章,这里不详述了。它采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。
可以通过github获取,地址是https://github.com/gnosek/nginx-upstream-fair
googlecc上也有http://wcoserver.googlecc.com/files/gnosek-nginx-upstream-fair-2131c73.tar.gz
注意:这个版本可能已经过时,推荐使用github上的master zip包
获取到nginx-upstream-fair-master.zip或者gnosek-nginx-upstream-fair-2131c73.tar.gz后解压缩

1
2
unzip nginx-upstream-fair-master.zip
tar zxvf gnosek-nginx-upstream-fair-2131c73.tar.gz

为了方便起见,把加压缩后得到文件夹更改一下名字,比如upstream

1
2
mv nginx-upstream-fair-master upstream
mv gnosek-nginx-upstream-fair-2131c73 upstream

如果你喜欢用rename也行,具体可以自己操作。

编译安装nginx
接下来进入解压缩之后的目录

1
cd nginx-1.2.7/

配置参数

1
./configure --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-ipv6 --with-mail --with-mail_ssl_module --add-module=/home/uname/upstream/

注意最后一个参数–add-module=/home/uname/upstream/的路径,之前假定的工作目录为/home/uname(uname为你的用户根目录),我们下载的gnosek-nginx-upstream-fair压缩包在这里解压并且更名未upstream,此处填写绝对路径。
配置结束应该不会报错,我在ubuntu12.04和debian6上都做过安装,并且作为开发和生产环境一直在运行,如果有问题可以联系我。
接下来编译安装

1
2
sudo make
sudo make install

等待编译结束,安装完成
执行文件被安装在/etc/nginx/sbin/nginx,如果你想安装到/usr下可以更改前面的配置参数,这里可以这样在/usr/sbin中建立软链接

1
2
cd /usr/sbin
sudo ln -s /etc/nginx/sbin/nginx

然后你在任意位置执行

1
nginx -v

应该能看到nginx版本信息

1
nginx version: nginx/1.2.7

查看详细配置信息

1
nginx -V

显示详细信息

1
2
3
4
nginx version: nginx/1.2.7
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-ipv6 --with-mail --with-mail_ssl_module --add-module=/home/uname/upstream/

附一个nginx使用upstream-fair的配置文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
upstream your-site {
    server 127.0.0.1:5550;
    server 127.0.0.1:5551;
    fair;
}
server {
    listen 80;
    server_name yoursite.com www.yoursite.com;
    access_log /var/log/nginx/access.log;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 60s;
        proxy_send_timeout 90s;
        proxy_read_timeout 90s;
        proxy_buffering off;
        proxy_temp_file_write_size 64k;
        proxy_pass http://your-site;
        proxy_redirect off;
    }
}

Hello World!

1
4cs: Hello World!
1
 6502acme: Hello World!
1
 6502kickass: Hello World!
1
 6502tasm: Hello World!
1
 68000devpac: Hello World!
1
 abap: Hello World!
1
 actionscript: Hello World!
1
 actionscript3: Hello World!
1
 ada: Hello World!
1
 aimms: Hello World!
1
 algol68: Hello World!
1
 apache: Hello World!
1
 applescript: Hello World!
1
 apt_sources: Hello World!
1
 arm: Hello World!
1
 asm: Hello World!
1
 asp: Hello World!
1
 asymptote: Hello World!
1
 autoconf: Hello World!
1
 autohotkey: Hello World!
1
 autoit: Hello World!
1
 avisynth: Hello World!
1
 awk: Hello World!
1
 bascomavr: Hello World!
1
 bash: Hello World!
1
 basic4gl: Hello World!
1
 batch: Hello World!
1
bf: Hello World!
1
 biblatex: Hello World!
1
 bibtex: Hello World!
1
 blitzbasic: Hello World!
1
 bnf: Hello World!
1
 boo: Hello World!
1
 c: Hello World!
1
 c_loadrunner: Hello World!
1
 c_mac: Hello World!
1
 c_winapi: Hello World!
1
 caddcl: Hello World!
1
 cadlisp: Hello World!
1
 ceylon: Hello World!
1
 cfdg: Hello World!
1
 cfm: Hello World!
1
 chaiscript: Hello World!
1
 chapel: Hello World!
1
 cil: Hello World!
1
 clojure: Hello World!
1
 cmake: Hello World!
1
 cobol: Hello World!
1
 coffeescript: Hello World!
1
 cpp-qt: Hello World!
1
 cpp-winapi: Hello World!
1
 cpp: Hello World!
1
 csharp: Hello World!
1
 css: Hello World!
1
 cuesheet: Hello World!
1
 d: Hello World!
1
 dart: Hello World!
1
 dcl: Hello World!
1
 dcpu16: Hello World!
1
 dcs: Hello World!
1
 delphi: Hello World!
1
 diff: Hello World!
1
 div: Hello World!
1
 dos: Hello World!
1
 dot: Hello World!
1
 e: Hello World!
1
 ecmascript: Hello World!
1
 eiffel: Hello World!
1
 epc: Hello World!
1
 erlang: Hello World!
1
 euphoria: Hello World!
1
 ezt: Hello World!
1
 f1: Hello World!
1
 falcon: Hello World!
1
 fo: Hello World!
1
 fortran: Hello World!
1
 freebasic: Hello World!
1
 freeswitch: Hello World!
1
 fsharp: Hello World!
1
 gambas: Hello World!
1
 gdb: Hello World!
1
 genero: Hello World!
1
 genie: Hello World!
1
 gettext: Hello World!
1
 glsl: Hello World!
1
 gml: Hello World!
1
 gnuplot: Hello World!
1
 go: Hello World!
1
 groovy: Hello World!
1
 gwbasic: Hello World!
1
 haskell: Hello World!
1
 haxe: Hello World!
1
 hicest: Hello World!
1
 hq9plus: Hello World!
1
 html4strict: Hello World!
1
 html5: Hello World!
1
 icon: Hello World!
1
 idl: Hello World!
1
 ini: Hello World!
1
 inno: Hello World!
1
 intercal: Hello World!
1
 io: Hello World!
1
 ispfpanel: Hello World!
1
 j: Hello World!
1
 java: Hello World!
1
 java5: Hello World!
1
 javascript: Hello World!
1
 jcl: Hello World!
1
 jquery: Hello World!
1
 julia: Hello World!
1
 kixtart: Hello World!
1
 klonec: Hello World!
1
 klonecpp: Hello World!
1
 kotlin: Hello World!
1
 latex: Hello World!
1
 lb: Hello World!
1
 ldif: Hello World!
1
 lisp: Hello World!
1
 llvm: Hello World!
1
 locobasic: Hello World!
1
 logtalk: Hello World!
1
 lolcode: Hello World!
1
 lotusformulas: Hello World!
1
 lotusscript: Hello World!
1
 lscript: Hello World!
1
 lsl2: Hello World!
1
 lua: Hello World!
1
 m68k: Hello World!
1
 magiksf: Hello World!
1
 make: Hello World!
1
 mapbasic: Hello World!
1
 mathematica: Hello World!
1
 matlab: Hello World!
1
 mercury: Hello World!
1
 metapost: Hello World!
1
 mirc: Hello World!
1
 mk-61: Hello World!
1
 mmix: Hello World!
1
 modula2: Hello World!
1
 modula3: Hello World!
1
 mpasm: Hello World!
1
 mxml: Hello World!
1
 mysql: Hello World!
1
 nagios: Hello World!
1
 netrexx: Hello World!
1
 newlisp: Hello World!
1
 nginx: Hello World!
1
 nimrod: Hello World!
1
 nsis: Hello World!
1
 oberon2: Hello World!
1
 objc: Hello World!
1
 objeck: Hello World!
1
 ocaml-brief: Hello World!
1
 ocaml: Hello World!
1
 octave: Hello World!
1
 oobas: Hello World!
1
 oorexx: Hello World!
1
 oracle11: Hello World!
1
 oracle8: Hello World!
1
 oxygene: Hello World!
1
 oz: Hello World!
1
 parasail: Hello World!
1
 parigp: Hello World!
1
 pascal: Hello World!
1
 pcre: Hello World!
1
 per: Hello World!
1
 perl: Hello World!
1
 perl6: Hello World!
1
 pf: Hello World!
1
 phix: Hello World!
1
 php-brief: Hello World!
1
 php: Hello World!
1
 pic16: Hello World!
1
 pike: Hello World!
1
 pixelbender: Hello World!
1
 pli: Hello World!
1
 plsql: Hello World!
1
 postgresql: Hello World!
1
 postscript: Hello World!
1
 povray: Hello World!
1
 powerbuilder: Hello World!
1
 powershell: Hello World!
1
 proftpd: Hello World!
1
 PROGRESS: Hello World!
1
 prolog: Hello World!
1
 properties: Hello World!
1
 providex: Hello World!
1
 purebasic: Hello World!
1
 pycon: Hello World!
1
 pys60: Hello World!
1
 python: Hello World!
1
 q: Hello World!
1
 qbasic: Hello World!
1
 qml: Hello World!
1
 racket: Hello World!
1
 rails: Hello World!
1
 rbs: Hello World!
1
 rebol: Hello World!
1
 reg: Hello World!
1
 rexx: Hello World!
1
 robots: Hello World!
1
 rpmspec: Hello World!
1
 rsplus: Hello World!
1
 ruby: Hello World!
1
 rust: Hello World!
1
 sas: Hello World!
1
 sass: Hello World!
1
 scala: Hello World!
1
 scheme: Hello World!
1
 scilab: Hello World!
1
 scl: Hello World!
1
 sdlbasic: Hello World!
1
 smalltalk: Hello World!
1
 smarty: Hello World!
1
 spark: Hello World!
1
 sparql: Hello World!
1
 SQL: Hello World!
1
 standardml: Hello World!
1
 stonescript: Hello World!
1
 swift: Hello World!
1
 systemverilog: Hello World!
1
 tcl: Hello World!
1
 tclegg: Hello World!
1
 teraterm: Hello World!
1
 texgraph: Hello World!
1
 text: Hello World!
1
 thinbasic: Hello World!
1
 tsql: Hello World!
1
 twig: Hello World!
1
 typoscript: Hello World!
1
 unicon: Hello World!
1
 upc: Hello World!
1
 urbi: Hello World!
1
 uscript: Hello World!
1
 vala: Hello World!
1
 vb: Hello World!
1
 vbnet: Hello World!
1
 vbscript: Hello World!
1
 vedit: Hello World!
1
 verilog: Hello World!
1
 vhdl: Hello World!
1
 vim: Hello World!
1
 visualfoxpro: Hello World!
1
 visualprolog: Hello World!
1
whitespace: Hello World!
1
 whois: Hello World!
1
 winbatch: Hello World!
1
 xbasic: Hello World!
1
 xml: Hello World!
1
 xojo: Hello World!
1
 xorg_conf: Hello World!
1
 xpp: Hello World!
1
 xyscript: Hello World!
1
yaml: Hello World!
1
 z80: Hello World!
1
 zxbasic: Hello World!