基于Apache的服务器配置.docx
《基于Apache的服务器配置.docx》由会员分享,可在线阅读,更多相关《基于Apache的服务器配置.docx(13页珍藏版)》请在冰点文库上搜索。
基于Apache的服务器配置
基于Apache的服务器
一、简介
所有可能的服务器当中,Apache为基础的服务器是最灵活的,尽管配置有一点复杂,但是提供了其他服务器没有的便利:
1.WebDAV
TheApachebasedSubversionserverusestheWebDAVprotocolwhichissupportedbymanyotherprogramsaswell.Youcoulde.g.mountsucharepositoryasa“Webfolder”intheWindowsexplorerandthenaccessitlikeanyotherfolderinthefilesystem.
2.浏览版本库
可以将浏览器指向版本库的URL,无需安装Subversion客户端就可以浏览内容,这样可以扩大访问数据的用户圈。
3.认证
可以使用所有Apache支持的认证机制,包括SSPI和LDAP。
4.安全
因为Apache非常稳定和安全,你的版本库可以自动获得同样的安全性,包括SSL加密。
二、安装Apache
安装Apache的先决条件是有一台安装了Windows2000,WindowsXPSP1+,Windows2003,Vista或WindowsServer2008的计算机。
请注意,WindowsXP如果没有安装SP1将会导致不正常的网络传输,从而搞坏你的版本库!
1.从http:
//httpd.apache.org/download.cgi下载最新版本的Apache,请确认你下载的版本是2.2.x-1.3.xx的版本不能工作!
ThemsiinstallerforApachecanbefoundbyclickingonotherfiles,thenbrowsetobinaries/win32.Youmaywanttochoosethemsifileapache-2.2.x-win32-x86-openssl-0.9.x.msi(theonethatincludesOpenSSL).
2.一旦有了Apache2安装程序,可以双击它,然后它会指导你的安装过程。
请确认输入的服务器URL正确(如果你的服务器没有DNS名称,请直接输入IP地址)。
建议为所有用户在80端口安装Apache服务。
注意:
如果已经有了IIS或其他监听80端口的程序,安装会失败。
如果发生这种情况,直接到程序的安装目录\ApacheGroup\Apache2\conf,打开httpd.conf。
编辑文件的Listen80为其他可用的端口,例如Listen81,然后重新启动-这样就不会那个问题了。
3.现在可以测试Apache服务器是否正确运行,将浏览器指向http:
//localhost/-将会看到一个预先配置的网站。
小心:
如果你决定将Apache安装为服务,缺省情况以本地系统帐户运行会发出警告,更安全的方法是为Apache创建一个单独的运行帐户。
请确认Apache运行的帐户是版本库目录的访问控制列表(右键目录|属性|安全)中一个明确的条目,对目录有完全的控制能力,否则,用户不能提交他们的修改。
即使Apache运行于本地系统,你仍然需要这个条目(这种情况下将是SYSTEM帐户)。
如果没有配置Apache的此访问权限,你的用户会得到“拒绝访问(Accessdenied)”的错误信息,在Apache的错误日志中的错误代码是500。
三、安装Subversion
DownloadthelatestversionoftheSubversionWin32binariesforApache.BesuretogettherightversiontointegratewithyourversionofApache,otherwiseyouwillgetanobscureerrormessagewhenyoutrytorestart.IfyouhaveApache2.2.xgotohttp:
//subversion.tigris.org/servlets/ProjectDocumentList?
folderID=8100.
1.运行Subversion安装程序,并根据指导安装,如果Subversion认识到你安装了Apache,就基本完成了工作,如果它没有找到Apache服务器,还需要额外的步骤。
2.使用Windwos资源管理器,来到Subversion的安装目录(通常是c:
\programfiles\Subversion),找到文件/httpd/mod_dav_svn.so和mod_authz_svn.so,复制这些文件到Apache的模块目录(通常是c:
\programfiles\apachegroup\apache2\modules)。
3.从Subversion安装目录将/bin/libdb*.dll和/bin/intl3_svn.dll复制到Apache的bin目录。
4.使用记事本之类的文本编辑器修改Apache的配置文件(通常是C:
\ProgramFiles\ApacheGroup\Apache2\conf\httpd.conf),做出如下修改:
去掉以下几行的注释(删除'#'标记):
#LoadModuledav_fs_modulemodules/mod_dav_fs.so
#LoadModuledav_modulemodules/mod_dav.so
将以下两行到LoadModule节的末尾。
LoadModuledav_svn_modulemodules/mod_dav_svn.so
LoadModuleauthz_svn_modulemodules/mod_authz_svn.so
四、配置
现在已经配置了Apache和Subversion,但是Apache不知道如何处理Subversion客户端,例如TortoiseSVN。
为了让Apache知道哪个URL是用作Subversion版本库,需要使用任意文本编辑器(例如记事本)编辑Apache的配置文件(通常是c:
\programfiles\apachegroup\apache2\conf\httpd.conf):
1.Attheendoftheconfigfileaddthefollowinglines:
2.
3.DAVsvn
4.SVNListParentPathon
5.SVNParentPathD:
\SVN
6.#SVNIndexXSLT"/svnindex.xsl"
7.AuthTypeBasic
8.AuthName"Subversionrepositories"
9.AuthUserFilepasswd
10.#AuthzSVNAccessFilesvnaccessfile
11.Requirevalid-user
12.
ThisconfiguresApachesothatallyourSubversionrepositoriesarephysicallylocatedbelowD:
\SVN.TherepositoriesareservedtotheoutsideworldfromtheURL:
http:
//MyServer/svn/.Accessisrestrictedtoknownusers/passwordslistedinthepasswdfile.
刚才输入的简短解释(表4.1设置Apache的httpd.conf):
设置
解释
意思是Subversion版本库的URL是http:
//MyServer/svn/
DAVsvn
告诉Apache是哪个模块响应那个URL的请求-此刻是Subversion模块。
SVNListParentPathon
对于Subversion1.3或者更高版本,这个指示会列出所有SVNParentPath中的版本库。
SVNParentPathD:
\SVN
告诉Subversion需要查看的版本库位于D:
\SVN之下
SVNIndexXSLT"/svnindex.xsl"
使用它可以在用浏览器浏览时更好看。
AuthTypeBasic
激活基本认证,就是用户名/密码
AuthName"Subversionrepositories"
用来说明何时弹出要求用户输入认证信息的认证对话框
AuthUserFilepasswd
指定使用的认证密码文件
AuthzSVNAccessFile
位置Subversion版本库的访问控制文件的路径
Requirevalid-user
指定只有输入了正确的用户/密码的用户可以访问URL
五、多版本库
如果你使用SVNParentPath指示,你就不必在每次添加新Subversion版本库时修改Apache的配置文件,只需要在第一个版本库所在的位置建立新的版本库就可以了。
在我的公司,我可以使用SMB(普通的windows文件访问)直接访问服务器的文件夹,所以我直接在那里创建一个目录,运行TortoiseSVN命令TortoiseSVN→在此创建版本库...,然后一个新的项目建立了...
如果你使用Subversion1.3或更高版本,可以使用SVNListParentPathon指示,这样当你使用浏览器访问父路径而不是具体某个版本库时Apache就会显示所有版本库列表。
六、路径为基础的授权
mod_authz_svn模块可以根据用户名和路径实现细粒度的权限控制,它对Apache服务器有效,在Subversion1.3以上版本的svnserve中也实现了基于路径的授权。
举例:
[groups]
admin=john,kate
devteam1=john,rachel,sally
devteam2=kate,peter,mark
docs=bob,jane,mike
training=zak
#DefaultaccessruleforALLrepositories
#Everyonecanread,adminscanwrite,DanGermanisexcluded.
[/]
*=r
@admin=rw
dangerman=
#Allowdeveloperscompleteaccesstotheirprojectrepos
[proj1:
/]
@devteam1=rw
[proj2:
/]
@devteam2=rw
[bigproj:
/]
@devteam1=rw
@devteam2=rw
trevor=rw
#Givethedocpeoplewriteaccesstoallthedocsfolders
[/trunk/doc]
@docs=rw
#Givetraineeswriteaccessinthetrainingrepositoryonly
[TrainingRepos:
/]
@training=rw
请注意,检查每一条路径是一件消耗极大的操作,特别是修订版本日志,服务器会检查在每一个修订版本的每一条路径是否可读,对于影响很多文件的修订将会花费很多时间。
认证和授权是不同的处理过程,如果用户希望获得对版本库的访问,他需要通过全部检查,即通常的认证需求和访问控制文件的授权需求。
七、使用Windows域认证
需要为每个用户在passwd文件中创建用户名/密码条目,如果(因为安全原因)他们希望周期性的修改他们的密码,你需要手动的做出修改。
但是对于此问题有另一个解决方案-至少是你在使用域控制器的LAN中访问版本库时:
mod_auth_sspi!
最初的SSPI是由Syneapps提供的,包括源代码。
但是它的开发已经终止。
不过不要失望,社区重新拾起代码并进行了改进,它现在的新主页在SourceForge。
下载此匹配的Apache版本的模块,将文件mod_auth_sspi.so复制到Apache的modules目录。
编辑Apache的配置文件:
增加一行
LoadModulesspi_auth_modulemodules/mod_auth_sspi.so
到LoadModule节。
确认你在下行之前插入此行
LoadModuleauth_modulemodules/mod_auth.so
为了让Subversion领域使用此认证类型,你需要将
AuthTypeBasic
修改为
AuthTypeSSPI
并且在中增加
SSPIAuthOn
SSPIAuthoritativeOn
SSPIDomain
SSPIOmitDomainon
SSPIUsernameCaselower
SSPIPerRequestAuthon
SSPIOfferBasicOn
如果你没有域控制器,可以将域控制器的名称置为。
当使用SSPI认证时,没有必要再使用AuthUserFile行定义密码文件,Apache使用Windows域验证你的用户名和密码,你需要更新svnaccessfile中的用户列表来引用DOMAIN\username。
重要
TheSSPIauthenticationisonlyenabledforSSLsecuredconnections(https).Ifyou'reonlyusingnormalhttpconnectionstoyourserver,itwon'twork.
ToenableSSLonyourserver,seethechapter:
“用SSL使服务器更安全”一节
提示
Subversion的AuthzSVNAccessFile文件对用户名大小写敏感(JUser与juser不同)。
在微软的世界,Windows域和用户名不是大小写敏感。
即使如此,一些网络管理员还是喜欢创建首字母大写的用户帐号(例如JUser)。
使用SSPI的一个问题是用户名和密码是用户在提示输入时发送到Subversion的,而IE经常会不管你的帐户是如何建立的都会自动发送你的用户名。
结果就是你必须为每个用户在AuthzSVNAccessFile中至少创建两个条目:
一个小写的条目和一个与IE传递给Apache一样的条目,你也需要训练你的用户在通过TortoiseSVN输入访问版本库的凭证时使用小写字母。
Apache的错误和访问日志是你最好的朋友,例如帮助你检测传递给Subversion的AuthzSVNAccessFile模块的用户名,你或许需要试验svnaccessfile中用户字符串的精确格式(例如DOMAIN\user还是DOMAIN//user)来使一切工作正常。
八、多重认证源
也可以为Subversion使用不止一个的认证源,为此,你需要将每一种认证设置为non-authoritative,这样Apache会在多个源检查用户名/密码。
一个常见的场景就是同时使用Windows域和passwd文件认证,这样你可以为没有Windows域帐户的用户提供访问SVN的权限。
ToenablebothWindowsdomainandpasswdfileauthentication,addthefollowingentrieswithintheblockofyourApacheconfigfile:
AuthBasicAuthoritativeOff
SSPIAuthoritativeOff
HereisanexampleofthefullApacheconfigurationforcombinedWindowsdomainandpasswdfileauthentication:
DAVsvn
SVNListParentPathon
SVNParentPathD:
\SVN
AuthName"Subversionrepositories"
AuthzSVNAccessFilesvnaccessfile.txt
#NTDomainLogins.
AuthTypeSSPI
SSPIAuthOn
SSPIAuthoritativeOff
SSPIDomain
SSPIOfferBasicOn
#HtpasswdLogins.
AuthTypeBasic
AuthBasicAuthoritativeOff
AuthUserFilepasswd
Requirevalid-user
九、用SSL使服务器更安全
1.安装需要东西,下面是我们要用到的,先下载下来:
1).apache_2.0.59-win32-x86-no_ssl.msi
2).Apache_2.0.59-Openssl_0.9.8b-Win32.zip
3)f
2.相关安装:
直接安装apache_2.0.59-win32-x86-no_ssl.msi,用官方的这份安装文件的话,可以用monitor帮你装成Windows服务,这样就能设定开机时自动启动web服务器了。
安装时会要你填入相关的讯息,建议SeverName用IP地址。
同时也留意一下你把apache装在哪个目录下(比方说C:
Apache2,安装文件会生成Apache2文件夹,假如你安装在C:
下)。
如果你的apache服务已经启动(可以看右下角的工具列图示),请先将它stop,然后找个地方解开2,我们需要把解开后的bin目录下的Apache.exe、ssleay32.dll、libeay32.dll及openssl.exe放到你apache安装目录下的bin目录里,替换掉原本的apache.exe。
解压出来然后再将2解开后的conf目录下的ssl.conf也复制一份到你自己apache目录(如C:
Apache2)下的conf目录里。
还有modules目录下的mod_ssl.so也要放到apache目录下的modules目录里。
在Httpd.conf文件中找到#LoadModulessl_modulemodules/mod_ssl.so,把前面的#号删除。
3.配置ssl.conf文件:
在ssl.conf里找到下列这段叙述,然后把它改成你的设定:
(用文本编辑器,如记事本打开)
#Generalsetupforthevirtualhost
DocumentRoot"你的网页根目录,可以找httpd.conf文件下的DocumentRoot"
ServerName你的domainname或者直接用IP地址:
443
ServerAdmin你的Email地址,我就随便填的admin@TCLHN.com
ErrorLoglogs/error_log
TransferLoglogs/access_log
查看ssl.conf文件里是不是有这几行:
SSLCertificateFileconf/ssl.crt/server.crt
SSLCertificateKeyFileconf/ssl.key/server.key
SSLCertificateChainFileconf/ssl.crt/ca.crt
我这里是把ssl.conf里的及注解掉,这就要看你要不要再去httpd.conf里defineSSL了,嫌麻烦就注解掉。
4.生成证书文件:
我们要产生用SSL连接(HTTPS)时所需要加密的key及身份验证用的CA。
切换至Apache2的bin目录下,把f置其中。
把f文件拖到文本编辑器中打开,修改[CA_default]内的字段如下。
dir=ssl
certs=$dir\\certs
crl_dir=$dir\\crl
database=$dir\\index.txt
new_certs_dir=$dir
certificate=$dir\\cacert.pem
serial=$dir\\serial
crl=$dir\\crl.pem
private_key=$dir\\privkey.pem
RANDFILE=$dir\\privkey.rnd
还有别忘了把这个文件的x509extensions这一行在开头加上#把它注解掉。
然后在Apache2的bin目录下建立一个ssl资料夹,在里面新增两个文件:
index.txt及serial,index.txt让它保留空白即可,然后serial文件输入01。
然后在命令行模式下(「开始」->「运行」输入cmd,然后用cd指令切到Apache2的bin)依次输入下列命令:
1.生成CAprivatekey,它会要求你输入密码,记住了,以后还要用到。
opensslgenrsa-des3-outssl/ca.key1024
2.生成CArequirecert,按照它的说明填入对应资料
opensslreq-configf-new-keyssl/ca.key-outssl/ca.csr
3.生成CApubliccert.
opensslx509-days3650-req-signkeyssl/ca.key-inssl/ca.csr-outssl/ca.crt
4.生成Serverprivatekey
opensslgenrsa-outssl/server.key1024
5.生成Serverrequirecert,这里跟上面填入相同的资料
opensslreq-configf-new-keyssl/server.key-out ssl/server.csr
6.生成Serverpublickey
opensslca-configf-days3650-certssl/ca.crt-keyfilessl/ca.key-inssl/server.csr-outssl/server.crt
注意:
在上边两步填写资料时,CommonName(eg,yourwebsitesdomainname)[]要填的和httpd.conf中的一样,否则会出错,在Apach