FreeBSD + Apache 环境搭建教程

前言:本文是关于如何搭建基于“FreeBSD7.2 + Apache2.2.14 + PHP5.2.11 + GD + Zend + Mysql5.1.40 + 系统优化 + 防ddos攻击”Web服务器的文章,安装方式为源代码安装。

文档目录

    安装 zlib1.2.3
    安装 libpng1.2.40
    安装 jpeg7
    安装 freetype2.3.11
    安装 gd2.0.35

安装 FreeBSD7.2

操作系统的安装建议参考FreeBSD Handbook,在此仅给出链接,以避免不必要的重复劳动:

安装时的注意事项

1. 磁盘分区

由于是WEB服务系统,网站目录都放于/home目录下,因此home分区要有足够的空间。以一块硬盘146G/内存4G的服务器为例,可做如下分区:

  /  1024M  
swap 4096M
/var 10G
/usr 20G
/home 110G
/tmp 1024M

2. 软件包的选择

我们的WEB服务系统是要对外服务的,所以尽可能少的选择软件包,安装时建议选择Minimal,然后进入Custom选择doc,info,man,src即可。

配置

1. 编辑/etc/rc.conf确保有如下内容:

  sshd_enable="YES"  
named_enable="YES"

2.根据硬件的配置重新编译内核,编译内核的办法参考FreeBSD Handbook,这里只给出链接:

编译后系统的性能将得到较大的提升。

获取相关开源软件包

本文中提到的所有开源软件包为截止到2009年10月20日的最新稳定版,且均从官方网站下载。

mkdir -p /home/software

cd /home/software

fetch http://www.apache.org/dist/httpd/httpd-2.2.14.tar.gz

fetch http://www.cnblogs.com/yibinboy/admin/ftp://xmlsoft.org/libxml2/libxml2-2.7.6.tar.gz

fetch http://www.zlib.net/zlib-1.2.3.tar.gz

fetch http://www.cnblogs.com/yibinboy/admin/ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.2.40.tar.gz

fetch http://www.ijg.org/files/jpegsrc.v7.tar.gz

fetch http://ftp.twaren.net/Unix/NonGNU/freetype/freetype-2.3.11.tar.gz

fetch http://www.libgd.org/releases/gd-2.0.35.tar.gz

fetch http://www.php.net/get/php-5.2.11.tar.gz/from/this/mirror

fetch http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz

安装 Mysql5.1.40

Mysql5.1.40 下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.40.tar.gz/from/pick

pw groupadd mysql

pw useradd mysql -g mysql -d /dev/null -s /sbin/nologin

tar zxvf mysql-5.1.40.tar.gz

cd mysql-5.1.40

./configure --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=innobase

chmod +w /usr/local/webserver/mysql

chown -R mysql:mysql /usr/local/webserver/mysql

cp /usr/local/webserver/mysql/support-files/my-medium.cnf /usr/local/webserver/mysql/my.cnf

cd ..

以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.conf

vi /etc/rc.conf

加入以下内容

mysql_enable="YES"

启动 Mysql

/usr/local/etc/rc.d/mysql.sh start

安装 Apache2.2.14

tar zxvf httpd-2.2.14.tar.gz

cd httpd-2.2.14

./configure --prefix=/usr/local/webserver/apache --enable-module=rewrite --enable-so

make && make install clean

cd ..

创建 Apache 日志目录

mkdir -p /var/log/apache

chmod +w /var/log/apache

chown -R www:www /var/log/apache

创建 apache 配置文件

rm -f /usr/local/webserver/apache/conf/httpd.conf

vi /usr/local/webserver/apache/conf/ httpd.conf

输入以下内容:
4.1 找到DocumentRoot , 将替换为指定路径
------------------------------------------
DocumentRoot "/home/excms"
4.2 找到"DirectoryIndex index.html", 在"index.html"后面加入"index.php"
------------------------------------------------------------------------
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>

创建 apache 开机启动脚本

vi /etc/rc.conf

加入以下内容

apache_enable="YES"

启动 apache

/usr/local/etc/rc.d/apache start

