http://lzhang.cublog.cn/
以下内容转自chinaunix论坛
文章中有些地方我并不太赞同,这里先帖出来,大家一起参考.此文对于初次在FreeBSD上建立WEB服务器的用户来说,有很大的参考价值.
没 日没夜的混了将近半个月.总算是把心中的BSD
WEBserver架设起来了.心中无比激动和感慨.在CU学习这几天.除了找精华贴子就是看别人怎么解决问题.实在自己解决不了才发贴子问问.可是很多
高手那种冷漠的态度真的让人心寒.就算回答也是模糊其词.幸好还能碰到几个比较热心的朋友.在这里.我非常感谢那些勇于回贴的朋友们.只要我学到的东西.
我肯定的东西.一定会写给大家分享.不为了什么.只为回报曾经帮过我的朋友而已
System:
FreeBSD 6.2-BETA2 FreeBSD 6.2-BETA2 #0: Mon Oct 2 03:22:01 UTC 2006 :/usr/obj/usr/src/sys/GENERIC i386
Apache Version:
Apache/2.2.3 (FreeBSD) DAV/2 PHP/5.1.6 with Suhosin-Patch
mysql Version:
Client API version 5.1.11-beta
Zend Version:
Zend Optimizer v3.0.1
至于装系统.我就不多讲了只要记住.系统安装最小化模式+man+ports+src+sys+perl5.8 就好.少走弯路.
很 多文章说第一件事就是更新standard-supfile
我觉得如果你安装的时候选择了src就没有浪费大量的时间去更新standard-supfile了.接着下一步他们会告诉你编译内核..如果您要是装
FreeBSD 6.2-BETA2
似乎已经很安全稳定的了.就没有必要花二三个小时去重新编译吧.起码安装WEBserver不用.只要您把安全做好.我认为利用系统漏洞入侵您的服务器不
太可能..有必要的时候再重新编译..个人意见.您想重新编译我也不能挡着你不让是不..
No.1 安装cvsup-withou-gui
www# pkg_add -r cvsup-withou-gui
Fetching
Done
//要是没cvsup-withou-gui就不能更新ports 往下继续做那都是扯淡..
//当出现Done的时候 没必要重起服务器..只需要
#rehash
No.2 更新ports
#cd /usr/share/examples/cvsup
#ee ports-supfile
//把
*default host=CHANGE_THIS.FreeBSD.org
//改为:
*default host=cvsup1.FreeBSD.org
Quote:
小提示:您可以ping cvsup1 cvsup2 cvsup3 cvsup4 看哪个返回值小就用哪个...
比如说你在本机ping
www# ping cvsup1.cn.freebsd.org
PING cvsup1.cn.freebsd.org (202.108.251.208): 56 data bytes
64 bytes from 202.108.251.208: icmp_seq=0 ttl=247 time=1.914 ms
www# ping cvsup2.cn.freebsd.org //不通
PING cvsup2.FreeBSDChina.org (218.30.5.19): 56 data bytes
您看下time哪个值小就用哪个.没返回值的你干脆别用..浪费时间
//作为webserver,升级全部的ports是完全没有必要的,因此可以把 ports-all那行前面加#注释掉。继续往后面
//找,有很多ports分支,我们把需要的打开,不需要的保留行首的#,就是取消了。如果是WEBserver 只更新 :
ports-databases //mysql5
ports-devel //Zend Optimize
ports-ftp //pure-ftpd
ports-lang //php5
ports-net
ports-www //apache22
//就可以...不过如果你网速还可以的话建议还是你都选上..万一中间出什么错你回来还得找我算帐...
#cvsup –g –L 2 ports-supfile
#cd /usr/ports/distfiles/
#ls
//肯定是空的.
No.3 下载我为您精心准备的套餐diskfiles
//fetch 我为您准备的distfiles包(133M).可以节省你大量fetch外国站的包...不领情就算了.
//反正我是为自己准备的.不为别的.网通线路 电信下载慢的话您就自己慢慢更新去吧.我也没办法
//我是机房光纤 所有直接都选上了..慢的话就考虑考虑是否去掉all
#fetch
distfiles.tar 68% of 133 MB 1277 kBps 00m33s
#tar -zxvf distfiles.tar
x mysql-5.1.11-beta.tar.gz
x perl-5.8.8.tar.bz2
x php-5.1.6.tar.bz2
x phpMyAdmin-2.9.0.2.tar.bz2
x ZendOptimizer-3.0.1-freebsd6.0-i386.tar.gz
x apache22/
x apache22/apr_dbd_mysql.rev-50.c
x apache22/httpd-2.2.3.tar.bz2
x defined-or-5.8.8.bz2
//安装apache php mysql Zend一些比较大的包都在/usr/ports/distfiles/下了.不信你可以ls看一下.
No.4 安装mysql
#cd/usr/ports/databases/mysql50-server
#make WITH_CHARSET=gbk WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes
BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes
WITHOUT_INNODB=yes install clean
#cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf
#rehash
//切记..如果你要安装DZ论坛的必需加上WITH_CHARSET=gbk 要不然后悔的就是你.重新编译去吧你.
No.5 安装Apache
#cd /usr/ports/www/apache22
#make WITH_MPM=worker WITHOUT_IPV6=yes WITH_THREADS=yes WITHOUT_SSL=yes install clean
//至于为什么WITH_MPM=worker 呵.我也学学某些人沉默方式..只可意会不可言传.自己google一下
//在我印象里.apache2如果不用worker运行方式的话相当于apache1.3的prefork.效率可能会更高.
//但带来的问题 似乎也不少..自己看着办.
//题外话:CU某些牛人说.安装WEB server 只需要四个包Apache php mysql perl就可以.
//如果是MINI安装.没有man+ports+src+sys+perl5.8的话.我想以我现在的水平看.那是不可能的.
No.6 安装php
# cd /usr/ports/lang/php5
# make config
[X] CLI Build CLI version
[X] CGI Build CGI version
[X] APACHE Build Apache module
[ ] DEBUG Enable debug
[X]] SUHOSIN Enable Suhosin protection system
[X] MULTIBYTE Enable zend multibyte support
[ ] IPV6 Enable ipv6 support
[ ] REDIRECT Enable force-cgi-redirect support (CGI only)
[ ] DISCARD Enable discard-path support (CGI only)
[X] FASTCGI Enable fastcgi support (CGI only)
[X] PATHINFO Enable path-info-check support (CGI only)
# make install clean
#cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
//切记不要选DEGUG 否则Zend装不上.别说我没告诉你.
//关于[X]] SUHOSIN Enable Suhosin protection system.我找到一些资料.为了安全..建议选上..
//但以后出什么问题.俺可不管...
Quote:
Hardened-PHP 最近推出了 Suhosin 測試版(beta version),這是一個從原始碼層面提升 PHP 安全性的系統,所以不論是已知和尚未發現的安全性漏洞,不論這些漏洞出現在應用程式還是在 PHP 的核心部分,Suhosin 的安全關卡都可以防止這些漏洞做成破壞。
Suhosin 是一個韓語的音譯,意思大約是守護天使,但是別誤會 Hardened-PHP 是由韓國人組成,它其實是由三名知名的 PHP 保安專家和 PHP 核心編程人員合作的網站。
Suhosin 由兩部分組成,第一部份是 PHP 核心的補丁,提供低階的安全保護,例如緩衝區溢滿等,第二部分是一個 PHP 擴充模組,提供多項保護功能,包括:
* 自動把 cookies 加密/解密
* 容許關閉 preg_replace() 中的 /e 選項
* 容許關閉 eval()
* 透過設定函式呼叫層數的限制,避免出現無窮遞歸(infinite recursion)
* 防止應用程式修改 memory_limit
* 保護 mail() 免受「newline 攻擊」
* 保護 preg_replace() 免受「\0 攻擊」
* 自動加密/解密 session 數據
* 保護 session 免受騎劫
* 若果用戶呈交的資料包含 GLOBALS、_GET、_COOKIE 等敏感名稱,一律過濾掉
* 容許設定用戶呈交的資料的數量和長度上限
* 從上載檔案中自動禁止那些可以在伺服器上執行的程式
No.7 安装php5-extensions
# cd /usr/ports/lang/php5-extensions/
# make config
Options for php5-extensions 1.0
-------------------------------------------------
[X] FTP FTP support
[X] GD
[X] GETTEXT
[X] MBSTRING
[X] MYSQL
[ ] POSIX //去掉.
[ ] SQLITE //去掉.
[X] ZLIB
# make install clean
No.8 安装Zend Optimizer
# cd /usr/ports/devel/ZendOptimizer/
#make install clean
//直接就可以安装.不用去fetch好几M的包..知道diskfiles好处了吧.
//你会看到以下提示:
//You have installed the ZendOptimizer package.
//Edit /usr/local/etc/php.ini and add:
//[Zend]
//zend_optimizer.optimization_level=15
//zend_extension_manager.optimizer="/usr/local/lib/php/20050922-zts/Optimizer"
//zend_extension_manager.optimizer_ts="/usr/local/lib/php/20050922-zts/Optimizer_TS"
//zend_extension="/usr/local/lib/php/20050922-zts/ZendExtensionManager.so"
//zend_extension_ts="/usr/local/lib/php/20050922-zts/ZendExtensionManager_TS.so"
//********************************************************************************
//ok根据提示我们继续.
# ee /usr/local/etc/php.ini
//如果你打开是空白.那一定是忘了
# cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini//
//然后再
# ee /usr/local/etc/php.ini
//在最下边加上.
[Zend]
zend_optimizer.optimization_level=15
zend_extension_manager.optimizer="/usr/local/lib/php/20050922-zts/Optimizer"
zend_extension_manager.optimizer_ts="/usr/local/lib/php/20050922-zts/Optimizer_TS"
zend_extension="/usr/local/lib/php/20050922-zts/ZendExtensionManager.so"
zend_extension_ts="/usr/local/lib/php/20050922-zts/ZendExtensionManager_TS.so"
//先不要急着测试apache mysql php是否好使..心急吃不了热豆腐...明白不?我还没说完呢...
No.9 编辑httpd.conf
#ee /usr/local/etc/apache22/httpd.conf
//查找 :
#Listen 12.34.56.78:80 //行,将该行下面的内容修改为
Listen 125.208.15.3:80 //此处为您服务器的IP地址
//查找 :
User www
Group www
//改为:
User nobody
Group nobody
ServerAdmin
//再往下找..
Options Indexes FollowSymLinks
//改为Options FollowSymLinks
//别说我没告诉你.163都会有这种错误.被黑客目录浏览到配置文件.到时候死了没我的事.
DirectoryIndex index.html index.php
AddDefaultCharset ISO-8859-1,
//将那行内容更改为AddDefaultCharset gb2312
//乱码烦不烦人?
//再往下找 怎么着?烦了...烦了睡觉去吧.这儿你不看别想解析php!
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
//再下面添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
//最下面
Include etc/apache22/extra/httpd-mpm.conf //把#去掉
//ESC退出保存
#ee /usr/local/etc/apache22/extra/httpd-mpm.conf
ServerLimit 3000
StartServers 5
MaxClients 5000
MinSpareThreads 75
MaxSpareThreads 300
ThreadsPerChild 50
MaxRequestsPerChild 80000
//切记... ServerLimit 3000 这儿一定要加上限制连接数..要不然重启的时候肯定报错
Starting Apache22
WARNING:MaxClients of 5000 would ruquire 100 servers,and would exceed
the ServerLimit value of 16 Automatically lowering MaxClients to 800.To
increase ,please see the ServerLimit directive.
//这是一网友告诉我的:MaxClients = StartServers * ThreadsPerChild <= ServerLimit
// 可以自己去看看.
No.10 编辑php.ini
#ee /usr/local/etc/php.ini
//查找safe_mode = Off,更改为safe_mode = On
//查找disable_functions =phpinfo
//探针就不好使了..想看配置没门
//ESC保存退出
//至于php配置先说到这..哪天有时间再补...
No.11 apache+mysql开机后自动运行
#ee /etc/rc.conf
mysql_enable="YES"
apache22_enable="YES"
sendmail_enable="NONE"
//添加以上几条.
//ESC保存退出.
//别急着reboot就完事了...
No.12 编辑index.php
#cd /usr/local/www/apache22/data/
#rm index.html
//不删的话您只能看到 it works!
#ee index.php
//输入:
phpinfo();
?>
//ESC保存退出.
//ok现在您可以放心的reboot了...
//起来之后打开你的IP地址..看到什么了?大声告诉我..什么...空白?空白就对了...嘿嘿....
//因为...
Quote:
编辑php.ini
#ee /usr/local/etc/php.ini
//safe_mode = Off,更改为safe_mode = On
//查找disable_functions =phpinfo //探针就不好使了..想看配置没门
//disable_functions 禁止了phpinfo函数呗...
//想看看辛勤劳动的结果是吧?
#ee /usr/local/etc/php.ini
//找到disable_functions =
//ESC退出保存..
No.13 重起apache
#apachectl restart
//F5刷新一下看看有什么东西出现了...
No.14 myql
#mysql
Welcome to the MySQL monitor.Commands end with ; or \g.
You MySQL connect id is 2 to server version:5.1.11-beta
Type 'help;' or '\h' for help.Type 'c\' to clean the buffer.
mysql>show databases;
+-------------------------+
| Database |
+-------------------------+
|information_schema |
|cluster |
|mysql |
|test |
+-------------------------+
4 rows in set
mysql>create database stuhack;
Query OK ,1 rows affected
No.15 phpMyAdmin
#cd /usr/ports/distfiles
#tar -zxvf phpMyAdmin-2.9.0.2.tar.gz
x phpMyAdmin-2.9.0.2/themes/original/img/spacer.png
x phpMyAdmin-2.9.0.2/themes/original/img/vertical_line.png
x phpMyAdmin-2.9.0.2/themes/original/img/window-new.png
x phpMyAdmin-2.9.0.2/themes/original/info.inc.php
x phpMyAdmin-2.9.0.2/themes/original/layout.inc.php
x phpMyAdmin-2.9.0.2/themes/original/screen.png
#mv phpMyAdmin-2.9.0.2 /usr/local/www/apache22/data/phpMyAdmin
#cd /usr/local/www/apache22/data/phpMyAdmin
#cp config.sample.inc.php config.inc.php
#ee config.inc.php
//找到
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
//改成
//如果这儿不添的话.他会提示你"配置文件现在需要绝密的短语密码(blowfish_secret)。"
$cfg['blowfish_secret'] = 'fuck'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
//'fuck'这个你随便写.不一定是root的密码..
//继续找
$cfg['Servers'][$i]['controluser'] = 'pmausr';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';
//找到这句改成
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = '';
//打开
//欢迎使用 phpMyAdmin 2.9.0.2
//Language GB2312
//登入
//登入名称:
// 密码:
//您直接输入root回车就可以.
//您会看到...
# 显示 MySQL 的运行信息
# 显示 MySQL 的系统变量 文档
# 进程 文档
# 字符集和整理
# Storage Engines
# Reload privileges 文档
# 权限
# 数据库
//点权限
//root localhost 否 ALL PRIVILEGES 是 编辑权限
//更改密码 执行
//刷新phpMyAdmin页面
#1045 - Access denied for user 'root'@'localhost' (using password: NO)
#cd /usr/local/www/apache22/data/phpMyAdmin/
#ee config.inc.php
//把
$cfg['Servers'][$i]['controlpass'] = '';
//改为
$cfg['Servers'][$i]['controlpass'] = 'stuhack';
//保存.刷新phpMyAdmin
//或者是:
#cd /usr/ports/database/phpmyadmin
#make install clean
No.16 配置虚拟主机.绑定域名
//配置虚拟主机.把两个域名绑定.分别显示各自的内容.之前要把域名解析到该IP
#ee /usr/loal/etc/apache22/httpd.conf
//找到
#Virtual hosts
#Include etc/apache22/extra/httpd-vhosts.conf
//把Include前边的#去掉.
#cd /usr/local/www/apache22/data/
#mkdir htdocs
#cd htdocs
#ee index.php
输入:
echo "Unix.stuhack.com";
?>
//htdocs 为unix.stuhack.com目录
#cd ../
#mkdir wwwroot
#cd wwwroot
#ee index.php
输入:
echo "Vhost.stuhack.com";
?>
//wwwroot 为vhost.stuhack.com
#ee /usr/local/etc/apache22/extra/httpd-vhosts.conf
//按照下面的改成自己的
NameVirtualHost 125.208.15.11:80
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any
#
ServerAdmin
DocumentRoot /usr/local/www/apache22/data/htdocs
ServerName unix.stuhack.com
allow from all
Options +Indexes
ServerAdmin
DocumentRoot /usr/local/www/apache22/data/wwwroot
ServerName vhost.stuhack.com
allow from all
Options +Indexes
#apachectl restart
//重起Apache服务器生效
//ok 打开
//会显示 Unix.stuhack.com
//打开
//会显示 Vhost.stuhack.com
No.16 MRTG 流量分析
//安装MRTG 可谓艰难.查了好多资料.也走了很多弯路.一步一步走出来的..
//在安裝 MRTG 之前,我们先使用 ports 來安装 SNMP:
#cd /usr/ports/net-mgmt/net-snmp
#make install clean
#cd /usr/local/share/snmp
#cp snmpd.conf.example snmpd.conf
#ee /usr/local/share/snmp/snmpd.conf
//添加以下内容
view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
rocommunity mrtg
syslocation Office
syscontact
#/usr/local/etc/rc.d/snmpd start
#netstat -an
udp4 0 0 *.161 *.*
//接着ports 來安裝 MRTG:
#cd /usr/ports/net-mgmt/mrtg
#make install clean
#################################################
# Please create a MRTG config file in /usr/local/etc/mrtg #
# A configuration file can be automatically generated with cfgmaker #
# A sample configuration file is installed as mrtg.cfg.sample #
# #
# To enable MRTG in daemon mode, put the following to your /etc/rc.conf or #
# /etc/rc.conf.local file: #
# mrtg_daemon_enable="YES" #
#################################################
#ee /etc/rc.conf
snmpd_enable="YES"
mrtg_daemon_enable="YES"
#mkdir /usr/local/www/apache22/data/mrtg
//新建mrtg 为了是用ip可以直接访问mrtg
#cd /usr/ports/distfiles/
#tar -zxvf mrtg-2.14.5.tar
#cd mrtg-2.14.5
#cp images/* /usr/local/www/apache22/data/mrtg
//把mrtg解压一下.再把这些图像文件cp到mrtg下面.
#cd /usr/local/etc/mrtg
# rehash
# cfgmaker mrtg@ >mrtg.cfg
//上面请特别注意:在 mrtg@ 也可以换成mrtg@yourip
//mrtg 是有其意义的(在 snmp 这个通讯服务里面的预设搜寻的一个代码,默认的可能是public,这就是刚才要查看snmpd.conf里的原因了)
//所以,如果你的主机的动态 DNS 名称为 your.domain.name 则你就『一定』要写成 才行!千万不要弄错了!
#ee mrtg.conf
//还需要编辑一下这个文件加入WorkDir这一项,就是你的生成的网页的存放的位置。
WorkDir: /usr/local/www/apache22/data/mrtg
# Options[_]: growright, bits
Language:GB2312
//这个要注意的一点是他们前边不要有空格,否则会有什么” ERROR: Line 8 ( WorkDir: /var/www/html/mrtg) in CFG file (mrtg) does not make sense”的错误。
#whereis mrtg
mrtg: /usr/local/bin/mrtg /usr/local/man/man1/mrtg.1.gz /usr/ports/net-mgmt/mrtg
//为查找mrtg到底在哪..
# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
//这个需要运行3次,前两次都会报错,不用去理会他,第3次就应该没有错误了
//不过,若是有问题的话,就需要修改mrtg.cfg,再执行直到没有错误发生为止。
//如以下错误:
Rateup WARNING: /usr/local/mrtg2/bin/rateup could not read the primary log file for localhost
Rateup WARNING: /usr/local/mrtg2/bin/rateup The backup log file for localhost was invalid as well
Rateup WARNING: /usr/local/mrtg2/bin/rateup Can't remove localhost.old updating log file
Rateup WARNING: /usr/local/mrtg2/bin/rateup Can't rename localhost.log to localhost.old updating log file
#whereis indexmaker
indexmaker: /usr/local/bin/indexmaker /usr/local/man/man1/indexmaker.1.gz
/usr/local/bin/indexmaker
//为了查找indexmaker在哪.不要弄错了..
#/usr/local/bin/indexmaker -output=/usr/local/www/apache22/data/mrtg/index.html -title=LL /usr/local/etc/mrtg/mrtg.cfg
//上面这个程序indexmaker是在制作首页。会自动地输出一个index.html的文件中。
//如果说你以后修改了这个文件(比如增加对CPU,硬盘等的侦测,要再重新生成一次,否则图面会出不来的.
#crontab -e
//按下I键 插入的意思!
*/5 * * * * /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
//ESC 输入
:wq!
//设定每5分钟执行一次
//使用手工运行mrtg并不能定时产生适当的统计信息,因此最好还是定时自动运行mrtg来生 成统计信息,默认为五分钟运行一次。
//ok!到此为止,配置完毕,记得一定要重新启动snmp和httpd服务!
#/usr/local/etc/rc.d/snmpd restart
Stopping snmpd.
Starting snmpd.
#apachectl restart
//現在你可以使用 來連去看看。
//打开