(一、系统安装)
TjxA#D) +Gow5-( r$ =qQ7^# zN%97q_ 前言
yG\UW&P 1]T|6N? /%!~x[BeJ> e'34Pw!m 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
iRNLKi L;S}s, 2x 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
e # 5BPI LEZ&W;bCo 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
;$7v%Ls= PnA?+u2m 本连载文章前后关联很紧密,建议初学者一步一步来做。
8u>gbdU y%S})9 试验环境如下:
" !-Kd'V }# Doy{T 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
v8m`jxII64 C`QzT{6! 软件环境:操作系统:FreeBSD4.7(4.8)
iCP~O Pz%~ST web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
D<bI2 Lu=O+{*8 ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
^/toz).Q 8YX)0i' mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
3-C\2 Ja|{1&J. proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
px=]bALU n*<v]1 视频点播服务器:Helix Universal Servevr (realserver9.01)
.po>qb6 o_f-GO 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
e\F}q)_ G>w+#{( "$| Zr BtsdeLj| 第一步:安装系统
hi|! c7K!cfO:{N 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
E"qFXA> ;JT(3yK4>p 1、 采用最小化安装。
&w85[zs D//=m= 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
!:3.D, +&5'uAe 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地址)。以下除系统安装部分,我都是采用终端方式操作。
}Cj8 d(;4`kd*N 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
D."=k{r. %d2!\x%bG 128M /
BI/&dKM I4=Xb^Ux 20G /home
=rFN1M/n{E
|yKud 2G /ftp
&;c>O
)h_8vO2 256M /tmp
(dqCa[ =-#G8L%Q 6G /usr
QR0(,e$Dl h/)_)
r.x 5G /var
asVX82< hH>``gK 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
o6a0'vU>< W\cjdd 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
,SUT~oETP )d`mvZBn1 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
Da.G4,vLh Ak@Dyi?p 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
[
MyE2^ UzG[:ic% # /stand/sysinstall
mJ5H=&Z ldqLM 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
FwG!> <RXw M6G2 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
pQa:pX ' cIEc1y 转到内核文件目录
O.QK"pKD\ FX}Gt= # cd /usr/src/sys/i386/conf
ezm&]F` n3KI+I%nQ 编辑内核文件
ZZxk]D< *O~e
T # vi kernel_wwwx # kernel_wwwx为我的内核文件名
lDU_YEQ> Um`!% 我的内核文件如下:
W7sn+g\ |~0UM$OB^3 #
i|WQ0fD 4hs)b # GENERIC -- Generic kernel configuration file for FreeBSD/i386
Fhf<T` EGVM)ur #
mtAE ?C-Towo=i # For more information on this file, please read the handbook section on
78 f$6J q qv*7K@ # Kernel Configuration Files:
@N@F,~[RR2 3gEMRy*+ #
HD>q(cK_|8 bulS&dAX #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html YJeyIYCs< #5} wuj%5 #
YJV% a W?woNt'n # The handbook is also available locally in /usr/share/doc/handbook
4rg2y] Xf[kI # if you've installed the doc distribution, otherwise always see the
^teq[l$; zeb=8Dg
: # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
Mkxi~p%<r IxZb$h[ # latest information.
ULJ mSe L{-LX=G^ #
=c.5874A` fWnD\mx?0 # An exhaustive list of options and more detailed explanations of the
]6r;}1c
=FP0\cQ. # device lines is also present in the ./LINT configuration file. If you are
j=RRfFg) ypOLp SYk # in doubt as to the purpose or necessity of a line, check first in LINT.
]:M0Kj&h (V`Md\NL` #
w8S!%abl1 !9Z r;K~\ # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
dP?Ge} -a,-J]d0+ HBS\<} q[q?hQ/b machine i386
soA|wk\A a8k; (/ cpu I586_CPU
L!0OC''C W&*f#E cpu I686_CPU
zi R5:d3 . o7m! ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
,mhQ"\ +C kft#R#m maxusers 0
xsd_Uu* y&}E~5O ^k5ll=} %VYAd)gC options INET #InterNETworking
N{
Z
H IG)s^bP options FFS #Berkeley Fast Filesystem
;c~cet4 S#)Eom?V options FFS_ROOT #FFS usable as root device [keep this!]
/Jf.y*; L^2FQti> options SOFTUPDATES #Enable FFS soft updates support
dm0QcW4 D]w!2k%V options UFS_DIRHASH #Improve performance on big directories
fkf1m:Ckh S}APQ options PROCFS #Process filesystem
JD@J[YY5R Tc8un. options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
N\:.
M O5$/55PI options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
&j(+ /;A Ee4&g<X. options SYSVSHM #SYSV-style shared memory
?]D"k4 W;bu2ym&Q options SYSVMSG #SYSV-style message queues
3)-/`iy# j83p)ido options SYSVSEM #SYSV-style semaphores
I}Nd$P)> _ZY)M options P1003_1B #Posix P1003_1B real-time extensions
?\C"YG69T C<KrMRWh^ options _KPOSIX_PRIORITY_SCHEDULING
(Yp+bS(PU* %K(<$! options ICMP_BANDLIM #Rate limit bad replies
pw7[y^[Qg @u==x*{| options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
f$NM M
>z ml \4xp, # output. Adds ~128k to driver.
o-}R?> :ba5iMa options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
2M#r] 3nZo{p:E # output. Adds ~215k to driver.
,%\o4Rc'o \
[a%('} sR/b$j>i3 O'Js} device tun 1
W6On93sa 9Xx's%U options IPFIREWALL #防火墙
m(pE5B( ()~pY!)1/ options IPFIREWALL_FORWARD #允许透明代理
7S?4XyU/o \[Z?& options IPFIREWALL_VERBOSE #允许防火墙日志
.e_cgad : ^]{R.(#z options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
ByCnD `jwa<N4e@ options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
jDQZQ NS s
kg* options IPDIVERT #启用由ipfw divert使用的转向IP套接字
]XI*Wsn /_`lz^ gx%|Pgd ABUSTf< # To make an SMP kernel, the next two are needed
@}u9Rn*d; ],P;WPU #options SMP # Symmetric MultiProcessor Kernel
v{}#?=I5 ,"B+r6}EF #options APIC_IO # Symmetric (APIC) I/O
Iu$K i lP<:tR~K '` pDngX <~ Sz04 device isa
7)s^8+ *zr(Zv device eisa
r$2P;Cxj AhZ8 0! device pci
N!g9*Z tKpmm`2 9<KAXr# 1Tu
*79A .'Vww S#+h$UVh # ATA and ATAPI devices
*4V=z# \hB5@e4i2 device ata
uDEvzk42 V7/I>^X device atadisk # ATA disk drives
Q[nEsYP mauI42 k+ze74_" fMOU$0]$< R~Ne|V2 9(@\&>) # SCSI Controllers #没有SCSI设备不需要这段
XGl+S mvq&Pj 1}L device ahb # EISA AHA1742 family
`QXErw :s4p/*f device ahc # AHA2940 and onboard AIC7xxx devices
b,CaWg WL'P)lI5 device ahd # AHA39320/29320 and onboard AIC79xx devices
]MxC_V+P` {7)st
W device amd # AMD 53C974 (Tekram DC-390(T))
ub|V\M{ Yl3n2R /U device isp # Qlogic family
5-M&5f. |`cKD > device mpt # LSI-Logic MPT/Fusion
zzxGAVu ,lyb!k8 device ncr # NCR/Symbios Logic
}`@728E
E2m8UBS device sym # NCR/Symbios Logic (newer chipsets)
JYTP
2 Y./2Ely options SYM_SETUP_LP_PROBE_MAP=0x40
JfR%L q~ m}X`> aD/ # Allow ncr to attach legacy NCR devices when
1;{Rhu7*
k 2RX!V@z.G # both sym and ncr are configured
sQ
fFu L31HGH2l 8?%-'z. vMS
|$L device adv0 at isa?
0PWg;>^' Rb.SY{}C device adw
g[3)P+ 9^j &VmF device bt0 at isa?
!P-^O ~m$Y$,uH device aha0 at isa?
)gMG#>up@ ~P@Q7T* device aic0 at isa?
ypy68_xyW PS[+~>% mFi&YpHu3 S;)w. device ncv # NCR 53C500
6Aku1h tQjLOv+?= device nsp # Workbit Ninja SCSI-3
} q$ WvY/ =F@Wgn, device stg # TMC 18C30/18C50
(JM5`XwM
9o+)?1\ QDhOhGK (_"*NY0 # SCSI peripherals #没有SCSI设备不需要这段
T7#W0^tj 07[_.i.l device scbus # SCSI bus (required)
o}$EG VSSu&Q device da # Direct Access (disks)
Ba!J"b] *3?'4"B{8 device sa # Sequential Access (tape etc)
Dp':oJC iB498t device cd # CD
3J5!oF{H 'JRvP!] device pass # Passthrough device (direct SCSI access)
`tn{ei [xGf,;Z |y2w9n0D k@'#@
t smnSDS oIduxbAp fc
|GArL#} nYX@J6! # atkbdc0 controls both the keyboard and the PS/2 mouse
o:_Xv.HRZo W`u[h0\c device atkbdc0 at isa? port IO_KBD
fyByz=pl P3=W|81e device atkbd0 at atkbdc? irq 1 flags 0x1
,=#F// BYMi6wts o<|P9#(U" }3OKC2K~ device vga0 at isa?
W;,C_ 6Q${U7%7 y$_eCmq "\3B^ e, "t~ ;oy-#p>N% # syscons is the default console driver, resembling an SCO console
])nPPf Y9&,t\ q device sc0 at isa? flags 0x100
rl#p".4q BBtzs^C| 3G(miP6 %y@Hh= p{j.KI s7 <psZQdH # Floating point support - do not disable.
.n~M(59 Np"exFqN k device npx0 at nexus? port IO_NPX irq 13
j'HZ\_ Bq$rf < W t({W
[JL D?NbW @] #6CC3TJ'k [D<1CF # Serial (COM) ports
C,NJb+J /JWGifH device sio0 at isa? port IO_COM1 flags 0x10 irq 4
ybY]e; v*O ZOZ+ Y\uU eep1I
:N opc/e # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
~NpA".PB A}3=561F?5 # 使用公共的MII总线控制器代码的PCI以太网适配器
m>MB7,C;N "-vW,7y # 注意:一定要保留'device miibus'以确保可用
]hFW73FV (adyZ/j # PCI Ethernet NICs that use the common MII bus controller code.
F;7dt@5; :{q<{^c # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
$3s@}vLd '*"vkgN device miibus # MII bus support
Nn T1X;0W *1fb}C_ device fxp # Intel EtherExpress PRO/100B (82557, 82558)
Aj+2;]M .P7"e5ge device rl # RealTek 8129/8139
iqe%=%ZR V4KMOYqm device vr # VIA Rhine, Rhine II
c'S,hCe* 4\4FolsK device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
lXjXqk\ ]Ccg`AR{ 4UW_Do !BOY@$Y # Pseudo devices - the number indicates how many units to allocate.
%)0*&a 4 R]RZq+2^ pseudo-device loop # Network loopback
\E*d\hrl{ 3%(N[&LU pseudo-device ether # Ethernet support
id2j7|$, F7O(Cy"1 pseudo-device sl 1 # Kernel SLIP
i5CK*"$Q CTZh0x pseudo-device ppp 1 # Kernel PPP
U qFv}VsnF "saUai4z pseudo-device tun # Packet tunnel.
\xnWciQ#{ ^HqY9QT2 pseudo-device pty # Pseudo-ttys (telnet etc)
v33dxZ' 1ke g9] pseudo-device md # Memory "disks"
&3TEfvz ,I%g|'2 pseudo-device gif # IPv6 and IPv4 tunneling
HLV2~5Txc !3*(N8_|# pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
[&#/]Ul' 3<
2}V aD=A^ktx j ~1B|,H # The `bpf' pseudo-device enables the Berkeley Packet Filter.
Zf65`K3 b-{=s+: # Be aware of the administrative consequences of enabling this!
Vp3ZwS oaoU _V pseudo-device bpf #Berkeley packet filter
/ ;,Md,p _YLfL (完)
lna}@]oR =A!@6Nw .`4{9?bR g!+|I 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
'~&9D:( #py[ 接下来编译安装新内核:
|ayVjqJ* }l],.J\BGX # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
PGLplXb#[S ~s]iy9i # cd ../../compile/kernel_wwwx
8p@Piy{p [g:$K5\64 # make depend
/M3Y~l$ /qy-qUh3h # make
pJt,9e6 JSTuXW # make install
O"c;|zCc> EB2!Hp uQ3 重新启动(reboot)
-wSg2'b4E 1>E<8&2[L ZRg;/sX] f-E("o 如果系统升级过源代码树,按下面方法编译内核:
t 0|!(3 oIb|*gX^ # cd /usr/src
Vc2A n3D;"a3 # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
d[V;&U o8-^cP1 重新启动
LS88.w\=S@ Zy(W^~NT f v9V7 pnbIiyV FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
wT:b\km:! t-0a7
1#e -<
&D g#t[LI9(F[ 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
}7
c[Q($K \V*xWS 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
.5y+fL fH> NJK; # vi /etc/ppp/ppp.conf
}Hxd*S 4bn(zyP 我的ppp.conf文件内容如下:(注意set前要留空格)
%
<qw U~j
^I^ default:
elFtBnL' */|9= $54 set log Phase tun command
MgNU`` 6Qy@UfB set ifaddr 10.0.0.1/0 10.0.0.2/0
!=:$lzS^ /x[jQM\ adsl: # 配置代号
7|[mz> "d vDxe/x% set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
B9H@e#[ li 6%) set mru 1492
@qnD=mE 6w(6}m.L^ set mtu 1492
U}PiY"S< _G.>+!"2/
set authname username # username是拨号用户名
UM6(s@$ s8#X3Rp set authkey password # password是拨号密码
*UmI]E{g3( Q&eQQ6b^Ih set dial
M #=]
k cQ"~\ set login
}C>{uXv _oUHJ~&, add default HISADDR
(Yis:%c\! qycI(5S, (完)
dOoK Lry Jh?dw3Ai^ rjP L+T_ j(k:
@ # vi /etc/rc.conf
70;Jl).\{ [.S#rGYk 我的rc.conf文件内容如下:(动态ip)
S4h:|jLUF *?Kr*]dnLl # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
;F~LqC$ K/3)g9Z&io # Created: Tue Jul 15 21:20:28 1997
3T}izG] ],JEBt # Enable network daemons for user convenience.
XoCC/ yA.4G_|I # Please make all changes to this file, not to /etc/defaults/rc.conf.
=<X?sj5 a8i]]1Blz # This file now contains just the overrides from /etc/defaults/rc.conf.
3MY(<TGX J~1r{5V4{ hostname="wwwx.3322.org" # 你的主机域名
=UJ:t Sr (v}>tb*#` ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
.D:Z{|.1 Z<SLc,]^ inetd_enable="YES" # 开机加载inetd
JA'h4AXk 0;:.B
j kern_securelevel_enable="NO"
Wr3mQU [I$BmGQ linux_enable="YES"
u*tN)f3 C~N/A73gF nfs_reserved_port_only="NO"
mqAWL:VvQ7 :xh?eN& sendmail_enable="NO"
d_)o
YH%'t=
<m sshd_enable="YES"
0DmMG (h5'9r usbd_enable="NO"
G_k~X" aP8H`^DFX> gateway_enable="YES"
R&Jm
+3N CO2C{~Q5 firewall_enable="YES" #启用防火墙
]zQo>W$ w[!^;# firewall_script="/etc/rc.firewall"
gUpb4uN #z2rzM@/: firewall_type="open"
4)"n
RjGg bLQ ^fH4ww firewall_quiet="YES"
I*IhwJFl/ 7_mw%|m6@ firewall_logging_enable="YES"
=RAh|e ALNc'MW! ppp_enable="YES" # 开机自动拨号
-Gw$#! %T)oCjM[\ ppp_mode="ddial"
kWe{r5C7 }2uI?i8 ppp_nat="YES" # 启用透明代理
hvuIxqv !y %9M~f* ppp_profile="adsl" # 配置代号
0LfU=X0#7 &znQ;NH# # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
KA){''>8 & M~`:R (完)
LF~*^n> Ircp``g 9f',7i ZP;j9T! 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
_=NwQu\_F }p!HT6 tZ 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
/u0'
6V 5fm?Lxr&? kIGbG;"_ 9P~\Mpk 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
+H9 >A0JF OnF3l Cmu 我的/etc/rc.conf文件如下:(静态ip)
IZ=Mlu HE'2"t[a # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
{iv<w8CU) l411a9o # Created: Tue Jul 15 21:20:28 1997
O=$~O\}b n< ud> JIb # Enable network daemons for user convenience.
<HJl2p N "=+7-` # Please make all changes to this file, not to /etc/defaults/rc.conf.
gx&Tt #%D_Y33; # This file now contains just the overrides from /etc/defaults/rc.conf.
t: IN,Kl4 FRS>KO=3 hostname="wwwx.3322.org" #主机域名
{2+L@ Mnz!nWhk defaultrouter="218.10.104.1" #服务商提供的路由器地址
#ssN027 g q}I[N ifconfig_vr0="inet 218.10.104.188 netmask 255.255.255.0" #服务商提供的静态ip
2A\,-*pc W ]Nv33i
[ ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内部网卡ip
Ci<ATho ;Wl+zw inetd_enable="YES" #开机加载inetd
*_KFW@bC: ,Vh{gm1 kern_securelevel_enable="NO"
^ mS
o1?< |6(ZD^w linux_enable="YES"
B"v.*
%"&/ UY <e&Npo nfs_reserved_port_only="NO"
ObE,$_ k ;+tpvnV;] sshd_enable="YES"
GD:4"$)[o >9f%@uSM$3 sendmail_enable="NO"
>TP7 }u| V
hk_ usbd_enable="NO"
`"@g8PWe u&9 r2R959 gateway_enable="YES"
5i-Rglo j8n4fv-)f firewall_enable="YES"
PIWux{ \igmv]G% firewall_script="/etc/rc.firewall"
w1Ec_y { zt<WXw( firewall_type="open"
h^*4}GU bg3"W,bv% firewall_quiet="YES"
~O]]N;>72" MzP7Py
8. firewall_logging_enable="YES"
;i"*Ll>Q) Rt{B(L.?< natd_enable="YES" # 启用透明代理
V %_4% %rF?dvb;? natd_interface="vr0" # natd接口,vr0为连接外网modem的网卡
Hsihytdj RiTa \ # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
UTSL _9?I A (完)
Qq@G\eRo 3"kdjOB 9Li%KOY `iJhG^w9M 重起后网络连接及透明代理生效。客户端同样要按上面说的方法配制。
fsEzpUY:{W h@@nR(<i eXkujjSw" (__yh^h:m 使用Squid:
7;tJK^J` !bD@aVf?5 Squid是一个非常不错的代理缓存软件。我曾经一直在使用,后来因为我经常要改变web服务器里的网页,而Squid总是把我以前的页面缓存,致使不能马上反映页面的更新情况,再加上公司上网的负担不是很重。所以就不用了。
p[@5&_u(z <n:}kQTT 安装方法:
Zo}y(N1K} rx5B=M 在FreeBSD下安装软件最方便的方法是使用ports。本文为了让大家对通用的软件安装方法做一定的了解,我们采用通用的方法来安装squid,也就是说,下面的方法同样适用于linux或其他unix版本。
xy<`# 90#
;?# I"t(%2*q v @O&t4 在ylf的用户目录下创建目录app用来存放程序安装临时文件:
V=X:= ; h`0ir4[A # mkdir /home/ylf/app
)m&U#S _; H%1$,]F 将用户ylf设为/home/ylf/app目录及其子目录的所有者
Maqf[
Vky p)=~% 7DV # chown –R ylf /home/ylf/app
YqV8D&I {66fG53x 到
http://www.squid-cache.org/Versions/v2/2.5/ 下载squid 的最新稳定版本,现在是squid-2.5.STABLE3
sjM;s{gy 8`]=C~G 打开IE浏览器,在地址栏输入
ftp://192.168.0.1 ,出现ftp登陆对话框,输入用户名ylf及密码,登录成功后。将下载的squid-2.5.STABLE3复制到app目录中。
QeDQo ?hR7<02 执行如下命令:
WnHUE Y];Ycj; # cd /home/ylf/app
qTB$`f'|$ HJC(\\~ # tar zxvf squid-2.5.STABLE3.tar.gz #解压缩安装包
i,nm`Z>u bC^(U`y 32 # cd squid-2.5.STABLE3 #进入解开的目录
'i8U ]u-02g # ./configure --prefix=/usr/local/squid #配制、将squid安装在/usr/local/squid目录
z**hD2R! oR~e#<$; # make all #编译
97,rE$bC 20TCG0%x # make install #安装
bpkwn<7- lg}HGG 下面编辑squid的配置文件:
+xXH2b$wWC e8EfQ1 Ar # cd /usr/local/squid/etc
gUAxyV v`c$!L5 将原来的配置文件改名
v6GsoQmA jhGlG-^ # mv squid.conf squid.conf.bak
S\wW)Pv8 ;c-3g] 编辑新的配置文件
;&b%Se@#p u0RS)&
# vi squid.conf
ZL<
MC~ \#rO!z
d 我的squid.conf内容如下:
CN2_bz ,WQ^tI=O =l9T7az &W6^6=E{g #取消对代理阵列的支持
k{AyD`'Q mF09U(ci icp_port 0
a{!r`>I\f 3SBZ> o:Zd1"Z d vOJW". #对日志文件和pid文件位置进行设置
7dX/bzUVz8 rxO2js cache_store_log none
UkfB^hA 3I|3wQ ( cache_access_log /usr/local/squid/var/logs/access.log
q+a.G2S Qpt&3_ cache_log /usr/local/squid/var/logs/cache.log
zTD@ <8#ObdY! emulate_httpd_log on
*zWWmxcJa 4.K'\S pid_filename /usr/local/squid/var/logs/squid.pid
U,lJ"$' >J=<bhR 1#
t6`N]?V L fl-!1 #设置运行时的用户和组权限
?`zgq>R}w[ zQH]s?v cache_effective_user squid
t/Z:)4Z p8+/\Ee]B cache_effective_group squid
~"!a9GZ @-#T5? O4No0xeWo |c2v%'J2G #设置管理信息
8@M'[jT N8!TZ~1$ visible_hostname wwwx.3322.org.
S^f:`9ab9 *o' 4,+=am cache_mgr
yourname@yourdomain.com ecX/K.8l !]S=z^"< -qe bQv l
SkEuN #设置监听地址和端口
3^.8.q(6 \NX Q http_port 3128
*C,N'M<u /.=r>a}l udp_incoming_address 0.0.0.0
2 [!Mx&^ DI&MC9j( YCw('i(| sg'NBAo" #设置squid用户hot object的物理内存的大小以及设置cache目录
6U,fz#<,} d
`j?7Z cache_mem 32 MB
{5Eyr$ !U BVPR* cache_dir ufs /usr/local/squid/cache 1024 16 256
5]7&IDA]]9 '5};M)w 3D)b*fPc :w?7j_p# #访问控制设置
WwW^[k (X ~4)Y#IxL acl mynet src 192.168.0.0/255.255.255.0
*(*+`qZL{( gvnj&h.GV acl all src 0.0.0.0/0.0.0.0
djT.
1( LW39YMw< http_access allow mynet
LxT rG)4 [BBpQN.^q6 http_access deny all
(3md:r<- P 4;{jG &.*uc|{ B50 [O! #透明代理设置
(BERY k_3j
' httpd_accel_host virtual
qa}>i&uO 74zSP/G' httpd_accel_port 80
,w&:_n K!b8= K` httpd_accel_with_proxy on
hXX1<~k 64D%_8#m httpd_accel_uses_host_header on
4&N$: j< 6~Wu` viuiqs5[Bi bV3lE6z #swap 性能微调
):bu;3E , deUsc half_closed_clients off
3#Y3Dz` Q-R}qy5y cache_swap_high 100%
V_;9TC `)[dVfxA cache_swap_low 80%
abZdGnc (5;D7zdA maximum_object_size 1024 KB
/R%^rz'w 7C5pAb: WOO%YU = +8UdvMN #控制对象的超时时间
pN$;! \$;~74} refresh_pattern -i .html 1440 90% 129600 reload-into-ims
G\1J _al Lh 9S8EU refresh_pattern -i .shtml 1440 90% 129600 reload-into-ims
d,R6` i Zu=kT}aGg refresh_pattern -i .hml 1440 90% 129600 reload-into-ims
}
gkP 9bEM#Hj refresh_pattern -i .gif 1440 90% 129600 reload-into-ims
wZv-b*4 n+quSF) refresh_pattern -i .swf 1440 90% 129600 reload-into-ims
0VIZ=-e k_Tswf3 refresh_pattern -i .jpg 1440 90% 129600 reload-into-ims
\/,g VT 9d"5wx refresh_pattern -i .png 1440 90% 129600 reload-into-ims
l^,qO3ES aRKv+{K refresh_pattern -i .bmp 1440 90% 129600 reload-into-ims
k
]bPI$ ?
: md refresh_pattern -i .js 1440 90% 129600 reload-into-ims
@xJCn}`Zj ] SK[C"
S (完)
6F`\YSn+ %FlA":W 4zzlazU E0`[G]*G 需要改的地方是访问控制设置中的子网改成你自己的子网。其他的地方可根据需要调整。不改也可。
MW]8;`|jC Xb+3Xn0}&8 如果不使用日志,将日志设置部分改成如下句子:
vfXJYw+6_ n{{P3f cache_store_log none
}Z-I2
=] taCCw2s-8* cache_access_log /dev/null
m %Y(O s$3`X(Pn cache_log /dev/null
0l1.O2- u0BMyH -,/3"}<^78 9>{t}Id 添加squid系统用户和组
<~O}6HQ# c
`ud;lI # pw groupadd squid
?{j@6, N<"`ShCNM # pw useradd squid -g squid -s /sbin/nologin
%|jzEBz@ /=trj5h 建立cache目录
1uC;$Aj6: ^5>du~d # mkdir /usr/local/squid/cache
"<*nZ~nE) 8;8YA1@w 改变cache目录和logs目录的所有者为squid用户和组
{,F/KL^u +',^((o # chown –R squid /usr/local/squid/cache
lO_c/o$ QmHwn)Ly # chgrp –R squid /usr/local/squid/cache
fPrb% p6[#f96^u # chown –R squid /usr/local/squid/var/logs
GY7s w~{| S7/ # chgrp –R squid /usr/local/squid/var/logs
>3+FZ@.iT V*~423 运行squid –z建立cache目录结构
X/wmKi C{)HlOW # /usr/local/squid/sbin/squid –z
FbBX}n |f3U%2@ [%t3[p<)O enPLaiJ'|q 测试squid运行情况
:4iU^6 Tr$i=
M # /usr/local/squid/sbin/squid –NCd1
e^Aa! %GS\1 Q% 出现下面显示证明squid安装成功
yFi6jN#~ n_u`B|^Pj 2003/06/21 18:01:09| Starting Squid Cache version 2.5.STABLE3 for i386-unknown-freebsd4.7...
j,4,zA1j| `>\4"`I 2003/06/21 18:01:09| Process ID 160
}<.7 xz|V lc"qqt 2003/06/21 18:01:09| With 957 file descriptors available
[='p!7z Fj,(_^ 2003/06/21 18:01:09| Performing DNS Tests...
/_HwifRQ d>;2,srUf 2003/06/21 18:01:09| Successful DNS name lookup tests...
.P8-~?&M mw ?{LT 2003/06/21 18:01:09| DNS Socket created at 0.0.0.0, port 1029, FD 4
D-~G|8g -$OD }5ku# 2003/06/21 18:01:09| Adding nameserver 202.97.224.68 from /etc/resolv.conf
6QW<RXom ,b:n1 2003/06/21 18:01:09| Unlinkd pipe opened on FD 9
VOg/VGJ | yS5[?.` 2003/06/21 18:01:09| Swap maxSize 1048576 KB, estimated 80659 objects
}U(\~
=D Ou? r {$(b 2003/06/21 18:01:09| Target number of buckets: 4032
2q/nAQ+ XN4oL[pO 2003/06/21 18:01:09| Using 8192 Store buckets
Et)920 _ r~+p 2003/06/21 18:01:09| Max Mem size: 32768 KB
'HJ/2-= *$JB`=Q 2003/06/21 18:01:09| Max Swap size: 1048576 KB
D7M0NEY ^t`f1rGR 2003/06/21 18:01:09| Store logging disabled
)&XnM69~b q%DVDq( z 2003/06/21 18:01:09| Rebuilding storage in /usr/local/squid/cache (DIRTY)
Q5hb0O%a 0n\^$WY 2003/06/21 18:01:09| Using Least Load store dir selection
w[e0wh`. >/8ru*Oc 2003/06/21 18:01:09| Current Directory is /usr/local/squid/etc
I'xC+nL@ R04.K! 2003/06/21 18:01:09| Loaded Icons.
c1PViko,> XynU/Go, 2003/06/21 18:01:09| Accepting HTTP connections at 0.0.0.0, port 3128, FD 8.
<sO?ev[ >6XDX=JVI 2003/06/21 18:01:09| WCCP Disabled.
c%jsu" bd} r#^'K 2003/06/21 18:01:09| Ready to serve requests.
y-%nJD$ Xm%iPrl D 2003/06/21 18:01:16| Done scanning /usr/local/squid/cache swaplog (0 entries)
2ve
lH; V;H
d)v(j 2003/06/21 18:01:16| Finished rebuilding storage from disk.
_k6x=V;9g DakLD~H; 2003/06/21 18:01:16| 0 Entries scanned
i^/
eN L7s>su|c( 2003/06/21 18:01:16| 0 Invalid entries.
r>E\Cco hx*HY%\P 2003/06/21 18:01:16| 0 With invalid flags.
`i=JjgG@ h -Tsi:%b 2003/06/21 18:01:16| 0 Objects loaded.
aMBL1d7 S^|$23} 2003/06/21 18:01:16| 0 Objects expired.
+:fqL 5r^1CFO 2003/06/21 18:01:16| 0 Objects cancelled.
Qk+=znJ W]Y@WKeT 2003/06/21 18:01:16| 0 Duplicate URLs purged.
]cn/(U` Fq vQk 2003/06/21 18:01:16| 0 Swapfile clashes avoided.
t8t}7XD
~5FS|[1L 2003/06/21 18:01:16| Took 7.3 seconds ( 0.0 objects/sec).
1NuR/DO fS5GICx8R 2003/06/21 18:01:16| Beginning Validation Procedure
Po'-z<}wS W\&WS"=~ 2003/06/21 18:01:16| Completed Validation Procedure
}Q!h ov Q^*G`&w, 2003/06/21 18:01:16| Validated 0 Entries
*^X#Eb d&NCFx 2003/06/21 18:01:16| store_swap_size = 0k
D8)O4bh \m(ymp<c` 2003/06/21 18:01:17| storeLateRelease: released 0 object
Jq=00fcT+ K5 5} Wi 否则根据提示检查配制文件。
DLNa6 olYPlHF ;RNM caGML|DeI 为了使squid的透明代理起作用,需要设置端口转发。方法如下:
V xp$#3 ;S wy,Jw3 编辑/etc/rc.firewall文件,添加下面一句
wCV>F- #L_@s
d ipfw add 00500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
NS7@8 #C <Gn8B^~$ 4kWg>F3 ]|Ow_z8
O 下面建立squid的启动脚本squid.sh:
N8,EI^W8Z X!,#'&p& 首先建立/usr/local/etc/rc.d目录
x1 .3W j hq5NQi`
% # mkdir /usr/local/etc
'9IP; zY]Bu-S3 # mkdir /usr/local/etc/rc.d
CWE Ejl 6W)xj6<@ # cd /usr/local/etc/rc.d
B*-ToXQQr H(X+.R,Thp # vi squid.sh
/1IvLdPIu ,:v.L}+Z 文件内容如下:
&?KPu?9 4C l,Iw/; #!/bin/sh
o}WB(WsG I(z>)S'7r 9=Y,["br$_ rFKo E% #if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
AeNyZ[40T v(qV\:s}m # echo "$0: Cannot determine the PREFIX" >&2
66I|0_ >&$ $(Bp # exit 1
mgJShn8] B0-4ZT #fi
."~7 \E> t lAdOC5+JX
80{#bb K)yCrEZ case "$1" in
"WF(
6z# >{O[t2& start)
l@,); w=_P B] A 5n8< if [ -x /usr/local/squid/sbin/squid -a -f /usr/local/squid/etc/squid.conf ]; then
Z_iAn TT /W"Bf (cd /usr/local/squid/var/logs; /usr/local/squid/sbin/squid >/dev/null 2>&1 &) ; echo -n ' squid'
s5c! ^,L8 N,WI{* fi
D< nlb- DZHrR:q?e ;;
t`
}20=I+ 9F2w.(m stop)
c*y$bf< LVPt*S= / /usr/local/squid/sbin/squid -k shutdown 2>&1
ke3HK9P; - XE79 fQ # Uncomment this if you'd like the system to (attempt to
/2g)Z!&+L %k/
k]:s # wait for) squid to shut down cleanly
iYO
wB'z ^/`#9]<% #echo "Sleeping for 45 seconds to allow squid to shutdown.."
PphR4 sIM Eg@R[ ^T #sleep 45
=$"zqa.B6 opUKrB ;;
`A4QU,0
8h Bg+<*z-?e *)
y)?W-5zL N&0uXrw echo "Usage: `basename $0` {start|stop}" >&2
O ,Pl7x%tK p?dGZ2` [I ;;
naec"Kut tz\+'6NpOb esac
7&;[an^w <Dt/Rad 1R5\GKF6o R$!;J?SS exit 0
;4-pupK~% m[g< K (完)
|QAeQWP+1 ,z?<7F1q= 2a._?(k_y jMz1s%C 这样每次启动后,squid就会自动运行。
\3n{w
m
wRLzN 运行/usr/local/etc/rc.d/squid.sh start 启动squid
,xtKPA !wLH&X$XT 运行/usr/local/etc/rc.d/squid.sh stop 停止squid
'(3Nopl |d/x~t= >gX0Ij#G nZ`2Z7! 关于域名的问题
[a>JG8[,t }}sRTW 如果需要对外提供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 。
Y{Y;EY4 ps!5HZ2: Z ]7;u>2 \U)2
Tg 第三步:安装配置web服务器
@yU!sE: h}anTFKP GvZac RvyBg:Aj5 注意:在进行这步操作前建议把squid关掉,因为在进行主页更新测试时squid的cache会使更新后的主页不能及时反映出来!
/XWPN(JC? [#hl}q(P# 为了不使用squid,除了关掉squid外,还要删除ipfw的透明代理端口转发语句:
4pfix1F g `mq4WXO\ # cd /usr/local/etc/rc.d
_e:5XQ 0p:ClM2O
# ./squid.sh stop
;+r) j"W .yK\&q[< # mv squid.sh squid.sh.bak
s3MMICRT. "W_jdE6v # ipfw del 500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
w+).pcG(* NgE&KPj\ F(KH- SCfkv|hO 本web服务器的其本组成为
DuO%B V 9QvQA
r Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
dVsAX( 4,w{rmj 0TuOY%+ )F%wwc^r 为了简化安装过程并发挥FreeBSD安装软件的优势,本文后续部分将采用ports安装。Ports 使在FreeBSD下安装各种软件变得很轻松。
`L"p)5H %|D\j-~ Ry8WNVO}R 8zCGMhd 首先安装ports:(如果已经有/usr/ports目录则证明已经安装过了)
6uCk0
B| U<gUX07 # /stand/sysinstall
o/x5
9h3~;Q 选Configure—Distributions—ports,ports将被安装在/usr/ports目录中。
U>L=.\\| pE(<XD3Q 8H3!; ] ,rH)}C<Q+ 下面安装apache1.3.27+modssl
+QXYU8bYZ qa0JQ_?o] # cd /usr/ports/www/apache13-modssl
9p[W :)P4d H%01&u # make install
?G>5 D`V w371.84 系统会自动下载安装包并安装完毕。
*xv/b= XC$+ `? 安装后系统会自动产生启动脚本apache.sh,在/usr/local/etc/rc.d目录中。可以通过运行apache.sh start|stop来启动或停止apache。
Y&05
*b" ](9{}DHV G7/?hky 0. qh)!| B 安装mysql3.23:
-9H!j4]T? DX%8.@ # cd /usr/ports/databases/mysql323-server
S,`Sq8H }<\65 B$1 # make install
d,oOn.n& +4:+qGAJ{ 安装后产生启动脚本/usr/local/etc/rc.d/mysql-server.sh
*(\;}JF- Gh gvRR$ St7D.| 1)/T.q<D" 安装apache模块mod_php4:
ktw!T{ tZNad # cd /usr/ports/www/mod_php4
Yyo9{4v+p{ B yy-Cc 首先编辑scripts目录下的configure.php文件,加入对OpenSSL的支持
o.
V0iS] ,
R.+-X # vi scripts/configure.php
P2
K>|r -YRL>]1 找到下面一句
YW$x: M;p q2$ OpenSSL "OpenSSL support" ON \
[BZ(p l6`d48U 改成
y9G 57D Cj4b]*Q, OpenSSL "OpenSSL support" YES \
YAC zznN )(ZPSg$/F zy/tQGTr@ |{/O)3 # make install
wh7a| Y3MR:{} 出现对话框时直接选ok继续
k,NU,^ & &W!d}, ;
a5U2[Ko80 EkjK92cF 安装完成后编辑apache的配制文件/usr/local/etc/apache/httpd.conf ,添加如下内容:
/<?X-IDz.{ m"|(w`n]E+ 2`FsG/o\T~ dT,m{[+ # 设置默认可以使用的主页名称,这句系统一般已经有了,不用添加了
S~a:1
_Wl WH*=81)zp DirectoryIndex index.php index.html
X_s G6Q@ h&k^l, t!=~5YgKs #g`cih=QL # 这2句需要手工添加
0Li'a{n 2 ;DgX"Uzm AddType application/x-httpd-php .php
9CU6o:'fW )V$! AddType application/x-httpd-php-source .phps
}rMpp[ G4exk5 Znl>*e/| q=0{E0@9({ 安装其他apache常用模块mod_gzip+mod_fastcgi +mod_perl
#L4Kwy SiuO99'nV norc!?L 7si*%><X # cd /usr/ports/www/mod_gzip
w6In{uO-Z d$pf[DJQo # make install
K<7T}XzU$ .Qi1I p:Ld)U * U` nS` p # cd /usr/ports/www/mod_fastcgi
|e-+xX|; SSsQu^A # make install
:Ye#NPOI 4FHX#` 编辑/usr/local/etc/apache/httpd.conf文件
~lalc ^ gl7vM 添加下面一句
"1`i]Y\' M Xt + AddHandler fastcgi-script fcgi fcgi fpl
]S2[eS
gS<