FreeBSD+Nginx环境搭建教程2010-03-3012:272010年02月22日星期一下午05:12为什么要选择FreeBSD?官方网站:中文网站:是一个优秀的unix操作系统,基于宽松的BSD协议,是完美的企业级操作系统,以重点突出性能和安全而闻名,行业领先的企业多年以来一直使用FreeBSD服务器。具有同所有其它开源软件操作系统竞争的高级性能。1.Unix兼容性强2.速度快3.极其稳定、可靠4.强大的网络功能5.多用户、多任务6.使用方便(按照极好的说明文件操作)为什么要选择Nginx?Nginx(“enginex”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过四年多了。Igor将源代码以类BSD许可证的形式发布。自Nginx发布四年来,Nginx已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx技术在国内日趋火热,越来越多的网站开始部署Nginx。Nginx是一个很牛的高性能Web和反向代理服务器,它具有有很多非常优越的特性:在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一.能够支持高达50,000个并发连接数的响应,感谢Nginx为我们选择了epollandkqueue作为开发模型;内存消耗少:在3万并发连接下,开启10个Nginx进程消耗150M左右内存(15M*10);不要钱:Nginx为开源软件,可以免费使用。而购买F5BIG-IP、NetScaler等硬件负载均衡交换机刚需要十多万至几十万元人民币;Nginx作为负载均衡服务器:Nginx既可以在内部直接支持Rails和PHP程序对外进行服务,也可以支持作为HTTP代理服务器对外进行服务.Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好很多;作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm描述了成功并且美妙的使用经验;Nginx是一个[#installation安装]非常的简单,配置文件?非常简洁(还能够支持perl语法),Bugs非常少的服务器:Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动.你还能够不间断服务的情况下进行软件版本的升级;稳定性高:用于反向代理,宕机的概率微乎其微。4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。Nginx0.7.51+PHP5.2.8(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版楼管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版楼管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版楼管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样不言自明了。安装FreeBSD7.2操作系统的安装建议参考FreeBSDHandbook,在此仅给出链接,以避免不必要的重复劳动:英文版中文版安装时的注意事项1.磁盘分区由于是WEB服务系统,网站目录都放于/home目录下,因此home分区要有足够的空间。以一块硬盘146G/内存4G的服务器为例,可做如下分区:/1024Mswap4096M/var10G/usr20G/home110G/tmp1024M2.软件包的选择我们的WEB服务系统是要对外服务的,所以尽可能少的选择软件包,安装时建议选择Minimal,然后进入Custom选择doc,info,man,src即可。配置1.编辑/etc/rc.conf确保有如下内容:sshd_enable=YESnamed_enable=YES2.根据硬件的配置重新编译内核,编译内核的办法参考FreeBSDHandbook,这里只给出链接:英文版中文版编译后系统的性能将得到较大的提升。获取相关开源软件包本文中提到的所有开源软件包为截止到2009年10月20日的最新稳定版,且均从官方网站下载。mkdir-p/home/softwarecd/home/softwarefetch://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gzfetch://://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.2.40.tar.gzfetch://ftp.twaren.net/Unix/NonGNU/freetype/freetype-2.3.11.tar.gzfetch://://php-fpm.org/downloads/php-5.2.11-fpm-0.5.13.diff.gzfetch安装Mysql5.1.40Mysql5.1.40下载地址:–prefix=/usr/local/webserver/mysql/–enable-assembler–with-extra-charsets=complex–enable-thread-safe-client–with-big-tables–with-readline–with-ssl–with-embedded-server–enable-local-infile–with-plugins=innobasemake&&makeinstallcleanchmod+w/usr/local/webserver/mysqlchown-Rmysql:mysql/usr/local/webserver/mysqlcp/usr/local/webserver/mysql/support-files/my-medium.cnf/usr/local/webserver/mysql/my.cnfcd..以mysql用户帐号的身份建立数据表/usr/local/webserver/mysql/bin/mysql_install_db–datadir=/usr/local/webserver/mysql/data–user=mysql创建Mysql开机启动脚本cp/usr/local/webserver/mysql/share/mysql/mysql.server/usr/local/etc/rc.d/mysql.sh为mysql.sh脚本设置可执行属性chmod+x/usr/local/etc/rc.d/mysql.sh修改/etc/rc.confvi/etc/rc.conf加入以下内容mysql_enable=”YES”启动Mysql/usr/local/etc/rc.d/mysql.shstart安装Nginx安装Nginx所需的pcre库tarzxvfpcre-8.00.tar.gzcdpcre-8.00./configuremake&&makeinstallcleancd..安装Nginx0.8.24tarzxvfnginx-0.8.24.tar.gzcdnginx-0.8.24./configure–user=–group=–prefix=/usr/local/webserver/nginx–with-http_stub_status_module–with-http_ssl_modulemake&&makeinstallcleancd..创建Nginx日志目录mkdir-p/var/log/nginxchmod+w/var/log/nginxchown-R创建Nginx配置文件rm-f/usr/local/webserver/nginx/conf/nginx.confvi/usr/local/webserver/nginx/conf/nginx.conf输入以下内容:user