(一、系统安装)
F
b1EMVu #xlZU 5QR}IxQ GXO4x|08F 前言
*0O<bm >5c]aNcv gyC^K3} HH7[tGF 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
-eUV`&[4 NzAQ@E2d: 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
%=BtOM_2 .
/Y&\< 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
m+H% g"Zj :#Ty^-"]1 本连载文章前后关联很紧密,建议初学者一步一步来做。
_~PO hPcS,
p{% 试验环境如下:
1c'79YU 5KK{%6#f\ 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
$> ;a'f~ $;y1Qiel 软件环境:操作系统:FreeBSD4.7(4.8)
Cgo9rC~] gTnS[ web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
oK)[p!D?0{ &%6NQWW ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
Q]/B/
t7&Dwmck9 mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
E$w#+.QP #aa1<-&H proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
A$Wx#r7) 0EyAMu 视频点播服务器:Helix Universal Servevr (realserver9.01)
691G15 ]s_@n! 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
X\kjAMuW/* NK~PcdGl k9l^6#<? 4x(F&0 第一步:安装系统
bhn5Lz$z +SyUWoM 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
b]w[*<f? 0:. 6rp 1、 采用最小化安装。
/V#7=,, #J\s%60pt 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
dKb ^x^ ~zMDY F"& 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地址)。以下除系统安装部分,我都是采用终端方式操作。
|<1M&\oaQ' TQ?#PRB 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
X>}@EHT a/b92*&k 128M /
kB
V/rw >{b3>s~T 20G /home
Uh}+"h5 nW11wtiO. 2G /ftp
T RDxT 3 tF: 256M /tmp
!x8kB
Di, L$SMfx 6G /usr
x df?nt 7x(v? 5G /var
"ct58Y@ pUGN!3 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
dkpQZXi9% # v+;: 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
FJ}gUs{m -qfnUh 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
lM$t!2pRB >%l:Dw\A: 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
oJh"@6u6K D&-vq,c # /stand/sysinstall
i+I0k~wY /~tP7<7A 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
t| _{;!^
FD))'!> 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
jC4O` 6P^hN%0 转到内核文件目录
W/=7jM \WX@PfL # cd /usr/src/sys/i386/conf
%XR<isn 6m@0;Ht 编辑内核文件
Mb1wYh \+9;!VWhl # vi kernel_wwwx # kernel_wwwx为我的内核文件名
JL``iA c@9##DPn 我的内核文件如下:
&y\igX1 (Igu:= #
L0xsazX:x 9OfU7_m # GENERIC -- Generic kernel configuration file for FreeBSD/i386
K'V 2FTJI 8 ip^] #
3Soy3Xp y]
y9'5_ # For more information on this file, please read the handbook section on
S}b~_} 6uqUiRs() # Kernel Configuration Files:
HD H lCHo+>\Z #
{m'AY) c})wD+1 #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html u-:MVEm e,"FnW #
3e *-\TP- %mu>-h ac # The handbook is also available locally in /usr/share/doc/handbook
(-J<Vy] R(`]n!V2 # if you've installed the doc distribution, otherwise always see the
,\x$q' W "k|K: # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
x9D/s`! d#8e~ # latest information.
jqtVpNwM _JA:.V^3gm #
lC4PKmno &oEyixe # An exhaustive list of options and more detailed explanations of the
.`+yo0O: TRy^hr8~ # device lines is also present in the ./LINT configuration file. If you are
a%*_2# -K^41W71 # in doubt as to the purpose or necessity of a line, check first in LINT.
tgB=vIw?3 +99Bi2H}o #
G1[(F`t> Why"G1` # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
He<;4?: _A3X6 LQ>$>A( `S$sQ& machine i386
t\%%d)d9 .
pP7"E4] cpu I586_CPU
,cD1{T\ 5k~\or 5_ cpu I686_CPU
g}Mi9Kp !5~k:1= ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
ju.OW`GM p6Gcts?, maxusers 0
ayeCi8 5*1#jiq P63
(^R %qi%$ options INET #InterNETworking
cm,4&x6 &mdB\Y?^ options FFS #Berkeley Fast Filesystem
s~Gw (Vap7.6;_ options FFS_ROOT #FFS usable as root device [keep this!]
Z'ao[CG dN0mYlu1| options SOFTUPDATES #Enable FFS soft updates support
.)t(:)*b Vd<K4Tk options UFS_DIRHASH #Improve performance on big directories
'kQ~ n.ct]+L options PROCFS #Process filesystem
Z/h|\SyJ sUV>@UMnu options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
0Z8/R )cKj iXn options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
UFf,+4q y@aKNWy}$ options SYSVSHM #SYSV-style shared memory
K:a3+k d +f$Z-U1H/ options SYSVMSG #SYSV-style message queues
$P;UoqG<& Man^<T%F options SYSVSEM #SYSV-style semaphores
Xb0!( (A 8t=3 options P1003_1B #Posix P1003_1B real-time extensions
C5;wf3 bQj`g2eyM options _KPOSIX_PRIORITY_SCHEDULING
Bj=@&; T]uKH29.% options ICMP_BANDLIM #Rate limit bad replies
`-u7 I :*cHA options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
gi1j/j7 Oq}ip # output. Adds ~128k to driver.
[Xq<EEb gb(#DbI options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
Bj8<@~bX:L +(y>qd # output. Adds ~215k to driver.
_Fxe|"<^ O:,=xIXR s-%J5_d f xG w?'\ device tun 1
&+]x;K 0$QIfT) options IPFIREWALL #防火墙
Uuz?8/w}# V]m^7^m3 options IPFIREWALL_FORWARD #允许透明代理
-f 4>MG !xymoiArp options IPFIREWALL_VERBOSE #允许防火墙日志
pl?kS8#U? k,lqT>C options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
l#ZyB| yfC2^#9 Zu options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
rmQ\RP W F+3!uWUK options IPDIVERT #启用由ipfw divert使用的转向IP套接字
nzWQQra|? NnP.k7m) \imp7}N pND48 g; # To make an SMP kernel, the next two are needed
)vQNiik# 71*>L}H #options SMP # Symmetric MultiProcessor Kernel
PF67z]<o t2U$m'(A& #options APIC_IO # Symmetric (APIC) I/O
vbedk+dd?A nd;O(s; kU1 %f
o 7JS#a=D# device isa
nNu[c[V 0$l&i=L device eisa
i(P>Y2s M/l95fp device pci
hg4J2m 2^J/6R$ 7N6zqjIB hR0]8l| r_q~'r35 _ F "!`X# # ATA and ATAPI devices
z1FL8= Bd8hJA device ata
nSS}%&a:LX y}Cj#I+a device atadisk # ATA disk drives
0f{IE@-b )%BT*)x X~%IM1+L; >j-
b5g"g ],Ab cTX &*jixqzvn # SCSI Controllers #没有SCSI设备不需要这段
HwM/}-t c[Yq5Bu{y device ahb # EISA AHA1742 family
]a=l^Pc(xN 9!cW device ahc # AHA2940 and onboard AIC7xxx devices
.jCk#@+ f@L\E>t device ahd # AHA39320/29320 and onboard AIC79xx devices
=@%MV( TD%WJ9K\ device amd # AMD 53C974 (Tekram DC-390(T))
Fos1WH?\ eiOi3q device isp # Qlogic family
f)WPOTEY pRmE ryR(U device mpt # LSI-Logic MPT/Fusion
r&=r/k2 WFXx70n device ncr # NCR/Symbios Logic
Xz"
JY 9'l.TcVm`, device sym # NCR/Symbios Logic (newer chipsets)
/%;/pi ]Px:d+wX: options SYM_SETUP_LP_PROBE_MAP=0x40
XGL"gD
y^3,X_0 # Allow ncr to attach legacy NCR devices when
R4yJ.f ,d5ia4\K # both sym and ncr are configured
nMeS CX S~}$Ly@ fq{I$syY {<"[D([ device adv0 at isa?
Mg&HRE %bN"bxv^ device adw
UX?X]ZYVR #i6[4X? device bt0 at isa?
R+C+$?4NG -)<JBs> device aha0 at isa?
WGluZhRuT3 .ZM]%[4 device aic0 at isa?
U24V55ZnI f7K8m| omr:C8T> Y/#:)(&@ device ncv # NCR 53C500
2zwuvgiZ 2~+'vi device nsp # Workbit Ninja SCSI-3
MuN[U17FB O$YJku device stg # TMC 18C30/18C50
5QNBB|X@ =xl7vHn7 ?NQD# {3jm%ex # SCSI peripherals #没有SCSI设备不需要这段
@
$9m>6V *'s&/vEy device scbus # SCSI bus (required)
?|\0)wrRf WReYF+Uen device da # Direct Access (disks)
aIY$5^x 9[B<rz device sa # Sequential Access (tape etc)
oVAOGHE jD$;q7fB device cd # CD
4c~*hMry 1V#B]x: device pass # Passthrough device (direct SCSI access)
rAtai}Lx 6="M0% 5B_-nYJDt -(`K7T>D. :+kg4v&r HrM)jC<~ AN50P!FZW
zgZi # atkbdc0 controls both the keyboard and the PS/2 mouse
iLc)"L-i YN$ndqOP device atkbdc0 at isa? port IO_KBD
Ov F8&*A 8uD8or device atkbd0 at atkbdc? irq 1 flags 0x1
RRK^~JQI.2 ytuWT,u iG?w; q_OY sg device vga0 at isa?
2X
qPZ]2g ]=O{7# N4[B:n ayB=|*Q" _:/Cl9~ ZP]2/;h # syscons is the default console driver, resembling an SCO console
77Q4gw~2U ]0at2 device sc0 at isa? flags 0x100
s:qxAUi\/ $fq-wl-= n3-GnVC][ 4+Li)A:4. LbLbJ{68 T +|J19 # Floating point support - do not disable.
`Pz!SJ| 5pN08+ device npx0 at nexus? port IO_NPX irq 13
Off: ~ )of5229 eHfG;NsV/ *RUd!]bh VuYWb)@ ^H@!)+
= # Serial (COM) ports
7M&.UzIY` a,F8+
Pb> device sio0 at isa? port IO_COM1 flags 0x10 irq 4
8Iqk%n~( w>1l@%Uo V{/)RZ/ I\F=s-VVY # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
#L).BM L~SrI{aYPf # 使用公共的MII总线控制器代码的PCI以太网适配器
FcJ.)U 'Kt4O9=p # 注意:一定要保留'device miibus'以确保可用
ePIly)=X 9g<_JcN # PCI Ethernet NICs that use the common MII bus controller code.
Rz])wBv e S|z( # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
=X%R*~!#Of !/=9VD{U! device miibus # MII bus support
[5}cU{M wd2P/y42;; device fxp # Intel EtherExpress PRO/100B (82557, 82558)
W? 6 "OlI-^y device rl # RealTek 8129/8139
ys~p( 8Pnqmjjj device vr # VIA Rhine, Rhine II
tOlzOBzR 9phD5b~j device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
<7sF<KD |{}d5Z"5;} ?$`1%Y9 gn4g 43 # Pseudo devices - the number indicates how many units to allocate.
7oqn;6<[>, T^-H_|/M pseudo-device loop # Network loopback
,i$(yx? )KTWLr; pseudo-device ether # Ethernet support
nFf\tf%8 Sf.8Ibw pseudo-device sl 1 # Kernel SLIP
p0:&7,+a, 4u{E D( pseudo-device ppp 1 # Kernel PPP
eF gb6dSh z!t3xFN&/ pseudo-device tun # Packet tunnel.
Kr+Bty A{n*NxKCX! pseudo-device pty # Pseudo-ttys (telnet etc)
x"h)"Y[c5 :a^,Ei-& pseudo-device md # Memory "disks"
I_Mqh4]; zN729wK pseudo-device gif # IPv6 and IPv4 tunneling
{) '"
k6w ^0,&R\e+ pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
d/-]y:`f` <|>:UGAR '8kL1 aS1P]& # The `bpf' pseudo-device enables the Berkeley Packet Filter.
>x _:=%Wr+ +lf@O&w # Be aware of the administrative consequences of enabling this!
wTgx(LtH Vms7
Jay pseudo-device bpf #Berkeley packet filter
a\HtxR8L H?zCIue3 (完)
V=8{CmqT =:R[gdA#1 )eedfb1 \VhpB
我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
"351s3ff
]aMa*fF 接下来编译安装新内核:
~]t2?SqNm yI)RGOV # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
(/rIodHJO 3
v,ae7$U& # cd ../../compile/kernel_wwwx
F" #3s= ju2X* # make depend
0 S`b;f *MyS7< # make
5IF~]5s BX)cV # make install
W~@GK
M$-(4 0 重新启动(reboot)
~ @"Qm;}
" gCBZA;/ !?>p]0*< hcqmjqJ 如果系统升级过源代码树,按下面方法编译内核:
n*8RYm)? kHIQ/\3?Q # cd /usr/src
snk{u/0Xm `5 v51TpH # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
p=5H^E m1 BrH`:Dw 重新启动
@BQBNGR 1 Jtk.v49Ad> >A@D;vx EA{*%9 A FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
0dX= 3b/vyZF x[uXD ?~y(--.t;T 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
co%_~xO xTawG?"D 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
(9q {J(44 Xs,PT # vi /etc/ppp/ppp.conf
S/:QVs !5 :[X vI# 我的ppp.conf文件内容如下:(注意set前要留空格)
BNm va xr-`i default:
qO3BQ]UF -/{}^QWB set log Phase tun command
-$|X\#R *t*&Q /W set ifaddr 10.0.0.1/0 10.0.0.2/0
B91PlM. :mHtK)z~ adsl: # 配置代号
imq(3? Q3{&'|}^2 set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
.`#R%4Xl cTx/Y&\9 set mru 1492
+rO<'H:umJ 4'[ V'c\ set mtu 1492
uiEA=*axp /<pQ!'/G set authname username # username是拨号用户名
X',0MBQ0 q _|5,_a set authkey password # password是拨号密码
?v~3zHK *pUV-^uo set dial
7Cp_41._ FAl 6 set login
u9~J1s<e ;<R_j%* add default HISADDR
~"0X,APR5 _%%"Y} (完)
z(68^-V=: Ui;s.f 5&Kn # ho$%7mc # vi /etc/rc.conf
GQBN-Qv F@K;A%us) 我的rc.conf文件内容如下:(动态ip)
;@s~t:u fR;_6?p*B # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
TN_$E&69I C}EDl2 # Created: Tue Jul 15 21:20:28 1997
eE_XwLE 7f,WzvV # Enable network daemons for user convenience.
Hxi=\2- $s!meg@s # Please make all changes to this file, not to /etc/defaults/rc.conf.
7V``f:#d FQ1oqqr # This file now contains just the overrides from /etc/defaults/rc.conf.
*lF%8k"Al 3(p6ak2lv hostname="wwwx.3322.org" # 你的主机域名
Q8:ocEhR o_m.MMEU ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
4ux5G`oL ebK
wCZwK* inetd_enable="YES" # 开机加载inetd
TBT*j&!L c)fp;^ kern_securelevel_enable="NO"
_oVA0@#n ?{")Wt linux_enable="YES"
J :(\o=5 5 FWN%JCOj@ nfs_reserved_port_only="NO"
<ft9B05* [&V%rhi sendmail_enable="NO"
Ls*=mh~IY uelTsn sshd_enable="YES"
+N_%|!F-c 'A2"&6m)28 usbd_enable="NO"
_8`;Xgp %n,bPa>T gateway_enable="YES"
1R9/AP 1 to<at-NN firewall_enable="YES" #启用防火墙
ibw;BU Jz'+@q6h firewall_script="/etc/rc.firewall"
K 5[ 3WHQ bOKNWI firewall_type="open"
giJyMd}x ~C
x2Q4E firewall_quiet="YES"
m/Z_ HER^ '|T= firewall_logging_enable="YES"
OG`Oi^2 0VPa;{i/ ppp_enable="YES" # 开机自动拨号
zy;w07-) E1_4\S*z ppp_mode="ddial"
hDsORh!i [G/X ppp_nat="YES" # 启用透明代理
;d40:q< ro@BmRMW ppp_profile="adsl" # 配置代号
{NDP}UATw 4iW2hV@m # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
l si8?91 &0`7_g7G (完)
&r%3)Z8Et gK#w$s50 8ipLq`) v%[mt`I 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
Q2=~
D IN
PAyY 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
[K- s\ 6'zy"UkH rOT8!" %}:J
9vra 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
6B{Awm@v}X .5xM7, 我的/etc/rc.conf文件如下:(静态ip)
'h6RZKG T _: K\v8 # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
Efl+`6`J A>puk2 s # Created: Tue Jul 15 21:20:28 1997
,V?,I9qf jU$PO\UTk # Enable network daemons for user convenience.
a=dN.OB}F7 y"ck;OQD # Please make all changes to this file, not to /etc/defaults/rc.conf.
p3' +"sFU &EOh}O< # This file now contains just the overrides from /etc/defaults/rc.conf.
u'p J9>sC
.@Cshj hostname="wwwx.3322.org" #主机域名
b.;W|$ . `fyAV@X defaultrouter="218.10.104.1" #服务商提供的路由器地址
:ux`*,zh ?Dm&A$r ifconfig_vr0="inet 218.10.104.188 netmask 255.255.255.0" #服务商提供的静态ip
yNL71 >w4 Sj?'T@ ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内部网卡ip
:83"t-O8[ r "R\ inetd_enable="YES" #开机加载inetd
D~:fn|/Brp s-B\8&^C kern_securelevel_enable="NO"
|*$_eb n6f|,D!? linux_enable="YES"
9':$!Eoq 25L{bcng nfs_reserved_port_only="NO"
lLhCk>a %Y TIS*+0 sshd_enable="YES"
wah` "6i9 f$N sendmail_enable="NO"
4SYN$?.Mp iJBZnU:Mp usbd_enable="NO"
O]>`B{ C0RwW??t gateway_enable="YES"
%}[??R0 V|)> firewall_enable="YES"
]!N5jbA@ OBZj-`fq J firewall_script="/etc/rc.firewall"
X#y l8k_ A?/?9Gr firewall_type="open"
\<} nn?~n L;"<8\vWB firewall_quiet="YES"
v6:DA#0 u#\3T>o%@ firewall_logging_enable="YES"
$$@Tgkg?o ? &O$ayG77 natd_enable="YES" # 启用透明代理
|};~YMH o2~x'*A0I natd_interface="vr0" # natd接口,vr0为连接外网modem的网卡
Gm.hBNgp (`xc3-, # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
7}Sw(g)o7 Q$%@.@ (完)
c.fj[U|j "{k3~epYaN 9M<? *8) VsC]z,
oV 重起后网络连接及透明代理生效。客户端同样要按上面说的方法配制。
kBzzi^cl gT.-Cf{ o;.-I[9h] v09f#t$;5 使用Squid:
pqe**`z@y "hfwj`U Squid是一个非常不错的代理缓存软件。我曾经一直在使用,后来因为我经常要改变web服务器里的网页,而Squid总是把我以前的页面缓存,致使不能马上反映页面的更新情况,再加上公司上网的负担不是很重。所以就不用了。
I9E@2[=! 0`W~2ai 安装方法:
OjN]mp-q !4E:IM63 在FreeBSD下安装软件最方便的方法是使用ports。本文为了让大家对通用的软件安装方法做一定的了解,我们采用通用的方法来安装squid,也就是说,下面的方法同样适用于linux或其他unix版本。
[Z0e$ .\VjS^o&Z&
51j bbJa,}R 在ylf的用户目录下创建目录app用来存放程序安装临时文件:
p,Z6/e[SI b Y>Ug{O; # mkdir /home/ylf/app
S;])Nt'X' !o@-kl 将用户ylf设为/home/ylf/app目录及其子目录的所有者
L6a8%%` Q%7EC>V # chown –R ylf /home/ylf/app
4M_83WL +FiV!nRkZ 到
http://www.squid-cache.org/Versions/v2/2.5/ 下载squid 的最新稳定版本,现在是squid-2.5.STABLE3
n'ro5D DB0xIP~i,? 打开IE浏览器,在地址栏输入
ftp://192.168.0.1 ,出现ftp登陆对话框,输入用户名ylf及密码,登录成功后。将下载的squid-2.5.STABLE3复制到app目录中。
/a
q%l]hQ@ vZ08/!n 执行如下命令:
4Z_.Jdu w >b?,zWiw # cd /home/ylf/app
^{s)`j'I* *M"wH_cd # tar zxvf squid-2.5.STABLE3.tar.gz #解压缩安装包
ty78)XI
c:0$
Mw= # cd squid-2.5.STABLE3 #进入解开的目录
i`Tne3) ]HRZ9oP # ./configure --prefix=/usr/local/squid #配制、将squid安装在/usr/local/squid目录
/Hx\ gtV U2aE:$oeYi # make all #编译
BXdT;b"J( %VMazlM15 # make install #安装
rdb%/@.- E8xXr>j># 下面编辑squid的配置文件:
U0rz 4fxc &^<94l # cd /usr/local/squid/etc
I$Z"o9" +|.#<]GA 将原来的配置文件改名
{b?)|@)is /EC m # mv squid.conf squid.conf.bak
_ReQQti[ "K8qmggTq 编辑新的配置文件
!-QKh aY j<!$ug9VA # vi squid.conf
982$d<0% 4nY2v['m0 我的squid.conf内容如下:
GB+G1w ~ e"^-x NlKnMgt~ 5`+*({ #取消对代理阵列的支持
r=9*2X# F kWJB> icp_port 0
^I0SfZ'Y {<GsM !B\\:k]aO^ EU+sTe > #对日志文件和pid文件位置进行设置
iz'8P-]K> dI>oHMC cache_store_log none
k@Hu0x &8;mcM//4 cache_access_log /usr/local/squid/var/logs/access.log
ENGw < &~k/G cache_log /usr/local/squid/var/logs/cache.log
xpV8_Gz; t Sg#2 emulate_httpd_log on
`S!`=26Z! +Kk6|+5u pid_filename /usr/local/squid/var/logs/squid.pid
}{lOsZA B82A:t) FSM~Rl ,^+3AT #设置运行时的用户和组权限
o6q Qzk =Xp3UNXg cache_effective_user squid
#[A/zH|xvV |m=@;B| cache_effective_group squid
6G(k{S iw#luHcJ I*#~@:4* pG"
4qw #设置管理信息
Ad"::&&Wk $)'{+1 visible_hostname wwwx.3322.org.
vOqYt42
97
1qr cache_mgr
yourname@yourdomain.com eSvu:euv eZUK<&0x5 UL oTPx@N .z_^_@qdm #设置监听地址和端口
2/;KZ+U& _-D(N/ http_port 3128
ic3qb<2 ALKhZFuz udp_incoming_address 0.0.0.0
(Q@m;i> o]]Q7S= M0^r!f>O 0]" j, #设置squid用户hot object的物理内存的大小以及设置cache目录
,@P3!| .$q]<MK8 cache_mem 32 MB
`dj/Uk _ p?q/-[4 cache_dir ufs /usr/local/squid/cache 1024 16 256
{}>"f]3 sx/g5?zh 72PDqK# SkK=VeD>8 #访问控制设置
xd>2TW l# 's
e9|: acl mynet src 192.168.0.0/255.255.255.0
J+9D/VT HHX9QebiST acl all src 0.0.0.0/0.0.0.0
A\=:h AQ "['YMhu_ http_access allow mynet
1s*I
ftK.jj1: http_access deny all
}$b/g M]6=Rxq1:E $H_4Y-xOi >s1HQSe66 #透明代理设置
h<6r+*T' p B[k"xs httpd_accel_host virtual
D$j`+` T*$uc, httpd_accel_port 80
%D&FnTa #Uudx~b httpd_accel_with_proxy on
oVLz7Y[JE 0a(*/u httpd_accel_uses_host_header on
{xOu*8J B$7lL YGxdYwBwf (+4=A k #swap 性能微调
ZI5UQH/ U_14CLsdG half_closed_clients off
atPf527\` u52@{@Ad cache_swap_high 100%
g:O.$ @m(\f cache_swap_low 80%
Ron^PvvY& F9d][ P@@ maximum_object_size 1024 KB
5xRh'Jkyb >(\[ $ Q(%uDUg% [t ^|l? #控制对象的超时时间
L:'Y#VI{ #'"h+[XY refresh_pattern -i .html 1440 90% 129600 reload-into-ims
Cu!4ha.e` P~?u2,.E[ refresh_pattern -i .shtml 1440 90% 129600 reload-into-ims
*aTM3k)Zs }p
"HD R> refresh_pattern -i .hml 1440 90% 129600 reload-into-ims
G"J6X e TN l$P~X> refresh_pattern -i .gif 1440 90% 129600 reload-into-ims
2y,~i;;_ Q y15TJ refresh_pattern -i .swf 1440 90% 129600 reload-into-ims
gAR];(* +L_.XToq- refresh_pattern -i .jpg 1440 90% 129600 reload-into-ims
@ cv`}k J_`.w refresh_pattern -i .png 1440 90% 129600 reload-into-ims
xv1$,|^ts |z5olu$gVc refresh_pattern -i .bmp 1440 90% 129600 reload-into-ims
O" T1=4 15 SIZ:Q refresh_pattern -i .js 1440 90% 129600 reload-into-ims
9N9|h y ukri7 n* (完)
Q>||HtF$A GTLlQy)'= 'X`\vTxB QI!:+8 需要改的地方是访问控制设置中的子网改成你自己的子网。其他的地方可根据需要调整。不改也可。
L9G=+T9 ,$CZ(GQ 如果不使用日志,将日志设置部分改成如下句子:
/x`H6'3? qo'pU/@ cache_store_log none
lJq
%me;4m ?t<wp3bZ cache_access_log /dev/null
d[ {=/~0 UY>{e>/H9 cache_log /dev/null
bZa?h.IF E4 JS
M"~B_t,Nw {'{ssCL 添加squid系统用户和组
GT'%HmQI <$ '#@jW # pw groupadd squid
*mBn''a"* mB_ba1r # pw useradd squid -g squid -s /sbin/nologin
`t#C0 '\
6.GP 建立cache目录
hj9bMj =(zk-J<nY # mkdir /usr/local/squid/cache
_"z#I
CT( 0z\=uQ0 改变cache目录和logs目录的所有者为squid用户和组
6I 2`m(5 Vd|/]Zj # chown –R squid /usr/local/squid/cache
e?F r/n Ik~5j(^E- # chgrp –R squid /usr/local/squid/cache
yUBic~S !07$aQYcd # chown –R squid /usr/local/squid/var/logs
wwE9|'Ok XbG=H-| # chgrp –R squid /usr/local/squid/var/logs
w=O:|Xu#* 2R.YHj 运行squid –z建立cache目录结构
`/Z8mFs Y 7%L-;xcr]B # /usr/local/squid/sbin/squid –z
YIjBKh <w08p*? x+%lNR -cJ(iz9! 测试squid运行情况
#F[6$. Gr _U'edK]R # /usr/local/squid/sbin/squid –NCd1
Pq;1EI ^oaG.)3 出现下面显示证明squid安装成功
)]rGGNF* FVL0K(V( 2003/06/21 18:01:09| Starting Squid Cache version 2.5.STABLE3 for i386-unknown-freebsd4.7...
W~R_-
]k@g DR^mT$ 2003/06/21 18:01:09| Process ID 160
rt t?4 3Qn! ` 2003/06/21 18:01:09| With 957 file descriptors available
&\K,kS [.r ]+ug:E{7 2003/06/21 18:01:09| Performing DNS Tests...
F;`es%8 )p ,-TtV 2003/06/21 18:01:09| Successful DNS name lookup tests...
u{exQ[,E hnH:G`[F 2003/06/21 18:01:09| DNS Socket created at 0.0.0.0, port 1029, FD 4
/C_O/N ;LthdY()n( 2003/06/21 18:01:09| Adding nameserver 202.97.224.68 from /etc/resolv.conf
O^|,Cbon6 C+O`3wPZp 2003/06/21 18:01:09| Unlinkd pipe opened on FD 9
nn5S 7! !0E$9Xon 2003/06/21 18:01:09| Swap maxSize 1048576 KB, estimated 80659 objects
4Uz6*IQNl Zb8i[1 P 2003/06/21 18:01:09| Target number of buckets: 4032
0+M1,?+GfF EGU?54 2003/06/21 18:01:09| Using 8192 Store buckets
JA())0a ?=f\oH$ 2003/06/21 18:01:09| Max Mem size: 32768 KB
&)<]AG.vd! G;wv.|\ 2003/06/21 18:01:09| Max Swap size: 1048576 KB
vg
*+>lbA ;/>~|@ 2003/06/21 18:01:09| Store logging disabled
G2rxr SO8Ej)m 2003/06/21 18:01:09| Rebuilding storage in /usr/local/squid/cache (DIRTY)
Po9 3&qE $;"@;Lj%, 2003/06/21 18:01:09| Using Least Load store dir selection
,_P(!7Z8 WY0u9M4 2003/06/21 18:01:09| Current Directory is /usr/local/squid/etc
o%Pi;8 6'|J
; 2003/06/21 18:01:09| Loaded Icons.
ukvz#hdE E=HS'XKu[K 2003/06/21 18:01:09| Accepting HTTP connections at 0.0.0.0, port 3128, FD 8.
%|r@q I-&/]<5y 2003/06/21 18:01:09| WCCP Disabled.
^J\)cw 1b* dC;< 2003/06/21 18:01:09| Ready to serve requests.
>/
HC{.k @DY0Lz; 2003/06/21 18:01:16| Done scanning /usr/local/squid/cache swaplog (0 entries)
oKzV!~{0M; P@
1D 2003/06/21 18:01:16| Finished rebuilding storage from disk.
sW|u}8` )<IbQH|_ 2003/06/21 18:01:16| 0 Entries scanned
T|ZT&x$z aN%t>*?Xa 2003/06/21 18:01:16| 0 Invalid entries.
H*; J9{ Z*jhSy 2003/06/21 18:01:16| 0 With invalid flags.
7A3e-51> ~O|j*T 2003/06/21 18:01:16| 0 Objects loaded.
,Sghi&Ky ~'v^__8 2003/06/21 18:01:16| 0 Objects expired.
i|.!*/qF ~sMn/T*fv 2003/06/21 18:01:16| 0 Objects cancelled.
F2>o"j2 qd!$ nr 2003/06/21 18:01:16| 0 Duplicate URLs purged.
}yS"C fM Lu1>A {et 2003/06/21 18:01:16| 0 Swapfile clashes avoided.
nLdI>c9R
P8z++h 2003/06/21 18:01:16| Took 7.3 seconds ( 0.0 objects/sec).
)1lYfJ |~#!e}L( 2003/06/21 18:01:16| Beginning Validation Procedure
LOR$d^l }*IX34 2003/06/21 18:01:16| Completed Validation Procedure
$?wX* {lx^57v 2003/06/21 18:01:16| Validated 0 Entries
Vk{0)W7 O#cXvv]Z* 2003/06/21 18:01:16| store_swap_size = 0k
O:p~L`o>> k<8: 2003/06/21 18:01:17| storeLateRelease: released 0 object
k.
px B7N?"'$i 否则根据提示检查配制文件。
>*vI:MG8 /of,4aaK7 e?RHf_d3T- @qg=lt|(F 为了使squid的透明代理起作用,需要设置端口转发。方法如下:
,f}s!>j V..m2nQj
编辑/etc/rc.firewall文件,添加下面一句
3u+~!yz vTP'\^; ipfw add 00500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
k@KX=mG< F-UY~i8 jc)D*Cf $;$_N43 下面建立squid的启动脚本squid.sh:
=GFlaGD 0dXZd2oK@ 首先建立/usr/local/etc/rc.d目录
1mf|:2, J&{E # mkdir /usr/local/etc
j.AAY?L z`f1|Ok # mkdir /usr/local/etc/rc.d
-DU[dU*~ +}X@{DB # cd /usr/local/etc/rc.d
80axsU^H0 M0"xDvQ # vi squid.sh
0&c12W|B<L ^om(6JL2 文件内容如下:
.i@e6JE~; }
Tp!Ub\Cc #!/bin/sh
/d8PDc " v=9:N/sW LT#*nr AqE . TK #if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
/,GDG=ra sh E>gTe # echo "$0: Cannot determine the PREFIX" >&2
"aAzG+NM CbI[K| # exit 1
z1(rHJd M nH4p #fi
g^4'42UX =#n|t[h- A2*z G#3 O^,m case "$1" in
#pE:!D v34XcA start)
v7xc01x N\<M4fn if [ -x /usr/local/squid/sbin/squid -a -f /usr/local/squid/etc/squid.conf ]; then
a:v&pj+|< %k5^n0|* (cd /usr/local/squid/var/logs; /usr/local/squid/sbin/squid >/dev/null 2>&1 &) ; echo -n ' squid'
<|s|6C vMj"% fi
^e^M
A.kM, 8]'qJ;E2 ;;
l*b3Mg
]"{K5s7 stop)
qZCA16 |u7vY/ /usr/local/squid/sbin/squid -k shutdown 2>&1
~.yt LF{d'jJ&K # Uncomment this if you'd like the system to (attempt to
YM/GSSq 7L? ~;;L$ # wait for) squid to shut down cleanly
K7U` *d?,i-Q.+ #echo "Sleeping for 45 seconds to allow squid to shutdown.."
iK= {pd kImS'i{A #sleep 45
k0!b@
c *<"xF'C ;;
y]+i.8[ 8b[^6]rM *)
28>gAz.# E@Q+[~H } echo "Usage: `basename $0` {start|stop}" >&2
>z.o?F &v'e;W ;;
s(r(! FZ W`C2zbC esac
`N]!-=o 7rbl+:y2 w8%<O^wN, :,]V 03 exit 0
NoV)}fX$X8 DnMfHG[< (完)
@K3<K( HYZ94[Ti
(/-2bO /{."*jK 这样每次启动后,squid就会自动运行。
<A; R%\V w|OMT>. 运行/usr/local/etc/rc.d/squid.sh start 启动squid
v\'Eo*4 Pp*|EW 1 运行/usr/local/etc/rc.d/squid.sh stop 停止squid
WIa4!\Ky! 4S`2")V Fi14_{ [x
kbzJ 关于域名的问题
#9F=+[L j[.R|I|
如果需要对外提供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 。
Uw8O"}U8 -WWa`,: <=W;z=$!Bb 2E9Cp 第三步:安装配置web服务器
WSz#g2a <w}YD @(f 2,{m>fF ypSW 9n 注意:在进行这步操作前建议把squid关掉,因为在进行主页更新测试时squid的cache会使更新后的主页不能及时反映出来!
1(CpTaa WV]Si2pOZ 为了不使用squid,除了关掉squid外,还要删除ipfw的透明代理端口转发语句:
<7~HG(ks U,_uy@fE=? # cd /usr/local/etc/rc.d
ps\A\aggML _?x*F?5= # ./squid.sh stop
sk5h_[tK {0 IEizQ|i # mv squid.sh squid.sh.bak
h# c.HtVE ,edX;`# # ipfw del 500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
suC] wf)T-]e Eaf6rjD H~Xi;[{7 本web服务器的其本组成为
&^=6W3RD Rq-BsMX!A Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
9%^q?S/Rv sOhQu>gN Q=}p
P* 5
?~
?8Hi 为了简化安装过程并发挥FreeBSD安装软件的优势,本文后续部分将采用ports安装。Ports 使在FreeBSD下安装各种软件变得很轻松。
d9^ uEz( u0(H! Ikv@}^p 7 Uo>pV9xRG 首先安装ports:(如果已经有/usr/ports目录则证明已经安装过了)
80TSE* v9QR,b`n # /stand/sysinstall
pTT7#b(t 9 +k7x, 选Configure—Distributions—ports,ports将被安装在/usr/ports目录中。
Km7HB!=< 1:h{(
%`& 56T<s+X> kq&xH;9=. 下面安装apache1.3.27+modssl
q+<X*yC klmRU@D # cd /usr/ports/www/apache13-modssl
=~}\g;K1Q KSe`G;{ # make install
P1tc*2Z 5v
>0$Y{ 系统会自动下载安装包并安装完毕。
q,w8ca4~y r`Y[XzT9 安装后系统会自动产生启动脚本apache.sh,在/usr/local/etc/rc.d目录中。可以通过运行apache.sh start|stop来启动或停止apache。
M S$^m2 FW~%xUSE5 $9k7A 8K 1Tz5tU9kR 安装mysql3.23:
p_pI=_: ?WyL|;b* # cd /usr/ports/databases/mysql323-server
wQ]!Y?I |3j'HN5S # make install
\0?^%CD+@ |)`<D 安装后产生启动脚本/usr/local/etc/rc.d/mysql-server.sh
MHar9)$} cBs:7Pnp% COvcR.*0F }q7rR:g 安装apache模块mod_php4:
;;#28nV //T1e7) # cd /usr/ports/www/mod_php4
`}<x"f7.z hUN]Lm6M 首先编辑scripts目录下的configure.php文件,加入对OpenSSL的支持
=8:m:Y&|`G jYE<d&Cq # vi scripts/configure.php
{/d<Jm: pm`BMy<5PU 找到下面一句
*Y'nDv6_P YL*yiZ9 OpenSSL "OpenSSL support" ON \
4&]Sb} `L n,qiA 改成
.;nU"
a3' I.#V/{J OpenSSL "OpenSSL support" YES \
n3Uw6gLD GxjmHo BSU%.tmI 8ExEhBX8 # make install
)%H@.;cD_r k<xPg5 出现对话框时直接选ok继续
[HNWM/ff7+ =qG%h5]n cXP*?N4Cf t6m&+N 安装完成后编辑apache的配制文件/usr/local/etc/apache/httpd.conf ,添加如下内容:
{6}H}_(] a^wGc+ www#.D%'U ^U1@
hq*u # 设置默认可以使用的主页名称,这句系统一般已经有了,不用添加了
u~[=5r O)v?GQRj DirectoryIndex index.php index.html
Lso4ZZ; i~1bfl g>].m8DZ' Ed6k7 # 这2句需要手工添加
e\o>(is -36pkC
6
\ AddType application/x-httpd-php .php
LEu_RU?
k/'>,WE AddType application/x-httpd-php-source .phps
Z|l/6L8 J4Yu|E<& IXQxjqd^ i|M^QKvF 安装其他apache常用模块mod_gzip+mod_fastcgi +mod_perl
=Rv!c+? Q)vf>LwC2S )o4B^kq vSyR%
j # cd /usr/ports/www/mod_gzip
YS$42J_T &?[uY5Mk # make install
'8RBR%)y d#l z^Ls2 6yU#;|6d |t <Uh,Bt # cd /usr/ports/www/mod_fastcgi
v>S[}du VR:4|_o # make install
xcf`i:\ [22>)1<( 编辑/usr/local/etc/apache/httpd.conf文件
_c:}i\8R 60R Yw9d%0 添加下面一句
acG4u+[ ] [yFf(>B AddHandler fastcgi-script fcgi fcgi fpl
p0r:U<& ~6bf-Wg'X jEaU; "CH3\O\ # cd /usr/ports/www/mod_perl
MTyBGrs( :_,oD # make install
TAd~#jB9 <4{Jm8zJ Uxll<z, O%hmGW4 重新启动让所有软件自动运行。