(一、系统安装)
~x,_A>a jlj ge=#c2 ^5E9p@d"J N4+Cg t( 前言
IrL%0&*hS 2V)+ba|+ g9" wX?* F9o7=5WAb 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
^_ch%3}Im GFdbwn5B 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
-fPiHKJ * |,N/e 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
^yPZ$Q !{^kH;*u 本连载文章前后关联很紧密,建议初学者一步一步来做。
IADHe\. 3Tu]-. 试验环境如下:
;|vP|Xi 3Qe|'E,U 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
Li6|c*K' =\.*CY|;N 软件环境:操作系统:FreeBSD4.7(4.8)
xZ`z+) (-WRZLOQ web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
t\ oud{Cv I%J>~=]n_ ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
**h4M2'C \+V"JIStUj mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
nv_v FK !4a fU: proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
csW\Q][ eI$V2 视频点播服务器:Helix Universal Servevr (realserver9.01)
MG vz-E1e |;US)B8}*Z 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
Dq<la+VlO Csuasi3]1d vT EqT 4 -tC=>>wc 第一步:安装系统
S&}7XjY {d[Nc,AMb 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
g}0K@z3 @\&j3A 1、 采用最小化安装。
$"vz>SuB d2UidDU5qa 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
F NPu f/J/tt 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地址)。以下除系统安装部分,我都是采用终端方式操作。
,7j8+p|}, G~5pMyOR 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
|2l-s 1|y -0CBMoe 128M /
INr1bAe$ teS>t!d 20G /home
"/6#Z>y ym{@w3"S 2G /ftp
5Qq/nUR {C5:as 256M /tmp
eP]y\S*P 7.Y;nem:( 6G /usr
HZAT_ o5s6$\" 5G /var
vm|u~Yd,s +H3~Infr4f 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
`;}`>!8j A:(|"<lA 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
ch8VJ^%Ra1 89:nF# 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
cIw X sx
w317]-n 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
rQ*w3F?: iXm&\.% # /stand/sysinstall
~k&b I4N7wnBp 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
Jt5V{9:(' <=n;5hv: 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
bpBn3f`?* Z (6.e8fK 转到内核文件目录
tAN!LI+w c]Epg)E # cd /usr/src/sys/i386/conf
@ !")shc :o^ioX.J 编辑内核文件
nCi
]6;Y W5Z-s.o # vi kernel_wwwx # kernel_wwwx为我的内核文件名
:<P4=P P 1TTS@\ 我的内核文件如下:
Fl.?*KBz %J1'>nI!q #
# QwX|x{ 6c]4(%8 # GENERIC -- Generic kernel configuration file for FreeBSD/i386
@;eH~3P h/tCve3Z #
G06;x F\N0<o # For more information on this file, please read the handbook section on
7#C$}1XJ1 \L(jNN0_R # Kernel Configuration Files:
}SWfP5D@ 9!jF$ #
I+
|uyc d\#yWY #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html AVjRhe f0g/`j@Up #
n@+?tYk*e .eIs$ # The handbook is also available locally in /usr/share/doc/handbook
g5|&6+t. HVA:|Z19 # if you've installed the doc distribution, otherwise always see the
qe&|6 M! '|]}f }Go # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
M%_*vD !f(A9V # latest information.
7kV$O(4 $Zyuhji^ #
}'Ap@4 B`QF;,3S # An exhaustive list of options and more detailed explanations of the
aiX&` 9c]$d # device lines is also present in the ./LINT configuration file. If you are
H&ek"nP_ C2R"96M7q # in doubt as to the purpose or necessity of a line, check first in LINT.
UhW{KIW KOe]JDU #
Kv*
1=HES #6c,_! # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
(KC08 ?jMM@O`Nu lB _9b_|2 ?H8w;Csq- machine i386
4e>f}u5 ?&0CEfa? cpu I586_CPU
>A D!)&c e-`9-U%6 cpu I686_CPU
/{buFX2"} hub]M ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
@XG1d)sE eHUyV@ maxusers 0
{s@!N Ydsnu Q#yHH]U)X mH;t)dT options INET #InterNETworking
2n>mISy+ !jl^__
.DR options FFS #Berkeley Fast Filesystem
I`B ZZ- W=
NX$=il options FFS_ROOT #FFS usable as root device [keep this!]
EUt2S_2P
z}J~X%}e options SOFTUPDATES #Enable FFS soft updates support
!Yo2P" _K?v^oM# options UFS_DIRHASH #Improve performance on big directories
vrmMEWPV JUw|nUnl? options PROCFS #Process filesystem
0*]0#2Z prO&"t
> options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
)Mq4p'*A[
LT{g^g options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
X_-/j. "d/54PKWx options SYSVSHM #SYSV-style shared memory
T#rUbi>"" &O+S[~ options SYSVMSG #SYSV-style message queues
|b@`ykD tPiC?=4R options SYSVSEM #SYSV-style semaphores
v89tV9O) ~Fvz&dO options P1003_1B #Posix P1003_1B real-time extensions
3U?gw!M> W!el[@ options _KPOSIX_PRIORITY_SCHEDULING
G:+D1J] %}b options ICMP_BANDLIM #Rate limit bad replies
vB7]L9=@" }c8e t'HYf options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
Y_$!XIJ4 lz0dt<8eP # output. Adds ~128k to driver.
8B6(SQp% U{EcV%C2 options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
-"Kjn`8 71(ppsHk # output. Adds ~215k to driver.
CA|W4f} /!&eP3^ G@rh/b<$ [D|Uwq device tun 1
M&Q&be84 9_*3xu<7i options IPFIREWALL #防火墙
~]%re9jGW rr1,Ijh{D options IPFIREWALL_FORWARD #允许透明代理
F'<XB~&o 7zQGuGo( options IPFIREWALL_VERBOSE #允许防火墙日志
l66 QgPA 4t*VI<=<[ options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
w'i+WEU>l BThrv$D} options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
]S(nA!] MYJDfI options IPDIVERT #启用由ipfw divert使用的转向IP套接字
KxmB$x5-=8 l;z+E_sQ )@B!
CU\r
I # To make an SMP kernel, the next two are needed
!x-9A @(/$;I, #options SMP # Symmetric MultiProcessor Kernel
Ei,dO;& =*(_sW6; #options APIC_IO # Symmetric (APIC) I/O
Xhyc2DKa_ 6a]Qg99\ FzsW^u+ h/aG."U device isa
G^P9_Sw]d3 :gkn`z device eisa
o 8^!wGY F9_X^#%L device pci
z5^Se!`5 a#Z#-y! \ 511?ik q 3,p=ijJ l
Hu8ADva +^,&z}(
Ak # ATA and ATAPI devices
slA~k;K:_ !9zs>T&9a\ device ata
0}_1ZU eZpi+BRS6 device atadisk # ATA disk drives
1- GtZ2 $KRpu<5i} YTe8C9eO mk-L3H1@J3 tpV61L
@!\lt$ # SCSI Controllers #没有SCSI设备不需要这段
)Zyw^KN^ &~)1mnv. device ahb # EISA AHA1742 family
pR:cn kVF z\J#d 1e device ahc # AHA2940 and onboard AIC7xxx devices
&C/,~pJ1S
o2y
#Yk device ahd # AHA39320/29320 and onboard AIC79xx devices
SsL>K*t5 r)w]~)8 device amd # AMD 53C974 (Tekram DC-390(T))
L~M6ca" }WNgKw device isp # Qlogic family
]waCYrG<sY <ot%>\C device mpt # LSI-Logic MPT/Fusion
:; 3y^! FbPoyh device ncr # NCR/Symbios Logic
g3w-Le&T s\
]Rgi>w device sym # NCR/Symbios Logic (newer chipsets)
_l]rt W<H^V"^ options SYM_SETUP_LP_PROBE_MAP=0x40
ra\2BS)X &2Cu"O'.i # Allow ncr to attach legacy NCR devices when
0j-;4>p 4mWT"T-8 # both sym and ncr are configured
q'[yYPDX5x K@=_&A! -QydUr/(o 5~omZ,qe device adv0 at isa?
J$Ba*`~!! u $T'#p1
device adw
/#4BUfY
f A.S:eQvS% device bt0 at isa?
q1M16qv5 CY8=prC device aha0 at isa?
0'y3iar c:`&QDF device aic0 at isa?
9y"\]G77E ,OO0*% kasx4m]^ z9*7fT device ncv # NCR 53C500
JMYM}G Xn8r3Nb$A device nsp # Workbit Ninja SCSI-3
$Xo_C_:B \CE8S+Z% device stg # TMC 18C30/18C50
.SSj=q4? @y\M8C8 J3=^+/g \Mod4tQ # SCSI peripherals #没有SCSI设备不需要这段
$zV[-d
XS"lR | device scbus # SCSI bus (required)
yu62$d c_bIadE{ device da # Direct Access (disks)
0~N2MoOl^ 5eSmyj-W device sa # Sequential Access (tape etc)
9G}Crp J\kv}v device cd # CD
"(#]H;!W ,n?oNU device pass # Passthrough device (direct SCSI access)
`BHPjp> W 7Y5~%@
^'c[HVJ hAp<$7 KGb3n;] |Gh~Zup U ()36 8U>f/dxLOO # atkbdc0 controls both the keyboard and the PS/2 mouse
$q;dsW,8 O>`DR0 device atkbdc0 at isa? port IO_KBD
8CKI9 lGr(GHn device atkbd0 at atkbdc? irq 1 flags 0x1
Doy7prKI8 Obu>xK( x+7jJ=F gG.b=DvzY device vga0 at isa?
3 aG?^z g&V1<n\b+ <}$o=>' H{CG/+x aYQIe7J90J M7;P)da # syscons is the default console driver, resembling an SCO console
ajz%3/R 'Nv*ePz device sc0 at isa? flags 0x100
E5G=Kh[NP jE</a% 1Lb+
& @9^ozgg xW\iME 3Vl?;~ :5 # Floating point support - do not disable.
BK8)'9/ V'4sOn device npx0 at nexus? port IO_NPX irq 13
QvH=<$ ga~C?H,K P'6eK? EnGVp<6R Rj9YAW$ UmSy p\i # Serial (COM) ports
{WJ+6!v /8i3 I5* device sio0 at isa? port IO_COM1 flags 0x10 irq 4
ch}t++`l] y pv~F #,1Kum
bG3 I|*w?i* # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
((}T^ tN=B9bm3j # 使用公共的MII总线控制器代码的PCI以太网适配器
3%G>TB *1fq :-- # 注意:一定要保留'device miibus'以确保可用
Yp1;5Bbp "+iPeRF!hU # PCI Ethernet NICs that use the common MII bus controller code.
Gvk)H$ni a'zf8id # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
%OeA"# E
{$Jk]c device miibus # MII bus support
RHdcRojF xn'&TQo0 device fxp # Intel EtherExpress PRO/100B (82557, 82558)
m?]XNgT @Q;%hb device rl # RealTek 8129/8139
P5Y:c@u2 %- W3F5NK device vr # VIA Rhine, Rhine II
"/e:V-W
z
%Ty; device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
*E0dCY$ /*)zQ?N E({W`b~_f <
`r+ZyM # Pseudo devices - the number indicates how many units to allocate.
=ILE/pC-| *"\QR>n pseudo-device loop # Network loopback
]uN}n;`12 r%*,pN7O pseudo-device ether # Ethernet support
LE!xj 0 UMN3.-4K# pseudo-device sl 1 # Kernel SLIP
|kPjjVGF{ '%.:97 pseudo-device ppp 1 # Kernel PPP
N^\<y7x ,Q8[Ur?G pseudo-device tun # Packet tunnel.
rz%8Vigb xx`xDD pseudo-device pty # Pseudo-ttys (telnet etc)
y3^<rff3Gc mhZ{}~ pseudo-device md # Memory "disks"
9?5'>WO b*w@kLLN pseudo-device gif # IPv6 and IPv4 tunneling
?6;9r[ p W_:3Sj l' pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
v803@9@ WZ\bm$
A
dNQS ^=f<WKn # The `bpf' pseudo-device enables the Berkeley Packet Filter.
WC6yQSnY& Id6H~; # Be aware of the administrative consequences of enabling this!
OIpkXM zPzy0lx pseudo-device bpf #Berkeley packet filter
&\8qN_` V\$'3(* (完)
[Yr}:B
< Wt|IKCx By&T59 'MLp*3djF, 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
Y.XNA]|
n7g}u 接下来编译安装新内核:
Hd*e9;z (X=JT # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
BG>fLp -MEp0 # cd ../../compile/kernel_wwwx
1:!_AU? 6#[ # make depend
]S@zhQ >Q5et1c # make
?VUU[h8"v5 k!?sHUAj # make install
d}@b 3 K/xn4N_UX 重新启动(reboot)
99<]~,t=5 t1Ty.F)r nHAET eh\_;2P 如果系统升级过源代码树,按下面方法编译内核:
S#h-X(4 ~
_ ogeD # cd /usr/src
2/Xro rV 5`Q* # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
kYbqb? ~quof> 重新启动
'q3<R%^Q _C`&(?} z$64Ep# +D7>$&BD FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
73Zx`00 JWZG)I]r =VC"X ?N V{jQ=<)@e 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
@c;XwU]2t 0m2%ucKw 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
m*bTELb /thFs4 # vi /etc/ppp/ppp.conf
s2Z'_rT #:B14E 我的ppp.conf文件内容如下:(注意set前要留空格)
)RUx ` nd/N# default:
77 g<`}{ zR@4Z>6
set log Phase tun command
azhilUD8 v11Uw?CM set ifaddr 10.0.0.1/0 10.0.0.2/0
!uZ)0R nXU`^<nA adsl: # 配置代号
u[:-^H `T'[H/ set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
t=l@(%O 0_ ^LI\W'K set mru 1492
ys/U.e|)! 7%j1=V/ set mtu 1492
1U)U {i7j h(~@
nd{ set authname username # username是拨号用户名
wH?]kV8Q SEKR`2Zz, set authkey password # password是拨号密码
LZ=E NqlU? set dial
_xWX/1DY Z= +Tw!wR> set login
@23?II$=@ I K9plsd* add default HISADDR
Oj=g;iY wZUZ"Y}9 (完)
$.Ia;YBf SO|!x}GfI fw&cv9X(IU wC>}9OM # vi /etc/rc.conf
@vc9L <lkt'iT=Sz 我的rc.conf文件内容如下:(动态ip)
A!$;pwn0 uVth&4dh9 # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
QbJE+m5 }j)][{i*x # Created: Tue Jul 15 21:20:28 1997
zQxTPd E8/Pi>QW # Enable network daemons for user convenience.
BT^Im=A qdPmTaak # Please make all changes to this file, not to /etc/defaults/rc.conf.
W-RqooEv lRANXM # This file now contains just the overrides from /etc/defaults/rc.conf.
/Moyn"Kj{ v) j3YhY hostname="wwwx.3322.org" # 你的主机域名
H'"=C&D~ `_iK`^(- ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
" k0gZb !#Pr'm/,mu inetd_enable="YES" # 开机加载inetd
{EjzJr> SgWLs%B kern_securelevel_enable="NO"
x%yzhIRR IKrojK8-? linux_enable="YES"
5_\1f|, l( WF nfs_reserved_port_only="NO"
6fm oIK{ F! [Gj%~I
sendmail_enable="NO"
8kf5u#,' V8O-|7H$v sshd_enable="YES"
Eo`'6
3 Bh UGMK usbd_enable="NO"
m0i,Zw{eM N0pA ,& gateway_enable="YES"
/g>]J70 g8R@ol0 firewall_enable="YES" #启用防火墙
8 \"A-+_Q I]z4}#+cX firewall_script="/etc/rc.firewall"
hg7_ZjO oe*fgk/o9 firewall_type="open"
>~l^E!<i-u |;(>q firewall_quiet="YES"
gXj3=N(l j.yh>"de firewall_logging_enable="YES"
/s~BE ,su 6/.kL;AI ppp_enable="YES" # 开机自动拨号
Z817f]l WR9-HPF ppp_mode="ddial"
}vb.>hy z%;_h- ppp_nat="YES" # 启用透明代理
lMmP]{.>$ 7/HX!y{WP ppp_profile="adsl" # 配置代号
v]'\]U^ uovSe4q5q # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
*m8{yh $WiUoS (完)
^KJi|'B A6I^`0/ @8Cja.H <M,<|Y*) 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
?L| Ai\| 0Q~\1D 9g 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
^)o#/"JA k]9y+WC2 v"*c\, Y
8-;eqH 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
OYfRtfE w!b;.l 我的/etc/rc.conf文件如下:(静态ip)
u}?|d8$h\ IC6'>2'=T # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
;*{Ls# SAU` u]E # Created: Tue Jul 15 21:20:28 1997
`[&%fTW+ Z kBWVZb # Enable network daemons for user convenience.
50dx[v8 ub2B!6f a # Please make all changes to this file, not to /etc/defaults/rc.conf.
!iL6 / KP`Pzx # This file now contains just the overrides from /etc/defaults/rc.conf.
WQ9VcCY Ri3*au/Q hostname="wwwx.3322.org" #主机域名
h^YUu`P yJ>Bc defaultrouter="218.10.104.1" #服务商提供的路由器地址
Z-L }"~ ~ %Ij5PD ifconfig_vr0="inet 218.10.104.188 netmask 255.255.255.0" #服务商提供的静态ip
Z6nQW53- FP")$
,=s ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内部网卡ip
Q?bC'147O hG}gKs inetd_enable="YES" #开机加载inetd
w}YcAnuB{% R1Fcd@DWD kern_securelevel_enable="NO"
}((P)\s ~"Su2{"8B linux_enable="YES"
\' &,9lP R*H-QH/H1 nfs_reserved_port_only="NO"
&srD7v9M8 psuK\s sshd_enable="YES"
ky'G/z BO+to. sendmail_enable="NO"
S
rhBU6K TCK#bJ usbd_enable="NO"
{]iM5? zj$Ve gateway_enable="YES"
I/zI\PP, #@F firewall_enable="YES"
RLO<5L @cQ
|` firewall_script="/etc/rc.firewall"
BnG{)\s d>0 j!+s firewall_type="open"
%r@:7/ O4!!*0(+91 firewall_quiet="YES"
_y:aPn
\okvL2:! firewall_logging_enable="YES"
L% T%6p_ qykI[4 natd_enable="YES" # 启用透明代理
[;#^h/5E D7Ds*X`!l natd_interface="vr0" # natd接口,vr0为连接外网modem的网卡
g(R!M0hdF 'X~CrgQl # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
6&btAwvOHx
r@Xh8
r; (完)
;+n25_9 S-79uo (\4YBaGd /S9n!H:MT 重起后网络连接及透明代理生效。客户端同样要按上面说的方法配制。
&-KQ
m20n {~V_6wY g X=VaBy4# 4rypT-%^ ; 使用Squid:
i x_a jF{)2|5 Squid是一个非常不错的代理缓存软件。我曾经一直在使用,后来因为我经常要改变web服务器里的网页,而Squid总是把我以前的页面缓存,致使不能马上反映页面的更新情况,再加上公司上网的负担不是很重。所以就不用了。
U8eU[|-8O/ ~g *`E!2 安装方法:
lWFm>DiLY 3V/f-l]X/ 在FreeBSD下安装软件最方便的方法是使用ports。本文为了让大家对通用的软件安装方法做一定的了解,我们采用通用的方法来安装squid,也就是说,下面的方法同样适用于linux或其他unix版本。
#B__-"cRv 6W'2w?qj?4 ^mZTki4 (Li)@Cn% 在ylf的用户目录下创建目录app用来存放程序安装临时文件:
V_9>Z? R/&C}6Gn # mkdir /home/ylf/app
/?C6oj1 ~{D:vj4> 将用户ylf设为/home/ylf/app目录及其子目录的所有者
h)T-7b F5<GGEQb # chown –R ylf /home/ylf/app
_p| KaT`` '~7 6Y9mv 到
http://www.squid-cache.org/Versions/v2/2.5/ 下载squid 的最新稳定版本,现在是squid-2.5.STABLE3
TzrU |D? yjucR
Fl 打开IE浏览器,在地址栏输入
ftp://192.168.0.1 ,出现ftp登陆对话框,输入用户名ylf及密码,登录成功后。将下载的squid-2.5.STABLE3复制到app目录中。
9-?kamA y9Q"3LLic` 执行如下命令:
9|hPl-.
.W F:-6Htmj # cd /home/ylf/app
;W!hl<``d* !Op18hP$ # tar zxvf squid-2.5.STABLE3.tar.gz #解压缩安装包
Q?Uk%t\hwc #~ [mn_C # cd squid-2.5.STABLE3 #进入解开的目录
eS"sd^;R (d-j/v*4 # ./configure --prefix=/usr/local/squid #配制、将squid安装在/usr/local/squid目录
`=#ry*E^: |9
4xRC # make all #编译
nmrdqSV @3>nVa # make install #安装
!7anJl (ZEDDV2 下面编辑squid的配置文件:
D"n
3If% dUpOg{I.x # cd /usr/local/squid/etc
B'D4]EB Alb5#tm:m 将原来的配置文件改名
WR>2t&;E ,DbT4Ul c # mv squid.conf squid.conf.bak
Vt
U sJYs{Wm 编辑新的配置文件
JOx""R8T5 2@f E! # vi squid.conf
umc\x"i% 0N3S@l#,\A 我的squid.conf内容如下:
q\87<=9J !_[^%7"S1 J""N:X!1 q,eXH8 x #取消对代理阵列的支持
(?zZvW8 \J^|H@;(@ icp_port 0
QX393v! ~TALpd `!g
XA.9Uv zgHF-KEV #对日志文件和pid文件位置进行设置
<S
M%M? qxglA*/
[ cache_store_log none
H>5@/0cL2 K\>CXa cache_access_log /usr/local/squid/var/logs/access.log
ic|>JX$G }g[(h=Qi cache_log /usr/local/squid/var/logs/cache.log
NYZI;P1DA 8fs::}0 emulate_httpd_log on
%+Khj@aX s&*s9F pid_filename /usr/local/squid/var/logs/squid.pid
{!vz 6QDS dCH(N_ Gu136XiX Qws#v}xF #设置运行时的用户和组权限
k`Ifd:V.y G!IJ#|D:~ cache_effective_user squid
O}_Z"y k ihO~< cache_effective_group squid
EJ3R{^ %z:;t [Lo}_v& rhe;j/ /` #设置管理信息
c\pPwG hgi9%>oUB visible_hostname wwwx.3322.org.
c/E6}OWA VR9C< tMSi cache_mgr
yourname@yourdomain.com ua
vv }n JG<rY +EBoFeeIG
: V#W
y #设置监听地址和端口
x?| p#dpDjh http_port 3128
,M&[c| +Ss|4O}' udp_incoming_address 0.0.0.0
W:16qbK j/xL+Y(=
!(<Yc5 <C_FI` wk #设置squid用户hot object的物理内存的大小以及设置cache目录
#wZ:E,R K)"cwk- cache_mem 32 MB
eqze7EY \WVrn >%xu cache_dir ufs /usr/local/squid/cache 1024 16 256
3#ua xd H*[ ]OOL4=b 0oi
=}lV #访问控制设置
\'40u|f RT)*H>| acl mynet src 192.168.0.0/255.255.255.0
j@b4)t *:}NS8hP acl all src 0.0.0.0/0.0.0.0
ZrFC#wJb 8?r
,ylUj http_access allow mynet
a|im DY_-j kEE8cW3 http_access deny all
YFCP'J"Z rE
bC_< dZ7+Iw;m pU*dE
#透明代理设置
,]'?Gd ZAPT5 httpd_accel_host virtual
##!)}i wKCHG/W httpd_accel_port 80
DT@6Q. \@4_l?M httpd_accel_with_proxy on
5"5D( .sA?}H#wb httpd_accel_uses_host_header on
-zd*tujx u9FXZK7 qF(F<$B )BY\c7SG #swap 性能微调
J..>ApX 1TKOvy_ half_closed_clients off
vb}; _/#? sSi1;9^o cache_swap_high 100%
MX?K3=j @> ]iuM2] cache_swap_low 80%
<m80e),~ _n(NPFV maximum_object_size 1024 KB
}xHoitOD ~: f9, 9psX"*s ` =!&9o #控制对象的超时时间
9(Vq@.;Z`j pI
|; refresh_pattern -i .html 1440 90% 129600 reload-into-ims
]}cai1 })|+tZ refresh_pattern -i .shtml 1440 90% 129600 reload-into-ims
qDO4&NO n}qHt0N refresh_pattern -i .hml 1440 90% 129600 reload-into-ims
KD^>Vv# ]+W+8)f1M refresh_pattern -i .gif 1440 90% 129600 reload-into-ims
m u(HNj Pn5@7~ refresh_pattern -i .swf 1440 90% 129600 reload-into-ims
N
G1]!Vz5 9/RbfV[) refresh_pattern -i .jpg 1440 90% 129600 reload-into-ims
Ay!=Yk^~ oq=D9 refresh_pattern -i .png 1440 90% 129600 reload-into-ims
@YP\!#"8 b1jh2pG(V refresh_pattern -i .bmp 1440 90% 129600 reload-into-ims
k'wF+> LQ?J
r>4 refresh_pattern -i .js 1440 90% 129600 reload-into-ims
3KfZI&g -,et. * (完)
Wy,DA^\ef "TKf"zc 2s;/*<WM C8y 3T/G 需要改的地方是访问控制设置中的子网改成你自己的子网。其他的地方可根据需要调整。不改也可。
%FQMB %lV&QQa 如果不使用日志,将日志设置部分改成如下句子:
O: sjf?z KGkzE cache_store_log none
'bkecC t(CdoE,6 cache_access_log /dev/null
Lm9y!>1"O 0X -u'=Bs cache_log /dev/null
XZA3TZ fSl+;|Kn >\8Bu#&s4 tuK"}HepB 添加squid系统用户和组
b/ 'fC%o, t/_w} # pw groupadd squid
-c%GlpZw UKQ,]VC # pw useradd squid -g squid -s /sbin/nologin
f!*b8ND^R
5SK{^hw 建立cache目录
,v$gQU2 X}_}`wIn # mkdir /usr/local/squid/cache
(80]xLEBL U
n2xZ[4 改变cache目录和logs目录的所有者为squid用户和组
X_|8CD-@6 0[xum # chown –R squid /usr/local/squid/cache
&7T0nB/) [Ym?"YwVX # chgrp –R squid /usr/local/squid/cache
[Zl Et%s,zeA{2 # chown –R squid /usr/local/squid/var/logs
x';6 <[?oP[ j # chgrp –R squid /usr/local/squid/var/logs
9C$b^wHd 8=T;R&U^M 运行squid –z建立cache目录结构
pQ*9)C %]>c4"H # /usr/local/squid/sbin/squid –z
WhSQ>h!@s 0X`Qt[ ss% ahs jio1#& 测试squid运行情况
4
Yc9Ij vd SV6p.d # /usr/local/squid/sbin/squid –NCd1
4<70mUnt 5P
-IZ8~$ 出现下面显示证明squid安装成功
U{RW=sYB~9 S,lJ&Rsu 2003/06/21 18:01:09| Starting Squid Cache version 2.5.STABLE3 for i386-unknown-freebsd4.7...
3otia;&B
#DwTm~V0" 2003/06/21 18:01:09| Process ID 160
cuBOE2vB. R"Hhc(H 2003/06/21 18:01:09| With 957 file descriptors available
:+/V cG,B;kMjo 2003/06/21 18:01:09| Performing DNS Tests...
1s=M3m&H K/+5$SjF 2003/06/21 18:01:09| Successful DNS name lookup tests...
K&9|0xt *Z KI02M 2003/06/21 18:01:09| DNS Socket created at 0.0.0.0, port 1029, FD 4
WHqp7NPl s,"<+80% 2003/06/21 18:01:09| Adding nameserver 202.97.224.68 from /etc/resolv.conf
,4jkTQ*@2 wZh&w<l' 2003/06/21 18:01:09| Unlinkd pipe opened on FD 9
@xmO\ ['sj'3cW- 2003/06/21 18:01:09| Swap maxSize 1048576 KB, estimated 80659 objects
qWHH%
L; /0d_{Y+9 2003/06/21 18:01:09| Target number of buckets: 4032
j@v*q\X& V?
w;YTg 2003/06/21 18:01:09| Using 8192 Store buckets
8uM >Up X :f ybH)* 2003/06/21 18:01:09| Max Mem size: 32768 KB
,<zGvksk )~T)$TS 2003/06/21 18:01:09| Max Swap size: 1048576 KB
_jR%o1Y} dfiA- h 2003/06/21 18:01:09| Store logging disabled
A$WE:<^ {^Vkxf] 2003/06/21 18:01:09| Rebuilding storage in /usr/local/squid/cache (DIRTY)
BP,"vq $'+ [95(%&k.Q 2003/06/21 18:01:09| Using Least Load store dir selection
PSI5$Vna4p rC14X} X6 2003/06/21 18:01:09| Current Directory is /usr/local/squid/etc
\$/)o1SG x:88E78 2003/06/21 18:01:09| Loaded Icons.
7;#9\a:R? {xW?v; 2003/06/21 18:01:09| Accepting HTTP connections at 0.0.0.0, port 3128, FD 8.
Q$Ga.fI JWr:/? 2003/06/21 18:01:09| WCCP Disabled.
bA@!0,m tU>wRw=d 2003/06/21 18:01:09| Ready to serve requests.
G6w&C^J*8> A9Q!V01_ 2003/06/21 18:01:16| Done scanning /usr/local/squid/cache swaplog (0 entries)
F.HD;C-;( V'#dY~E-P 2003/06/21 18:01:16| Finished rebuilding storage from disk.
_~&6Kb^* *$Z}v&-0k 2003/06/21 18:01:16| 0 Entries scanned
iN"kv JC(rSs* 2003/06/21 18:01:16| 0 Invalid entries.
4vT!xn 8s/gjEwA 2003/06/21 18:01:16| 0 With invalid flags.
r )ZUeHt}w }Xr-xh\v 2003/06/21 18:01:16| 0 Objects loaded.
w0)V3 4[
M!x 2003/06/21 18:01:16| 0 Objects expired.
MGfDxHg] @HxEp;*NH" 2003/06/21 18:01:16| 0 Objects cancelled.
,3.E]_3xX L)a8W
2003/06/21 18:01:16| 0 Duplicate URLs purged.
OKNA36cU' YFv/t=` 2003/06/21 18:01:16| 0 Swapfile clashes avoided.
FAfk;<#'n+ x9Y1v1!5Pu 2003/06/21 18:01:16| Took 7.3 seconds ( 0.0 objects/sec).
$HF. 02{| +wXrQV
2003/06/21 18:01:16| Beginning Validation Procedure
{(w/_C9 =${]j 2003/06/21 18:01:16| Completed Validation Procedure
h$)(-_c3 ah1d0eP 2003/06/21 18:01:16| Validated 0 Entries
G+stt(k: mp!KPw08': 2003/06/21 18:01:16| store_swap_size = 0k
<{bQl
L )XmV3.rI 2003/06/21 18:01:17| storeLateRelease: released 0 object
}&I\a ]>E*s3h 否则根据提示检查配制文件。
PUV)w\!&is uMh[Ht^. _T&?H J0*hJ-/u 为了使squid的透明代理起作用,需要设置端口转发。方法如下:
iZ<^p1i a|SgGtBtT4 编辑/etc/rc.firewall文件,添加下面一句
.+MJ' bW Bw;sg; ipfw add 00500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
dqnH7okZ y >r7(qg OSQZ5:g| 7Ab&C&3 下面建立squid的启动脚本squid.sh:
4sasf94 SeN4gr* 首先建立/usr/local/etc/rc.d目录
$,v
'> Zk4Hs%n # mkdir /usr/local/etc
GR@!mf +~?ze,Di # mkdir /usr/local/etc/rc.d
N+ZDQa[ )uC],CbW{ # cd /usr/local/etc/rc.d
#qrZ(,I@n 6!dbJ5x1 # vi squid.sh
k!3X4;F!_ |t+M/C0y/ 文件内容如下:
g6{.C7m .<`i!Ls #!/bin/sh
ig<Eyr [zl@7X1{_ _8P"/(
`Rw ) DXN|<A #if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
0]4kR8R3[ zs
e<b/G1G # echo "$0: Cannot determine the PREFIX" >&2
>J[Bf9)> dE19_KPm[j # exit 1
"[2CV!_ 0D/u`- #fi
(|)`~z c[\ :^w^I6 lffp\v{w Hy^Em case "$1" in
=}>wxO uPKq<hBI start)
ma9q?H#X [ -"o5!0< if [ -x /usr/local/squid/sbin/squid -a -f /usr/local/squid/etc/squid.conf ]; then
gNF8&T F1) B-wW (cd /usr/local/squid/var/logs; /usr/local/squid/sbin/squid >/dev/null 2>&1 &) ; echo -n ' squid'
vQ/}E@?u yI/2 e [ fi
}P(RGKQZ" :xJ]#
t.. ;;
qX{"R.d
oNQ;9&Z,^2 stop)
wgfA\7Z .] mYpz /usr/local/squid/sbin/squid -k shutdown 2>&1
9qN4f8R ~,+n_KST; # Uncomment this if you'd like the system to (attempt to
j[l6&eX xFxl9oM." # wait for) squid to shut down cleanly
WA}<Zme3[ _J(n~"eR #echo "Sleeping for 45 seconds to allow squid to shutdown.."
xxkUu6x# /WlK*8C #sleep 45
nv&uhu/q |$"2R3 ;;
nX4R S$J}>a#Ry *)
$*
1?"$LN RapHE; < echo "Usage: `basename $0` {start|stop}" >&2
:W]?6= aEU[k>& ;;
]@X5'r" z@;]Hy esac
W%LTcm ?&;d#z*4 KilgeN: CvfXm exit 0
zvjVM"=G 0q'd }D W (完)
L[l?}\ rMXIw 'f&o%5] RrrW0<Ed 这样每次启动后,squid就会自动运行。
r@N 0%JZZ j
!^Tw.Ty 运行/usr/local/etc/rc.d/squid.sh start 启动squid
{Hncm :VwU2 运行/usr/local/etc/rc.d/squid.sh stop 停止squid
xg=}MoX 2VmQ%y6e" =B4,H=7Spf :#D?b.= 关于域名的问题
}s)MDq9 OS8 ^mC 如果需要对外提供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 。
Ci%u =%( o?nlnoe M|!^ #!a( kk]f*[Zi5 第三步:安装配置web服务器
gXr"],OM; @3`:aWda Y `4AML 1'ne[@i^/ 注意:在进行这步操作前建议把squid关掉,因为在进行主页更新测试时squid的cache会使更新后的主页不能及时反映出来!
sX&.8 0dS}pd">k 为了不使用squid,除了关掉squid外,还要删除ipfw的透明代理端口转发语句:
.5Y%I;~v EvZ;i^.8LS # cd /usr/local/etc/rc.d
*9:oTN LhM{LUi # ./squid.sh stop
l`lo5:w `nBCCz'Y! # mv squid.sh squid.sh.bak
+mRFHZG /H#- \r&r # ipfw del 500 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80
2|'v[ WrK!]17or rZRcy9$y> eXJt9olI 本web服务器的其本组成为
]zp5 6U|xa 1I({2@C Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
a<X8l^Ln {FzL@!|| |8I #` ^NJ]~h{n$ 为了简化安装过程并发挥FreeBSD安装软件的优势,本文后续部分将采用ports安装。Ports 使在FreeBSD下安装各种软件变得很轻松。
_^4\z*x 0_yE74i F#=XJYG1 t~pA2?9@ 首先安装ports:(如果已经有/usr/ports目录则证明已经安装过了)
{MmHR `@GqD # /stand/sysinstall
>cwyb9;!kK Z09FW>"u 选Configure—Distributions—ports,ports将被安装在/usr/ports目录中。
K/RQ-xd4 H5t 9Mg| (H *-b4]/ "8K>Yu17 下面安装apache1.3.27+modssl
R'a%_sACj> wu?ahNb.`Y # cd /usr/ports/www/apache13-modssl
AH`n @rs(`4QEh # make install
R"(rL5j v-6"*EP 系统会自动下载安装包并安装完毕。
?f v?6r qGMM3a)Q 安装后系统会自动产生启动脚本apache.sh,在/usr/local/etc/rc.d目录中。可以通过运行apache.sh start|stop来启动或停止apache。
';`fMcN Ke-Q>sm2Q M0!;{1 +3.Ik,Z}zq 安装mysql3.23:
N[4v6GS }HS:3Dt # cd /usr/ports/databases/mysql323-server
?]gZg[ @C)O[&Sk # make install
r})2-3ZA9 tB.;T0n 安装后产生启动脚本/usr/local/etc/rc.d/mysql-server.sh
=jD[A>3I RAR0LKGX 7t-j2 n`< /nXp5g^6( 安装apache模块mod_php4:
&{QB}r &SS"A*xg # cd /usr/ports/www/mod_php4
Lm+!/e )
Kfk\ 首先编辑scripts目录下的configure.php文件,加入对OpenSSL的支持
<B6@q4Q ${'gyD # vi scripts/configure.php
D^Dm, - U
-~%-gFC 找到下面一句
xO'I*) ~45u
a OpenSSL "OpenSSL support" ON \
E#"QaI8` \C.%S +u 改成
1"46OCu{ 9dA(f~ OpenSSL "OpenSSL support" YES \
.lu:S;JSnS Rde_I`Ru >4TJH
lB}8 FzmCS@yA # make install
zjgK78!< gd<8RVA 出现对话框时直接选ok继续
oTZ?x}Z1 "?,3O2t FD(zj ^* RAKQ+Y"nl 安装完成后编辑apache的配制文件/usr/local/etc/apache/httpd.conf ,添加如下内容:
ANSv ZqKh 9[DQ[bL nPq\J~M ~\dpD # 设置默认可以使用的主页名称,这句系统一般已经有了,不用添加了
>_M}l@1 >V(>2eD'S DirectoryIndex index.php index.html
.jMm-vox} mFayU w ]i*q*]x2u &QE^i%6>\ # 这2句需要手工添加
';V(sRU@ I^Ichn AddType application/x-httpd-php .php
*lv)9L+0 @RotJl/> AddType application/x-httpd-php-source .phps
O;[PEV~ BEvSX|M>x n? "ti .G+}Kn9! 安装其他apache常用模块mod_gzip+mod_fastcgi +mod_perl
~l!(I-'?g o^RdVSkU; <mHptgd, L1BpkB # cd /usr/ports/www/mod_gzip
]6OrL
TmP h7Jo_L7 # make install
T~$ePVk>L HY#7Ctn3 80$P35Q" ]Oc
:x # cd /usr/ports/www/mod_fastcgi
$o\p["DP 3iYz<M # make install
yWIieztp GG"0n{>0 编辑/usr/local/etc/apache/httpd.conf文件
Js+d4``W 1hZM)) 添加下面一句
y:4Sw#M%( ;0E"4(S.q1 AddHandler fastcgi-script fcgi fcgi fpl
fLI@;*hL0 ;KQ'/nII qU8UKI P VR?7{3 # cd /usr/ports/www/mod_perl
<6<uO\B\ x+B~ t4A # make install
w%S<N js`zQx' JmNeqpbB`w @usQ*k 重新启动让所有软件自动运行。