FreeBSD 6.2-BETA2 WebServer架设总结

——————————————————————————– //文章作者:Stuhack
//作者网站:学生黑客联盟 [url]www.stuhack.com[/url]

没日没夜的混了将近半个月.总算是把心中的BSD WEBserver架设起来了.心中无比激动和感慨.在CU学习这几天.除了找精华贴子就是看别人怎么解决问题.实在自己解决不了才发贴子问问.可是很多高手那种冷漠的态度真的让人心寒.就算回答也是模糊其词.幸好还能碰到几个比较热心的朋友.在这里.我非常感谢那些勇于回贴的朋友们.只要我学到的东西.我肯定的东西.一定会写给大家分享.不为了什么.只为回报曾经帮过我的朋友而已

System:
FreeBSD [url]www.stuhack.com[/url] 6.2-BETA2 FreeBSD 6.2-BETA2 #0: Mon Oct 2 03:22:01 UTC 2006 [email]root@opus.cse.buffalo.edu[/email]:/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不用.只要您把安全做好.我认为利用系统漏洞入侵您的服务器不太可能..有必要的时候再重新编译..个人意见.您想重新编译我也不能挡着你不让是不..

[color=Red]No.1 安装cvsup-withou-gui[/color]

www# pkg_add -r cvsup-withou-gui
Fetching [url]ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/cvsup-withou-gui.tbz[/url]
Done
//要是没cvsup-withou-gui就不能更新ports 往下继续做那都是扯淡..
//当出现Done的时候 没必要重起服务器..只需要
#rehash

[color=Red]No.2 更新ports[/color]
#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哪个值小就用哪个.没返回值的你干脆别用..浪费时间
[/quote]
//作为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 �Cg �CL 2 ports-supfile
#cd /usr/ports/distfiles/
#ls

//肯定是空的.

[color=Red]No.3 下载我为您精心准备的套餐diskfiles[/color]

//fetch 我为您准备的distfiles包(133M).可以节省你大量fetch外国站的包…不领情就算了.
//反正我是为自己准备的.不为别的.网通线路 电信下载慢的话您就自己慢慢更新去吧.我也没办法
//我是机房光纤 所有直接都选上了..慢的话就考虑考虑是否去掉all

#fetch [url]http://soft.stuhack.com/other/distfiles.tar[/url]
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看一下.

[color=Red]No.4 安装mysql[/color]
#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 要不然后悔的就是你.重新编译去吧你.

[color=Red]No.5 安装Apache[/color]
#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的话.我想以我现在的水平看.那是不可能的.

[color=Red]No.6 安装php[/color]
# 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 �y��版(beta version),�@是一���脑�始�a�用嫣嵘� PHP 安全性的系�y,所以不��是已知和尚未�l�F的安全性漏洞,不���@些漏洞出�F在��用程式��是在 PHP 的核心部分,Suhosin 的安全�P卡都可以防止�@些漏洞做成破�摹�

Suhosin 是一���n�Z的音�g,意思大�s是守�o天使,但是�e�`�� Hardened-PHP 是由�n��人�M成,它其��是由三名知名的 PHP 保安�<液� PHP 核心��程人�T合作的�W站。

Suhosin 由�刹糠纸M成,第一部份是 PHP 核心的�a丁,提供低�A的安全保�o,例如���n�^溢�M等,第二部分是一�� PHP �U充模�M,提供多��保�o功能,包括:

* 自�影� cookies 加密/解密
* 容�S�P�] preg_replace() 中的 /e �x��
* 容�S�P�] eval()
* 透�^�O定函式呼叫���档南拗疲�避免出�F�o�F�f�w(infinite recursion)
* 防止��用程式修�� memory_limit
* 保�o mail() 免受「newline 攻�簟�
* 保�o preg_replace() 免受「\0 攻�簟�
* 自�蛹用埽�解�� session ����
* 保�o session 免受�T劫
* 若果用�舫式坏馁Y料包含 GLOBALS、_GET、_COOKIE 等敏感名�Q,一律�^�V掉
* 容�S�O定用�舫式坏馁Y料的�盗亢烷L度上限
* �纳陷d�n案中自�咏�止那些可以在伺服器上�绦械某淌�
[/quote]

[color=Red]No.7 安装php5-extensions[/color]

# 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

[color=Red]No.8 安装Zend Optimizer[/color]
# 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是否好使..心急吃不了热豆腐…明白不?我还没说完呢…

[color=Red]No.9 编辑httpd.conf[/color]

#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 [email]stuceo@stuhack.com[/email]

//再往下找..
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
//[url]http://httpd.apache.org/docs/2.0/mod/worker.html[/url] 可以自己去看看.

[color=Red]No.10 编辑php.ini[/color]
#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就完事了…
[color=Red]No.12 编辑index.php[/color]
#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 //探针就不好使了..想看配置没门
[/quote]
//disable_functions 禁止了phpinfo函数呗…

//想看看辛勤劳动的结果是吧?
#ee /usr/local/etc/php.ini
//找到disable_functions =
//ESC退出保存..

[color=Red]No.13 重起apache [/color]
#apachectl restart
//F5刷新一下看看有什么东西出现了…

[color=Red]No.14 myql[/color]
#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

[color=Red]No.15 phpMyAdmin[/color]
#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’] = ”;

//打开[url]http://ip/phpMyAdmin[/url]
//欢迎使用 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

[color=Red]No.16 配置虚拟主机.绑定域名 [/color]
//配置虚拟主机.把两个域名绑定.分别显示各自的内容.之前要把域名解析到该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 block.
#

ServerAdmin [email]stuceo@stuhack.com[/email]
DocumentRoot /usr/local/www/apache22/data/htdocs
ServerName unix.stuhack.com

allow from all
Options +Indexes


ServerAdmin [email]stuceo@stuhack.com[/email]
DocumentRoot /usr/local/www/apache22/data/wwwroot
ServerName vhost.stuhack.com

allow from all
Options +Indexes


#apachectl restart
//重起Apache服务器生效

//ok 打开 [url]http://unix.stuhack.com/[/url]
//会显示 Unix.stuhack.com
//打开[url]http://vhost.stuhack.com[/url]
//会显示 Vhost.stuhack.com

[color=Red]No.16 MRTG 流量分析 [/color]
//安装MRTG 可谓艰难.查了好多资料.也走了很多弯路.一步一步走出来的..
//在安�b 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 [email]stuceo@stuhack.com[/email]

#/usr/local/etc/rc.d/snmpd start
#netstat -an
udp4 0 0 *.161 *.*

//接着ports �戆惭b 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@[url]www.stuhack.com[/url] >mrtg.cfg
//上面请特别注意:在 mrtg@[url]www.stuhack.com[/url] 也可以换成mrtg@yourip
//mrtg 是有其意义的(在 snmp 这个通讯服务里面的预设搜寻的一个代码,默认的可能是public,这就是刚才要查看snmpd.conf里的原因了)
//所以,如果你的主机的动态 DNS 名称为 your.domain.name 则你就『一定』要写成 [email]mrtg@your.domain.name[/email] 才行!千万不要弄错了!

#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
//�F在你可以使用 [url]http://yourserver/mrtg[/url] �磉B去看看。
//打开[url]http://unix.stuhack.com/mrtg/[/url]

]]>

© 版权声明
THE END
喜欢就支持以下吧
点赞0 分享