(一、系统安装)
JWYe~ k5J18S dpK- G.^)5!By 前言
QqRF?%7q"q cTS.yN({G 2g~ @99` : p)R,('g 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
0kNKt(_ D4C:%D 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
7qZC+x6_L d7mn(= & 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
}2;iIw` <:NahxIlu 本连载文章前后关联很紧密,建议初学者一步一步来做。
B- $?5Ft! vm{8x o 试验环境如下:
+2}cR66% 8aIqc 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
%P M#gnt@ 9#m3<oSJ 软件环境:操作系统:FreeBSD4.7(4.8)
Qe\vx1GRLH *W2)!C| web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
KO~KaN nlI3|5 ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
{I0U 4] \HkBp&bqK mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
l qwy5# +/l@ou' proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
_hJdC|/ lS#:u-k 视频点播服务器:Helix Universal Servevr (realserver9.01)
&M@c50&% (_8.gS[
网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
?|/K(} dQZdL4 ^_g%c&H Kw$@_~BJ6 第一步:安装系统
L\UGC%]9 HfgTc
h 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
Yj*T'<e ~CbiKez 1、 采用最小化安装。
^<-)rzTI %OB>FY:| 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
IW&*3I<K 0ju-l=w 3、 添加一个wheel组的用户,这样在系统工作正常后可以在windows系统上通过终端登录软件(如SecureCRT)进行所有操作。FreeBSD4.7在最小安装时支持SSH终端登录,所以我们需要使用支持SSH协议的终端软件,如SecureCRT。例如我添加的用户名是ylf,隶属wheel系统组。系统产生一个用户目录/home/ylf。我可以通过SecureCRT以ylf身份登录到系统,然后通过su命令切换到root用户。同时我也可以在IE浏览器内键入
ftp://192.168.0.1 ,并输入ylf用户名和密码登录ftp将需要的文件上传到自己的用户目录里。(192.168.0.1是我的服务器连接内网的网卡ip地址)。以下除系统安装部分,我都是采用终端方式操作。
ygH )U. Bpm COA 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
24k]X`/n tgl(*[T2 128M /
oA@M = y<w_>O 20G /home
1^*ogMe 4H%#Sn#L^! 2G /ftp
f<iK% )[J!{$&y 256M /tmp
~tyqvHC 9#:fQ!3` 6G /usr
+_$s9`@]6 "igA^^?X1N 5G /var
R9 Ab.t wdfbl_`T 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
iQ(j_i'+!I _pZ
< 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
A[^#8evaK dor1(@no| 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
k ,ldi G+Z ,ic 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
s>I]_W)Pt $[?N^
# /stand/sysinstall
fS/:OnH M>Tg$^lm 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
aJf3rHX D
(8Z90 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
`^[Tu 1 {<@ud0A:\ 转到内核文件目录
.\T!oSb4[ ?A7 AVR # cd /usr/src/sys/i386/conf
h U-FSdR !reOYt| 编辑内核文件
b@8z+,_ cZ|NGkZ # vi kernel_wwwx # kernel_wwwx为我的内核文件名
]xMZo){[| z9 Ch %A{ 我的内核文件如下:
^h2+"" 3^%2, #
2wB*c9~ %L-qAI&V # GENERIC -- Generic kernel configuration file for FreeBSD/i386
p7-\a1P3 FXDB> }8 #
Qs
za,09 Y:O|6%00Y # For more information on this file, please read the handbook section on
&
[@)Er= %LP4RZ # Kernel Configuration Files:
#}B1W&\sw J.XhP_aT #
Um\HX6 .=Oww #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html _q#pEv EjFpQ|-L| #
dWiNe!oY2 P ?f${t+ # The handbook is also available locally in /usr/share/doc/handbook
K];] F"k`PF*b # if you've installed the doc distribution, otherwise always see the
&8l?$7S"_/ aReJ@ # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
Y)F(-H) \ui'~n_t] # latest information.
,'HjL:r =TNFAt #
HM0&% WwTl|wgvyI # An exhaustive list of options and more detailed explanations of the
B-w`mcqp$ u9KT_`
) # device lines is also present in the ./LINT configuration file. If you are
G^nG^HTo5 ^gx~{9`RR # in doubt as to the purpose or necessity of a line, check first in LINT.
,LxZbo! 9uWg4U #
hvO$ f.i ]58~b%s # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
$Z]@N
nA9N [ !#Dba# /"st
sF jQm~F`z machine i386
NYP3u_
QX ~Yg)8 cpu I586_CPU
\9OKf|#j !9NF@e'&! cpu I686_CPU
A32Sdr'D '+{yg+#/wV ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
yp$jLBA -hW>1s< maxusers 0
`.O$RwC&7B *9r(lmrfj /iM1 3e^0W_>6 options INET #InterNETworking
0(Y,Q(JTo& Z]Udx options FFS #Berkeley Fast Filesystem
GB}\ 7a ibZ[U p? options FFS_ROOT #FFS usable as root device [keep this!]
%vy,A* Gr&e]M[ l options SOFTUPDATES #Enable FFS soft updates support
N".BC|r fi>.X99(G options UFS_DIRHASH #Improve performance on big directories
7Ko*`-p 'D`lVUB options PROCFS #Process filesystem
qGV(p}$O B,_K mHItd options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
+u=VO#IA# d2i?FT> options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
!2HF|x$ M0lJyzJ options SYSVSHM #SYSV-style shared memory
r`<e<C R\3v=PR[ options SYSVMSG #SYSV-style message queues
;}f {o^ ]' 1+-Go}I options SYSVSEM #SYSV-style semaphores
Kgi`@` 7J5jf231 options P1003_1B #Posix P1003_1B real-time extensions
eDP&W$s# n=JV*h0 options _KPOSIX_PRIORITY_SCHEDULING
kG5+kwV=: Ru#pJb(R options ICMP_BANDLIM #Rate limit bad replies
tzd!r7 bcwb'D\a options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
c-&Q_lB +{=U!}3| # output. Adds ~128k to driver.
$eT[`r zL}`7*d:v options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
PPV T2;9 [^}bc-9?i # output. Adds ~215k to driver.
zfI{cMn'J YI*H]V%w h@*I(ND< ~a2|W|? device tun 1
{aV,h@> >6&Rytcc] options IPFIREWALL #防火墙
$Bc3| `K1v V >eG\ options IPFIREWALL_FORWARD #允许透明代理
> O?<? .YvIVQ options IPFIREWALL_VERBOSE #允许防火墙日志
5655)u.N8 VhLfSN>W options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
q]pHD})O 4@\$k+v options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
zi`q([ lx5.50mI options IPDIVERT #启用由ipfw divert使用的转向IP套接字
{g[kn^| ndDF(qHr |P&
\C8h G#` # To make an SMP kernel, the next two are needed
<>$CYTb gV9bt~ #options SMP # Symmetric MultiProcessor Kernel
O86p]Lr `?[,1 #options APIC_IO # Symmetric (APIC) I/O
p ]jLs|tat n05GM.|*s qTbc?S46pt A:y^9+Da device isa
j~.tyxOq# x%H,ta% device eisa
|BhL. p>J@"?%^ device pci
9S9j 6A=k;do xH`
VX-X3 N$t<&5+ pN9U1!|uam 6hR `sE # ATA and ATAPI devices
PU%f`) *PFQ device ata
z#`Qfvu6Hi tUOY`]0 device atadisk # ATA disk drives
l+&DBw[ Zw{?^6;cS #/H2p`5 icIWv
C .B=E"e x)eF{%QB # SCSI Controllers #没有SCSI设备不需要这段
/%jX=S.5h< ;K>'Gl device ahb # EISA AHA1742 family
:eL[nyQr U}Puq5[ ? device ahc # AHA2940 and onboard AIC7xxx devices
uJ0'`Q?6R9 nvwf!iU6 device ahd # AHA39320/29320 and onboard AIC79xx devices
>L "+8N6 Z 1wtOL device amd # AMD 53C974 (Tekram DC-390(T))
&M3KJ I0L dP_bFU zg device isp # Qlogic family
sz/^Ie-~ W?wt$' device mpt # LSI-Logic MPT/Fusion
(`#z@,1 :t "_I device ncr # NCR/Symbios Logic
mqsAYzG ^[bFG KE device sym # NCR/Symbios Logic (newer chipsets)
='+I dn#5 !"RRw&0M options SYM_SETUP_LP_PROBE_MAP=0x40
[742s]j kmu`sk" # Allow ncr to attach legacy NCR devices when
0!0o[3* }!Pty25j # both sym and ncr are configured
umnQ$y
0 +rSU CSW+UaE ue+{djz[4 device adv0 at isa?
z>y#^f)r #rr!ApJ device adw
0J466H_d{ nnT#S device bt0 at isa?
+%klS `_ I7=A!C" device aha0 at isa?
="vg/@.>i E>5p7=Or;" device aic0 at isa?
|dqESl,2 1\aTA, dXM8iP 1/;E8{ device ncv # NCR 53C500
~9#x=nU:+V ;P;c!}:\b device nsp # Workbit Ninja SCSI-3
HIE8@Rv/3 a(?)r[= device stg # TMC 18C30/18C50
9MI9$s2y Z'!ORn#M 3XDU(# }hg2}g99 # SCSI peripherals #没有SCSI设备不需要这段
v)gMNzt 6=,zkU*i^ device scbus # SCSI bus (required)
-$g~,dIwj xb0,dZb device da # Direct Access (disks)
#%E^cGfY ),Yk53G6c device sa # Sequential Access (tape etc)
P?|\Ig1Gk ?mK&Slh. device cd # CD
3pW4Ul@e Qmo}esb'( device pass # Passthrough device (direct SCSI access)
#QcRN?s 3}mg7KV& ns\I Y<Yo M?}:N_9<J Hsv)]
%p
qbS6#7D IDos4nM27] $$o( # atkbdc0 controls both the keyboard and the PS/2 mouse
q I~*G3 yoF*yUls^E device atkbdc0 at isa? port IO_KBD
Jn|i! BgdUG:;&
device atkbd0 at atkbdc? irq 1 flags 0x1
:wg=H *
]bB7 Qhc;Zl _
gYj@
% device vga0 at isa?
_Ds,91<muQ A! HJ
Kj3Gm>B<y cbm;45 L| oUN\tOiS+ puWMgvv # syscons is the default console driver, resembling an SCO console
TKGaGMx6@ ~@-r device sc0 at isa? flags 0x100
ybFxz , u%V% <pHm=q/U >!']w{G z^&$6c_ ZbdGI@ # Floating point support - do not disable.
)YAU|sCAi$ h2Th)&Fb> device npx0 at nexus? port IO_NPX irq 13
!'BXc%`x[ O
j:I @c SVn@q|N tH
*| 7(tsmP e`7>QS;. # Serial (COM) ports
VX8CEO U{pg
y#/ device sio0 at isa? port IO_COM1 flags 0x10 irq 4
xJ. kd
Tr z;<~j=lP &Q}%b7 U{[YCs fk # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
vZ srlHb @sg.0GR # 使用公共的MII总线控制器代码的PCI以太网适配器
yOKzw~;0% aL+>XN # 注意:一定要保留'device miibus'以确保可用
9"gu> m0v.[61 # PCI Ethernet NICs that use the common MII bus controller code.
Z~-N'Lt{ Y(kf<Wo # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
>.K%W*t !yrh50tD device miibus # MII bus support
iZeq
l1O uSQ#Y^V_ device fxp # Intel EtherExpress PRO/100B (82557, 82558)
#\D74$D v;;3 K*c> device rl # RealTek 8129/8139
p0zC(v0* "Z,T%] device vr # VIA Rhine, Rhine II
l,l6j";ohd _<sN54 device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
h\3-8m s>L.V2!$0 eXK3W2XF Z^as ?k(iM # Pseudo devices - the number indicates how many units to allocate.
il!B={ N_iy4W(NU pseudo-device loop # Network loopback
g.hYhg'KUh {GnZ@Q:F pseudo-device ether # Ethernet support
vGh>1U: 2/s42
FoG pseudo-device sl 1 # Kernel SLIP
=G^'wwpv( (g X8iKl pseudo-device ppp 1 # Kernel PPP
a*.#Zgy:lK 7[qL~BT+ pseudo-device tun # Packet tunnel.
qA`@~\qh" \6?a pseudo-device pty # Pseudo-ttys (telnet etc)
zixG}' KT<$E!@ pseudo-device md # Memory "disks"
h{ix$Xn~ nC%qdzT pseudo-device gif # IPv6 and IPv4 tunneling
C<(oaeQY Fih
pp< pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
wW)(mY? +M_ _\7 4E=v)C' T9Juq6| # The `bpf' pseudo-device enables the Berkeley Packet Filter.
LOfw
#+]d <Ohi+a%6 # Be aware of the administrative consequences of enabling this!
r#)1/`h rg >2tgA pseudo-device bpf #Berkeley packet filter
ZM v\j|{8 vVa|E#
[ (完)
vMEN14;yH_ /(5"c> sr&W+4T @$%GszyQ' 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
y<Xu65 fDqT7}L 接下来编译安装新内核:
x:!s+q`
s bl^Ihza # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
.yXqa"p F/>\uzu # cd ../../compile/kernel_wwwx
|%XTy7^a L98T!5) # make depend
~).D\Q\ Q35\wQ# # make
p2t04p! G(#t,}S}@ # make install
C7NSmZ z_ycH%p 重新启动(reboot)
p5or"tK M;ADL| GK'p$`oJm LPJ7V`!k 如果系统升级过源代码树,按下面方法编译内核:
b=:u d[h FV
"pJ # cd /usr/src
4FRi=d;mP ~,1Sw7rE # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
R`a~8QVh&5 ([<HFc` 重新启动
QtKcv7:4 x$BNFb%I1 jUA~}DVD -W('^v_* FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
5{V"!M+< ;j1E 6 `<se&IZE KU` *LB: 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
SU~.baP? ~i%=1&K&` 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
QWfSm^
t {P~rf&Ee # vi /etc/ppp/ppp.conf
C){Q;`M-< Sf*v#? 我的ppp.conf文件内容如下:(注意set前要留空格)
;Hk3y+&]a Fk 3(( n= default:
P%e7c, U0j>u*yE set log Phase tun command
qD>^aEd@4 mXyP;k set ifaddr 10.0.0.1/0 10.0.0.2/0
;i6~iLY ;NRh0)%|o adsl: # 配置代号
[C6ba{9B n
Ab~ set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
?}s;,_GH MBA?, |9Q# set mru 1492
5>f" [%dsq`b# set mtu 1492
fS4W*P[B3 ktTP~7UVi set authname username # username是拨号用户名
aHW34e@ebL \~,\| set authkey password # password是拨号密码
*%KIq/V \Yr*x7! set dial
d%'#-w' B0Wf$
s^7t set login
x0Loid\f zG ='U add default HISADDR
lF}@@e)N @L!^2v (完)
`~u=[}w ;(`bP xE<H@@w ~-7/9$ay5 # vi /etc/rc.conf
E! NtD).=S hp'oiR;~w 我的rc.conf文件内容如下:(动态ip)
=exCpW> e*}zl>f # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
Ie^Ed` 'D5J5+.z # Created: Tue Jul 15 21:20:28 1997
:zKW[sF 1}=D # Enable network daemons for user convenience.
T"Y#u iLSUz j` # Please make all changes to this file, not to /etc/defaults/rc.conf.
"{D/a7]lC JL87a^ro # This file now contains just the overrides from /etc/defaults/rc.conf.
WkA47+DsV ;`7~Q hostname="wwwx.3322.org" # 你的主机域名
h76j|1gI 9t\14tVwx ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
o-RZwufZ` [y`Gp# inetd_enable="YES" # 开机加载inetd
EZB0qZIp -6- sI kern_securelevel_enable="NO"
'69)m~B0a W$hCI)m( linux_enable="YES"
*P*~CHx> ESV./~K nfs_reserved_port_only="NO"
Pt5 wm\ x/<]/D sendmail_enable="NO"
/r~2KZE <p b sshd_enable="YES"
_D4qnb@ ZSQiQ2\) usbd_enable="NO"
Sr6'$8#>Y fL2P6N@ gateway_enable="YES"
!ZUUn*e{5 " C0[JdZ firewall_enable="YES" #启用防火墙
*g+ZXB ?`?Tg&W firewall_script="/etc/rc.firewall"
ek]JzD~w$ #h=V@Dh firewall_type="open"
HU?1>}4L j13-?fQ& firewall_quiet="YES"
G)<B7-72; )4uWB2ZRoi firewall_logging_enable="YES"
A2ye
^<-C. BGibBF^ ppp_enable="YES" # 开机自动拨号
H I|a88
aYa`ex ppp_mode="ddial"
cOP'ql{" 45.ks. ppp_nat="YES" # 启用透明代理
)b1hF OoA!N-Q ppp_profile="adsl" # 配置代号
t!rrYBSCr -rcEG! # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
E6~VHQa2? q&@s/k (完)
SzpUCr" &{8:XJe*,% zy$jTqDH $jh$nMx)! 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
*]yrN` _?"y1L. 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
p)B/(% J(#6Cld`c G;cC!x< O"~[njwkE 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
n)5t! apm%\dN 我的/etc/rc.conf文件如下:(静态ip)
m^L !_~ 72~L ? # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
tjThQ V6dq8Z"h # Created: Tue Jul 15 21:20:28 1997
y$7Ys:R~ %_s)Gw&sq # Enable network daemons for user convenience.
<MG&3L.[ kNWTM%u9 # Please make all changes to this file, not to /etc/defaults/rc.conf.
-hnNaA G)s.~ T # This file now contains just the overrides from /etc/defaults/rc.conf.
ri4z^1\ f{VV U/$ hostname="wwwx.3322.org" #主机域名
|Yw k 6inAnC@I defaultrouter="218.10.104.1" #服务商提供的路由器地址
>C_G~R .\$A7DD+A ifconfig_vr0="inet 218.10.104.188 netmask 255.255.255.0" #服务商提供的静态ip
Wx-0Ip'9 !~C%0{9+u@ ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内部网卡ip
{c)\}s(}F V $I8iVGL inetd_enable="YES" #开机加载inetd
%(
7##f_ 9oc_*V0< kern_securelevel_enable="NO"
| I:@: !%65YTxY- linux_enable="YES"
LI.WcI3uS <Mvniz nfs_reserved_port_only="NO"
':_9o5I ktfm sshd_enable="YES"
.:&`PaMt ep"{{S5g sendmail_enable="NO"
9+9g (6 yOz6a :r usbd_enable="NO"
'8)kFR^9 8'@5X-nD gateway_enable="YES"
=M-=94 F&!vtlV) firewall_enable="YES"
]CLM'$ DQK?y=vf firewall_script="/etc/rc.firewall"
?0:]%t18 tx
d0S! firewall_type="open"
Z#@ Zfk]Z9YO firewall_quiet="YES"
2LN6pu X7-*`NI^ firewall_logging_enable="YES"
A"pQOtrm\k \;MP|:{pU natd_enable="YES" # 启用透明代理
[ S }.045 Wuu natd_interface="vr0" # natd接口,vr0为连接外网modem的网卡
AH n!>w, }kQ{T:q4 # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
zB0*KgAn{ 'A5T$JV.r4 (完)
G?@W;o) \k=dqWBr7 W2rd[W LQ k^l` 重起后网络连接及透明代理生效。客户端同样要按上面说的方法配制。
:y7K3:d3 P9
HKev?y M7?ktK9`ma P6kDtUXF 使用Squid:
h=`$ec kP$E+L Squid是一个非常不错的代理缓存软件。我曾经一直在使用,后来因为我经常要改变web服务器里的网页,而Squid总是把我以前的页面缓存,致使不能马上反映页面的更新情况,再加上公司上网的负担不是很重。所以就不用了。
',g%L_8Sq o3+s.7 " 安装方法:
pnSKIn ZMlBd}H 在FreeBSD下安装软件最方便的方法是使用ports。本文为了让大家对通用的软件安装方法做一定的了解,我们采用通用的方法来安装squid,也就是说,下面的方法同样适用于linux或其他unix版本。
OR6vA5J
:z P:4NW eEBNO*2 OF`J{`{r 在ylf的用户目录下创建目录app用来存放程序安装临时文件:
xz0t8`NoN c=+%][21 # mkdir /home/ylf/app
;MNUT,U c!
kr
BS 将用户ylf设为/home/ylf/app目录及其子目录的所有者
fx+_;y nuWQ3w
p[e # chown –R ylf /home/ylf/app
VK*_pEV,} RK-bsf 到
http://www.squid-cache.org/Versions/v2/2.5/ 下载squid 的最新稳定版本,现在是squid-2.5.STABLE3
dQSO8Jf Pa0W|q#?X 打开IE浏览器,在地址栏输入
ftp://192.168.0.1 ,出现ftp登陆对话框,输入用户名ylf及密码,登录成功后。将下载的squid-2.5.STABLE3复制到app目录中。
>ye.rRZd` >6yQuB 执行如下命令:
k^|z.$+ ]@Y!,bw& # cd /home/ylf/app
IrZ\;!NK {.k IC@^O # tar zxvf squid-2.5.STABLE3.tar.gz #解压缩安装包
67&IaDts uMva5o # cd squid-2.5.STABLE3 #进入解开的目录
]/Nt 7xO05)bz # ./configure --prefix=/usr/local/squid #配制、将squid安装在/usr/local/squid目录
_+9i |U1 [R\X # make all #编译
A z@@0 :|kO}NGM # make install #安装
;b65s9n^b QAx9W% 下面编辑squid的配置文件:
xP~GpVhLF ds+K7B$ # cd /usr/local/squid/etc
*~
I HVU a]fFR~OY 将原来的配置文件改名
ZKrK>X ?xUl_ # mv squid.conf squid.conf.bak
)t+pwh!8 U[3w9 编辑新的配置文件
=(hBgNH mD7NQ2:wA # vi squid.conf
_4)
t :Ef!gpS}?R 我的squid.conf内容如下:
zqt<[=O oQh;lb r=3`Eb"t iJhieNn #取消对代理阵列的支持
e eN`T&cI 7r?,wM icp_port 0
Y>aVnixx< U/{t" e sryA(V Xh}q/H< #对日志文件和pid文件位置进行设置
USEmD5 q {M:/HQo cache_store_log none
}iDRlE, C ibfuR cache_access_log /usr/local/squid/var/logs/access.log
]t!v`TH %8I^&~E1 cache_log /usr/local/squid/var/logs/cache.log
6R^F^<< l-W)?d emulate_httpd_log on
:I7qw0? [r>hKZU2 pid_filename /usr/local/squid/var/logs/squid.pid
^k%+ao l
opl gzi=+oJ|4 lwt,w<E$ #设置运行时的用户和组权限
)|v du G3|23G.~)( cache_effective_user squid
V^FM-bg%9 )G/=3;! cache_effective_group squid
ESoqmCJjb: "JmbYb#Z yxx_%9 X s1]Pv/a=y #设置管理信息
z)KoK`\mE" h(nE)j visible_hostname wwwx.3322.org.
s[{8:Px Ay6T*Nu` cache_mgr
yourname@yourdomain.com 9nQyPb6 A4l"^dZc _:Q^mV=;j }P%gwgPK #设置监听地址和端口
$I-iq
@
i / o http_port 3128
`2U,#nZ 4 V9<E`C udp_incoming_address 0.0.0.0
+,"[0RH fXnTqKAfu6 _Q^jk0K8ga z|AknEE, #设置squid用户hot object的物理内存的大小以及设置cache目录
&/uakkS U[;ECw@ cache_mem 32 MB
;(,GS@sP $/Wec,`& cache_dir ufs /usr/local/squid/cache 1024 16 256
PC@HNto{ @Z$fEG)9 ! weYOOu B YB9M #访问控制设置
o(v` Z{(Gib~{N acl mynet src 192.168.0.0/255.255.255.0
!^L}LtqHI sR PQr? acl all src 0.0.0.0/0.0.0.0
_d~GY,WTdO |:(B I5&S http_access allow mynet
lbIW1z%:sy 6k,@+@]t. http_access deny all
.6n|hYe G2[2y-Rv 0j;|IU\ HWoMzp5="3 #透明代理设置
#F
.8x@ < :eKXH2 httpd_accel_host virtual
PTpCiiA@ $aXYtHI httpd_accel_port 80
T5 pc%%q 2mj>,kS?c httpd_accel_with_proxy on
|OF3J,q UlN}SddI9 httpd_accel_uses_host_header on
/Y\q&} -{eiV0<^ b N>Ar /mE:2K]C #swap 性能微调
c?xeBC1- J=^5GfM)J half_closed_clients off
ND9;%<80 *sfz+8Y cache_swap_high 100%
!5m~qet. h*P0;V`UX cache_swap_low 80%
B7{j$0fm* ]6=opvm maximum_object_size 1024 KB
g+.E=Ef8<4 aM[fag$c cEJ_z(\=hr F r2
+p #控制对象的超时时间
,h3,&, ;XYfw) refresh_pattern -i .html 1440 90% 129600 reload-into-ims
3kJSz-_M ?aG ~E refresh_pattern -i .shtml 1440 90% 129600 reload-into-ims
d9D*w/clMi #2.C$ refresh_pattern -i .hml 1440 90% 129600 reload-into-ims
5hCfi mn<ea& refresh_pattern -i .gif 1440 90% 129600 reload-into-ims
!})3Fb jTQN(a9Y refresh_pattern -i .swf 1440 90% 129600 reload-into-ims
*OE>gg&?Nh a~tBg y+9 refresh_pattern -i .jpg 1440 90% 129600 reload-into-ims
Git2Cet SR)@'-Wd refresh_pattern -i .png 1440 90% 129600 reload-into-ims
'?fn} V Y u^ } refresh_pattern -i .bmp 1440 90% 129600 reload-into-ims
W\DJXM]b &zP\K~Nt refresh_pattern -i .js 1440 90% 129600 reload-into-ims
m}
=<@b:l +fIyeX (完)
JR_c]AQYu L?y,xA_ [7)#3 wVs |mG" 需要改的地方是访问控制设置中的子网改成你自己的子网。其他的地方可根据需要调整。不改也可。
-gS/ M[T!AO-S$ 如果不使用日志,将日志设置部分改成如下句子:
p:U{3uN 62 3^&pb cache_store_log none
h"nv[0!) 0$nJd_gW_ cache_access_log /dev/null
|@)ij c4i bL7mlh cache_log /dev/null
!C0=
h b}q,cm WUi7~Ei} %}&9[# 添加squid系统用户和组
L'h'm{i xhMdn3~U # pw groupadd squid
2I39fZa ?Z7C0u#wd # pw useradd squid -g squid -s /sbin/nologin
V'?nS&,i 54LCoG/ 建立cache目录
9zd)[4%= (C QgT3V # mkdir /usr/local/squid/cache
IPE( 55N/[{[ 改变cache目录和logs目录的所有者为squid用户和组
a. 5`Q2 ~JT{!wcE}o # chown –R squid /usr/local/squid/cache
!*#=7^# ;6)|'3.B9 # chgrp –R squid /usr/local/squid/cache
CnA*o 8w Kd,m;S\ # chown –R squid /usr/local/squid/var/logs
XJOo.Y anV)$PT= # chgrp –R squid /usr/local/squid/var/logs
!8s:3] khu,P[3> 运行squid –z建立cache目录结构
pV-.r-P \S2'3SDd/ # /usr/local/squid/sbin/squid –z
Wj*6}N/ wy&*6>. j+ys&pDczm Pr/&p0@aV 测试squid运行情况
CC87<>V C,z]q$4 # /usr/local/squid/sbin/squid –NCd1
1Q;`<= )DLK<10 出现下面显示证明squid安装成功
3i$AR p9sxA|O=y
2003/06/21 18:01:09| Starting Squid Cache version 2.5.STABLE3 for i386-unknown-freebsd4.7...
4-n.4j| bKaV]Uy 2003/06/21 18:01:09| Process ID 160
u})JQ<| \)"qN^we 2003/06/21 18:01:09| With 957 file descriptors available
?%0i,p@< QY fS- 2003/06/21 18:01:09| Performing DNS Tests...
"7
4 L ]V]o%onW 2003/06/21 18:01:09| Successful DNS name lookup tests...
XF$C)id2p bU,&|K/ 2003/06/21 18:01:09| DNS Socket created at 0.0.0.0, port 1029, FD 4
BPOWo8TqD^ &]c9}Ic 2003/06/21 18:01:09| Adding nameserver 202.97.224.68 from /etc/resolv.conf
hg>YOf&RG ! O>mu6:Rf 2003/06/21 18:01:09| Unlinkd pipe opened on FD 9
Yr,1##u
^~ I 2003/06/21 18:01:09| Swap maxSize 1048576 KB, estimated 80659 objects
+%~g$#tlJo t-Fl"@s 2003/06/21 18:01:09| Target number of buckets: 4032
wIiT
:o V)Xcn'h 2003/06/21 18:01:09| Using 8192 Store buckets
zj)[Sntn? DpR%s",Q 2003/06/21 18:01:09| Max Mem size: 32768 KB
i!nl%% %?$"oWmenS 2003/06/21 18:01:09| Max Swap size: 1048576 KB
JZ7-?
o nC Z 2003/06/21 18:01:09| Store logging disabled
Fy@D&j d$Xvax,C 2003/06/21 18:01:09| Rebuilding storage in /usr/local/squid/cache (DIRTY)
U\z+{]<< w/<hyEpxg 2003/06/21 18:01:09| Using Least Load store dir selection
=w5w=qB rYqvG 2003/06/21 18:01:09| Current Directory is /usr/local/squid/etc
33C#iR1(WJ lqs_7HhvRS 2003/06/21 18:01:09| Loaded Icons.
;Os3
! <Jk|Bmw; 2003/06/21 18:01:09| Accepting HTTP connections at 0.0.0.0, port 3128, FD 8.
i\'N1S<D #>V;ZV5" 2003/06/21 18:01:09| WCCP Disabled.
}A;Xd/,'r 334*nQ 2003/06/21 18:01:09| Ready to serve requests.
wDG4rN9x KKzvoc?Bt 2003/06/21 18:01:16| Done scanning /usr/local/squid/cache swaplog (0 entries)
RinRQd btE+.V 2003/06/21 18:01:16| Finished rebuilding storage from disk.
/ u{r5`4
lb('r"*. 2003/06/21 18:01:16| 0 Entries scanned
"869n37 J5"*OH:f 2003/06/21 18:01:16| 0 Invalid entries.
*$1)&2i 5%$#3LT| 2003/06/21 18:01:16| 0 With invalid flags.
k4P.}SJ? V+q RDQ 2003/06/21 18:01:16| 0 Objects loaded.
>4E,_ `3N P;/T`R=Vr" 2003/06/21 18:01:16| 0 Objects expired.
'$VR_N\ hg~fFj3ST 2003/06/21 18:01:16| 0 Objects cancelled.
]=3O,\ J @fE") 2003/06/21 18:01:16| 0 Duplicate URLs purged.
V_QVLW k|D!0^HE[ 2003/06/21 18:01:16| 0 Swapfile clashes avoided.
VGq]id{*$ .wSAysiQ|P 2003/06/21 18:01:16| Took 7.3 seconds ( 0.0 objects/sec).
v>5F[0gE GXl?Zg 2003/06/21 18:01:16| Beginning Validation Procedure
V_kE"W) '9gI=/29D 2003/06/21 18:01:16| Completed Validation Procedure
4Ojw&ys@V U{Z>y?V/ 2003/06/21 18:01:16| Validated 0 Entries
^J_hkw~gO qr9F 2003/06/21 18:01:16| store_swap_size = 0k
[8w2U%}] YB|9k)Z2[ 2003/06/21 18:01:17| storeLateRelease: released 0 object
kes'q8k $%-?S]6) 否则根据提示检查配制文件。
Ymu=G3- 11sW$@xs
9 O#\>j 5PPpX =\ 为了使squid的透明代理起作用,需要设置端口转发。方法如下:
oX~CTunP wW4S@m 编辑/etc/rc.firewall文件,添加下面一句
"q.uiz+1: di5_5_$`o ipfw add 00500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
%U7B0- hz%IxI9 ap~Iz xTMTkVa+B 下面建立squid的启动脚本squid.sh:
;GSJnV *&]l 首先建立/usr/local/etc/rc.d目录
2LU'C,o? UJ[a&b # mkdir /usr/local/etc
$EIkk= z D,/9rH # mkdir /usr/local/etc/rc.d
/(aX>_7jg A2d2V**Z # cd /usr/local/etc/rc.d
gOM`I+CwT pS;dvZ # vi squid.sh
D.b<I79bX ,0bM*qob 文件内容如下:
MVdx5,t :N}KScS|Wa #!/bin/sh
b*KZe[#M1 W\7*T1TDj v_0!uT5~NE KoJG!Rm #if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
r
`dU
(T! -huZnDN # echo "$0: Cannot determine the PREFIX" >&2
=jt_1L4 sBnPS[Oo # exit 1
beE%%C]X K~-XDLh5Nu #fi
@`D6F;R s_!Z+D$K ~x:]ch| -;$/< case "$1" in
vM/v}6;_K2 AtDrQ<>y' start)
$lA,{Q )g_zPt if [ -x /usr/local/squid/sbin/squid -a -f /usr/local/squid/etc/squid.conf ]; then
^E17_9? ,IE0+!I (cd /usr/local/squid/var/logs; /usr/local/squid/sbin/squid >/dev/null 2>&1 &) ; echo -n ' squid'
di2=P)3 /g''-yT7# fi
ASw|sw Zd ,= ;;
V bOLTc {2^@jD stop)
9AzGk=^
,r;d { /usr/local/squid/sbin/squid -k shutdown 2>&1
]H~,K ]@. dy?|Q33Y" # Uncomment this if you'd like the system to (attempt to
XH$|DeAFM q&T'x> / # wait for) squid to shut down cleanly
f*}E\,V"& CJ #echo "Sleeping for 45 seconds to allow squid to shutdown.."
RJ4mlW /8\&f%E #sleep 45
+Uq:sfj, `r(J6,O ;;
/ASI0h oH0F9*+W *)
3G|fo4g Y26l,XIV echo "Usage: `basename $0` {start|stop}" >&2
+lJ]-U|P 8T
)ELhTj ;;
JSK5x(GlH ,D,f9 esac
y|{?>3 #`0z=w/) ya g }#5roNH~Z exit 0
C/XyDbH h##?~!xDmq (完)
^!_7L4&y Vj`s_IPY 5G;^OI!g WV"QY/e3 这样每次启动后,squid就会自动运行。
E=lfg8yb: b2%bgs 运行/usr/local/etc/rc.d/squid.sh start 启动squid
]},Q`n>$ %uqD\`- 运行/usr/local/etc/rc.d/squid.sh stop 停止squid
F{~r7y;0 @ ]wem ULmdt
{0WIDD 关于域名的问题
4Xk;Qd F6]!?@ 如果需要对外提供www服务,域名必不可少。域名分静态和动态域名两种,网上提供二级免费域名的站点有很多,本文例子的域名wwwx.3322.org就是在希网申请的(
http://www.3322.org )。希网同时提供支持FreeBSD客户端的动态域名服务。如果是使用拨号上网的情况,则需要使用动态域名服务。由于拨号方式获得的ip地址是变化的,因此动态域名需要每次拨号上网后,客户端运行域名更新程序与服务端联系,使得申请的域名可以随时指向变化的ip地址,以完成动态域名解析服务。希网的网站上提供了详细的在FreeBSD上安装动态域名客户程序的方法,详情参见
http://www.3322.org/help/help_service.html#service_3 。大家可以到那里去下载客户程序并按照说明安装。另外一个比较好的提供免费动态域名服务的网站是科迈网,他们的动态域名可以支持内网机器的域名解析。详细内容大家可以到他们的网站上去看,
http://www.dns0755.net 。
1";e'?^x X3iRR{< @ D s,"E#? h=r<
B\Pa 第三步:安装配置web服务器
P3ev4DL L4*fF K |} ]< JD`;,Md 注意:在进行这步操作前建议把squid关掉,因为在进行主页更新测试时squid的cache会使更新后的主页不能及时反映出来!
udI:]:,P | O+># 为了不使用squid,除了关掉squid外,还要删除ipfw的透明代理端口转发语句:
qS}RFM5| BBE1}V!u
# cd /usr/local/etc/rc.d
^^3va)1{! x][9ptrh # ./squid.sh stop
^1yTL5#:Vw 4m[C-NB!g # mv squid.sh squid.sh.bak
cW\Y?x
Yk@s"qm3 # ipfw del 500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
::Q); \If!5N u+'@>%7 -L3
|9k
本web服务器的其本组成为
bW.zxQ: *
r4/|.l Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
^'53]b: P9mxY*K)%5 "q>I?UcZ gXLZ) >+A+ 为了简化安装过程并发挥FreeBSD安装软件的优势,本文后续部分将采用ports安装。Ports 使在FreeBSD下安装各种软件变得很轻松。
;@YF}%!+W xgqv2s>L ],}afa!A wt=>{JM 首先安装ports:(如果已经有/usr/ports目录则证明已经安装过了)
AH87UkNL Vt)\[Tl~ # /stand/sysinstall
2{]S_. zV b|8>eY 选Configure—Distributions—ports,ports将被安装在/usr/ports目录中。
,#jhKnk2e +9
p`D 2|H91Y2 &c?hJ8" 下面安装apache1.3.27+modssl
Ed0>R<jR9 q|$>H6H4b # cd /usr/ports/www/apache13-modssl
8xpYQ<cax NRuG?^/}d # make install
#[0\=B- $ X=D9h 系统会自动下载安装包并安装完毕。
ctUF/[_w; _
kSPUP5 安装后系统会自动产生启动脚本apache.sh,在/usr/local/etc/rc.d目录中。可以通过运行apache.sh start|stop来启动或停止apache。
+V+*7s%fL r~G]2*3 *[1u[H9Cv +=*m! 7Mr 安装mysql3.23:
"kBqY+:Cn P2Qyz}!wo # cd /usr/ports/databases/mysql323-server
r{B,uj" fByh";<`P # make install
l88a#zUQDN &c<}++'h 安装后产生启动脚本/usr/local/etc/rc.d/mysql-server.sh
@FdCbPl$ JfP\7 <X I35\^ 4>"cc@8&~ 安装apache模块mod_php4:
4lh
Ux)p%- # cd /usr/ports/www/mod_php4
q4.dLU,1 'f?&EsIV? 首先编辑scripts目录下的configure.php文件,加入对OpenSSL的支持
tC@zM.v% mQ^@ \s # vi scripts/configure.php
o&XMgY~ OBw`!G*w 找到下面一句
_[{:!?-? ,7fc41O3V OpenSSL "OpenSSL support" ON \
'=Kof1 (&P0la1 改成
gR-Qj qv0
DrL,3 OpenSSL "OpenSSL support" YES \
`l gjw= )_c=mT EB29vHAt~ dp[w?AMhM9 # make install
B/sBYVU [*?_ 出现对话框时直接选ok继续
}@:QYTBi } O{B
e )E~ csdOIF +F7<5YW&( 安装完成后编辑apache的配制文件/usr/local/etc/apache/httpd.conf ,添加如下内容:
g",w kO| d(DX(xg xf^<ec >Z2,^5P{ # 设置默认可以使用的主页名称,这句系统一般已经有了,不用添加了
;la#Vf:] s7.p$r DirectoryIndex index.php index.html
FfYd+]+? E &];>3C 3m43nJ.~ "'F;lzq # 这2句需要手工添加
0Y6q$h>4 $p0 /6c AddType application/x-httpd-php .php
DD@)z0W O+E1M=R6h AddType application/x-httpd-php-source .phps
aucZJjH S[L#M;n %CxEZPe$ ie$`pyj!x 安装其他apache常用模块mod_gzip+mod_fastcgi +mod_perl
(!0j4' dDqr
B-G *1Ut} W8G9rB|T # cd /usr/ports/www/mod_gzip
MS st b@2Cll# # make install
C?w<$DU &$b\= TDAWI_83- t":W.q< # cd /usr/ports/www/mod_fastcgi
%K%^ ]{ q?imE ~&U # make install
dq
YDz 7>'uj7r]= 编辑/usr/local/etc/apache/httpd.conf文件
e' U"`)S " xDx/d8B 添加下面一句
UK"}}nO@e ':!3jZP"m AddHandler fastcgi-script fcgi fcgi fpl
yV J dZ I ^nHB1"OCV XDpfpJ,z"} n%0]V Xx# # cd /usr/ports/www/mod_perl
2/v35| ? 6 Iv( # make install
$Wr\[P: tLD~ *t#s$Ga A$%Q4jC} 重新启动让所有软件自动运行。