安装 GD

安装 zlib

tar zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make && make install clean
cd ..

安装 libpng

tar zxvf libpng-1.2.40.tar.gz
cd libpng-1.2.40
./configure
make && make install clean
cd ..

安装 jpeg

tar zxvf jpegsrc.v7.tar.gz
cd jpeg-7
./configure –prefix=/usr/local/jpeg7 -enable-shared -enable-static
make && make install clean
cd ..

安装 freetype

tar zxvf freetype-2.3.11.tar.gz
cd freetype-2.3.11
./configure
make && make install clean
cd ..

安装 gd2.0.35

tar zxvf gd-2.0.35.tar.gz
cd gd-2.0.35
./configure --prefix=/usr/local/gd2 --with-jpeg=/usr/local/jpeg7 --width-png --width-zlib --width-freetype
make && make install clean
cd ..

安装 libxml2

tar -zxvf libxml2-2.7.6.tar.gz
cd libxml2-2.7.6
./configure
make && make install clean
cd ..

安装 PHP

编译安装PHP 5.2.11所需的支持库 libiconv

tar zxvf libiconv-1.13.tar.gz

cd libiconv-1.13

./configure --prefix=/usr/local

make && make install clean

cd ..

编译安装PHP5.2.11

tar zxvf php-5.2.11.tar.gz

cd php-5.2.11

./configure --prefix=/usr/local/webserver/php --with-apxs2=/usr/local/webserver/apache/bin/apxs --with-mysql=/usr/local/webserver/mysql --with-iconv-dir --with-freetype-dir --with-jpeg-dir=/usr/local/jpeg7 --with-png-dir --with-zlib --with-gd --enable-gd-native-ttf --with-libxml-dir --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-mbstring --with-openssl --enable-pcntl --enable-sockets

make && make install clean

cp php.ini-dist /usr/local/webserver/php/etc/php.ini

cd ..

安装 ZendOptimizer

ZendOptimizer 官方下载地址:http://www.zend.com/en/products/guard/downloads
tar zxvf ZendOptimizer-3.3.9-freebsd6.0-i386.tar.gz
cd cd ZendOptimizer-3.3.3-freebsd6.0-i386
ln -s /usr/lib/libc.so /usr/lib/libc.so.6 
ln -s /usr/lib/libcrypt.so /usr/lib/libcrypt.so.3 
ln -s /usr/lib/libutil.so /usr/lib/libutil.so.5 
ln -s /usr/lib/libm.so /usr/lib/libm.so.4 
./install-tty
cd ..
安装过程中的提示全默认就可以,指定php.ini文件路径 /usr/local/webserver/php。

测试

在/home/excms 目录下新建 phpinfo.php

vi /home/excms/phpinfo.php

加入如下文本
<?
phpinfo();
?>

打开浏览器,在地址栏里输入 http://您服务器的IP/phpinfo.php

系统优化

修改内核参数,编辑 /boot/loader.conf

vi /boot/loader.conf

加入如下文本
kern.dfldsiz="2147483648"             # Set the initial data size limit
kern.maxdsiz="2147483648"               # Set the max data size
kern.ipc.nmbclusters="0"                        # Set the number of mbuf clusters
kern.ipc.nsfbufs="66560"                        # Set the number of sendfile(2) bufs
解释: a.第一,第二行主要是为了突破1G内存设置的 b. 第三行其实是bsd的一个bug,当系统并发达到一个数量级的时候,系统会crash,这个是非常糟糕的事情,所幸更改了这个参数后,在高并发的时候,基本可以没有类似情况,当然非常bt的情况,还得进一步想办法 c.第四行是读取的文件数,如果你下载的文件比较大,且比较多,加大这个参数,是非常爽的

防ddos攻击

Sysctl 修改

vi /etc/rc.local

加入如下文本
sysctl kern.ipc.maxsockets=100000             ##增加并发的socket,对于ddos很有用
sysctl kern.ipc.somaxconn=65535         ##打开文件数
sysctl net.inet.tcp.msl=2500                    ##timeout时间