企业开源指南:开源项目管理工具

企业开源指南:开源项目管理工具,第1张

为了让开源项目办公室顺利运行,您需要正确的工具。这些关键的任务工具将用于追踪各部门的目标与指标,从工程部门和法律部门到行政领导部门、公关部门与营销部门,同时给予员工收集数据、提供开源软件运行快照和管理公司内部开源软件日常使用所需要的全部资源。

-- Todo

开放源代码的战略性应用之路,起始于一个精心策划、组织与授权的开源项目办公室,以指导和管理开源的创建、分发和使用。但这仅仅只是第一步。为了让开源项目办公室顺利运行,您需要正确的工具。这些关键的任务工具将用于追踪各部门的目标与指标,从工程部门和法律部门到行政领导部门、公关部门与营销部门,同时给予员工收集数据、提供开源软件运行快照和管理公司内部开源软件日常使用所需要的全部资源。

本指南提供了如何开始您的开源工具集建设的详细信息和场景,包括用于跟踪和管理您的开源项目的最重要工具的信息。指南中提及的许多工具已由Linux基金会和该领域的其他领导者创建并开放源代码,可以免费且便捷地为您的项目所使用。您还可以找到一个仪表盘安装程序的示例,该程序融合并展示了多种工具的信息。

一旦您的开源项目办公室启动运行,就应该同时收集合适的软件工具,这些工具允许您的开发团队管理、跟踪、指导和推进其开源项目、开源贡献与开源发布。

在您开始您的开放源代码之路时,使用正确的目标工具还将使开发人员和其他员工的工作更为轻松,也将提供更好的结果,并将成为公司开源项目的成功协作与沟通的基础。

公司所需的开源工具有哪些?早期的讨论大多认为,这取决于公司的业务、产品和服务,以及公司如何服务它的客户和员工。由于开源项目办公室制定了规划流程和战略地图,因此可以选择那些能整合进公司的目标、流程和基础架构的工具。

最终,知道您将需要使用哪些工具的唯一方法,就是了解您想要对开放源代码进行何种操作。

以下是开源项目办公室选择所需管理工具的基本步骤:

这些工具一旦被选定,在落地使用之前,还需要一些额外的准备:

当您在选择工具时,实施操作有助于记忆,当然这也可能会影响您的决定。例如,具有陡峭学习曲线的工具可能需要更多的培训。

在认识到达成组织的目标上你团队的需求,以及自身情况和基础架构的潜在限制之后之后,接下来要做的就是要 探索 并了解那些已准备就绪且可供您使用现有工具。由于大多数工具本身就是开源的,所以如果它们一开始并不能满足您的确切需求,您的开发团队可以联系这些工具的开发者,看看他们是否可以协作根据新的用途添加一些特性。

讽刺的是,许多开源项目办公室并不经常直接使用其他公司开发的工具,或与其他公司合作来开发他们管理开源项目所需的工具。通常,他们想要这样做,但包括 Facebook 和微软在内的许多企业已经拥有现有的工具套件,这些工具套件在真正成为一个合作议题之前就已经实现。由于他们已经拥有了自己的工具集并进行了投资,他们似乎并没有很大意愿采用其他公司的工具。

这就是现在才刚开始构建自己的开源项目的公司具有显著优势的地方。由于他们现在正在建立自己的开源项目办公室并进入开源领域,因此他们不必为受到这样的限制而烦恼。

相反,他们可以聪明地利用别人的成功经验与失败教训,并利用近年来领先的公司所创建的成熟工具来构建自己的开源工具箱。 Linux 基金会的开源行业组织,TODO Group,一直致力于组装一个装满工具的 “Open Source Program Office in A Box” 入门套件,这将使公司能够通过一套紧密结合的预先组装工具开展开源工作。入门套件目前尚未开发完善,但希望最终可以让公司付出更少的初始努力,更轻松地部署和配置他们所需的工具。从事这个项目的 TODO Group 成员包括 Adobe、Capital One、Comcast、Facebook、谷歌、eBay、IBM、微软、三星和 Twitter。

除了适当的工具之外,公司还应该有中央仪表板,以便他们实时监控和跟踪他们的开源项目和开发情况。许多公司可能已经拥有了用于现有开发工作和应用程序的仪表板,并且能够将现有仪表板与其开源工作整合在一起。否则,他们应该创建或采用新的仪表板来改进其开源部署的管理。

正在出现越来越多的用于管理和报告开源项目的工具,这一趋势已经非常明显。如果您的开源项目刚刚开始,那么将您的研究集中在几个您启动和运行所需的基本工具上会更有帮助。

随着您的项目不断发展,以及使用这些工具的经验越来越丰富,您可以开始采用新的工具,来帮助自动化并简化您的流程,响应业务需求的增长。切记,新选择的工具将用于内部文化和流程的补充和支持——而不是引导它们。

以下章节列出了几个基本的工具类别,几乎所有开源项目日常使用的工具都可以划分到这些类别。这有助于您对该研究有系统性的认识。

为满足公司的更多需求,自动化工具变得越来越庞大且规模化。它们可以准确地告诉您谁正在为您的项目做出贡献,并且可以帮助您消除那些减慢项目进度的程序摩擦。

据微软表示,在其开源项目办公室里,大约有 8000 个仓库在 GitHub 上托管,涉及约 11,000 名贡献者,而在 2016 年约有 40,000 个内部请求应用于开源项目。为了管理这些请求,以及所创建的代码和正在更新的代码版本,公司转而使用可以自动化解决混乱的工具。不仅如此,由于数百个项目中很可能会共用同一段代码,因此必须对其进行仔细跟踪,以便在出现安全错误时,可以快速绘制并修复所有的软件影响。在如此大规模的情况下,自动化非常关键,手动更新几乎是不可能的。

那些有助于管理关键任务的工具,也是需要考虑和获取的。例如用于项目管理、跟踪项目质量状况,以及确保开发人员、开源社区和其他公司内部人员之间的清晰且快速沟通的。

大多数通过开源项目办公室开发的企业软件项目都使用 GitHub 作为其集中托管和开发的平台。

GitHub 是一个在线源代码管理站点,它允许开源开发人员在一个中央“存储库”或存储空间中管理和存放他们的代码,参与者可以协作并开发他们的代码。如今,大约有 6400 万个开源代码项目在 GitHub 上托管,涉及大约 2300 万个开发人员。

GitHub 用户可以添加代码、查看已提交的代码、申请更改、获取并提供反馈,以及使用该服务提供项目管理。GitHub 使用 Git Version Control System ,这是由 Linux 创建者 Linus Torvalds 开发的开放源代码项目,为代码和合作开源人员提供了组织机构。每位“贡献者”都有他们正在处理的项目存储库的副本,他们可以在自己计算机中的副本里进行更改,然后将其提交回项目以供未来纳入。然后,“ 拉取请求(pull request)”( 示例 )或代码贡献会被项目组织者审查、讨论、修改,最后批准或拒绝。

代码扫描和合规工具也很重要,它们有助于追踪代码起源和许可要求。关注被引入自身基础架构、产品和服务中的开放源代码以确保符合许可证的要求,对于公司来说是很重要的。

例如,您的应用程序可能包含数千个开源组件。为了保护您的公司免于法律纠纷,了解这些细节是至关重要的。在风险较高的情况下,用户必须根据其业务在风险谱中的所处位置,深入了解代码,从而深入地审核并验证他们所说的许可证。(请参阅我们关于使用和分发开放源代码的指南。)

如前所述,GitHub 是服务于目前大多数开源项目办公室的专业源代码管理系统。但是 GitHub 本身并不能满足项目代码管理的所有需求——特别是当您大规模发展的时候。

开源世界中所使用的一些工具旨在通过添加欠缺的功能来改进GitHub本身,例如支持检查开发者原产地证书(DCO)语句,以确保代码可以被合法授权且应用于开源项目中。

GitHub 在代码审查方面也存在一些不足之处,所以有其他可用的工具可以自动将有问题的代码发回给创建它的贡献者,然后要求他们检查并做出必要的修改。GitHub 没有办法强迫任何人检查他们的代码,而这些聪明的工具解决了这一问题,使工作流程得以改善。

其他 GitHub 特定工具的功能用于提高 GitHub 的性能指标,这些功能通常针对特定项目,而不是提供给整个组织详细信息。对于在多个 GitHub 项目中维护许多开源代码库的公司而言,需要更好的工具来组织和汇总它们,使之有意义。亚马逊、Netflix 和微软提供了大量这样的工具来帮助完成这些任务。

以下是一些最流行和实用的源代码管理工具,可以简化并帮助您的 GitHub 运作:

随着开源项目的发展和成熟,监控和跟踪开源项目的整体质量是企业开源项目的核心任务。为了实现这一目标,您必须收集相应的工具,这些工具应当能够反映单独的开源项目的执行过程并反映单独的开源项目在数十、数百甚至数千个项目中被它们的社区接收的过程。同时,这些工具还必须兼具转化能力, 能够将收集的数据转化为体现整个开源组合中整体项目性能的有意义的、实用的且可操作的信息。

这其中的关键是,您收集到的数据应当可以转化为关键且有用的信息 – 而不是些无用的指标,例如详细说明项目已记录了多少“观察者”明星,自项目开始以来有多少贡献者参与了该项目,亦或是缺乏重要背景资料的其他指标。

最好的项目质量监测工具还必须帮助项目团队对支持他们工作的社区做出回应,同时鼓励贡献开发者的参与和多样化。这意味着这些工具可以帮助保持人员快速响应社区成员发布的问题或反馈,以便他们保持热情参与,且不会感到厌倦并转向其他项目。

一些开源社区有大量的贡献者,而其他一些开源社区则成员较少。项目质量监测工具需要能够适用于各种规模的项目。

以下是一些最受欢迎且实用的项目数据统计和项目质量跟踪工具:

TODO Group 还提供了一个 很好的附加工具列表 :

当然,开源的发展并不仅仅关于代码的开发。它还需要在企业内外部从事项目工作的不同群体之间以及公司开源项目办公室的工作人员之间建立良好的沟通与合作。

为了达到上述目标,开发人员可以依靠他们可能已经应用于其他项目的工具,例如 Internet Relay Chat(IRC) ,开发人员可以发布 与开源开发相关的问题并快速收到回复 。另一个例子是 TWiki ,它是一个开源企业 Wiki 和 Web 协作的平台,开发人员可以在其中讨论代码和项目及相关主题。

此外,企业还可以通过社交媒体平台,门户网站,开源项目存储库和其他能够进行输入、提问和讨论的平台促进沟通交流。

其他有用的工具还包括 Facebook 公司的 mention-bot ,它可以通过自动关联潜在审查者来获得拉取请的快速输入周转以审查代码。当 GitHub 目变得太大导致社区成员无法订阅项目的所有通知时,这一工具尤其值得推荐。

然后是 Slack ,这是一个在线团队项目管理与沟通平台,在这一平台中用户可以访问和共享消息和文件,管理工作流程,搜索信息等等。Slack可以通过设置接收支持请求、代码签入、错误日志和其他任务的通知。

除此之外,当谈到公司参与和支持开源时,不要忘记您公司的公关与营销人员。包括 Twitter、Reddit、Facebook、LinkedIn、Google+ 等网站在内的社交媒体帐户以及企业内外部的博客和网站的使用都是非常重要的。客户关系管理(CRM)软件以及电子邮件群发和新闻简报可以帮助公司让客户了解他们的开源进展。

当谈到企业为开源项目提供并应用的工具时,按理说最重要的是那些帮助企业管理自身企业规模 GitHub 操作的工具。GitHub 是一个可以提供许多操作的完美平台,但对于谷歌、微软、脸书、Twitter、LinkedIn 等大型的复杂公司而言,使用标准的 GitHub 产品可能会有很多限制。

大型企业通常需要更多的功能,包括如身份管理、设置和权限管理,安全性和双重身份验证执行,以及深入理解和跟踪代码存储库的方法。

因此,这些大型企业常需要构建专门的自动化工具来处理诸如入职、离职、安全策略执行以及给予开发人员请求的存储库访问权限等任务。

为满足自身的特殊需求,微软构建了自己的工具来处理诸如此类的任务,以简化和改进其开源项目。微软在 GitHub 上运行良好 ,拥有约 1,345 个存储库,迄今为止涉及约 3,580 名开发人员。

微软创建了一款定制的自助服务—— GitHub management and onboarding portal ,用于组织其项目、存储库和团队。在其最简单的层次上,基于 Web 的门户允许开发人员将他们的微软公司ID映射到他们的GitHub ID,这可以提高系统安全性并帮助简化参与大量重要项目的大量开发人员的组织工作。

该门户还允许员工使用 GitHub 和微软进行身份验证。其创建了员工身份的一个“虚拟链接”,以便根据他们的工作角色向他们提供任务所需权限以完成工作。如果员工离开公司,可根据需要调整系统以删除或重新分类其访问权限。

门户运行在一台或多台云服务器上,并依靠缓存来帮助进行会话和减少 GitHub API 的压力。微软门户平均每天可提供约 1000 名独立用户作为其工程师的工具,这是该公司不断发展的开源工作的一部分,该工作现在包括超过 10,000 名正在使用、贡献和发布开放源代码的工程师。

没有人认为使公司进入开源世界是一件简单的事情。但其他许多公司,包括微软和谷歌等巨头已经在您前面这样做了,而且已提供了详细的路线图、代码和建议等,这将使您自己的开源旅程变得更加轻松。

开源项目办公室的创建和选择一系列关键工具来开始开源工作,选择权掌握在您手中。它们很可能已经激发了开发人员的极大期望,开发人员中的许多人可能已经自发为开源项目做贡献(或在工作中,隐秘地)。

通过开源项目的合作并邀请其他人与您合作,您的公司可以获得不可估量的收益,且能通过节能和创新推动公司发展。

拥有正确的工具对于授权贵公司的开放创新至关重要。

网页端服务器是系统默认的,一般服务器设置是需要设置客户端;一般下载好客户端之后,进行手动设置,首先选择接收邮件服务器类型(POP3或者IMAP),然后填写邮件服务器地址(发送邮件服务器与接收邮件服务器),最后勾选SSL即可。以TOM企业邮箱为例,服务器地址如下(其他服务器不同),POP服务器:pop.qy.tom.com(类型选POP3)IMAP服务器:imap.qy.tom.com(类型选IMAP)SMTP服务器:smtp.qy.tom.com以上操作针对TOM企业邮箱用户绑定客户端进行邮箱服务器设置,此外支持使用企业自己所有的网站域名作为电子邮件地址的后缀,并提供无限空间容量、超大附件传输与单次多邮件发信等。另外,使用TOM企业邮箱可以绑定“随心邮”, 享受无限量的微信提醒服务,作为一个能够在手机微信处理邮件的服务,“随心邮”免去了下载其他客户端和频繁登录邮箱查看邮件,通过“随心邮”用户可以第一时间手机微信对邮件进行回复、收藏、分享等操作,有效提高工作中的沟通效率。

一般购买大品牌的服务器才有相应的驱动程序:

硬件:4核CPU,4G的内存,主板带RIAD,512G内存,

安装与配置Web服务器

Apache服务器源代码安装:

http://httpd.apache.org

Apache RPM软件下载:

http://updates.redhat.com

Apache模块和MPM可使用类型的更详细介绍:

http://httpd.apache.org/docs-2.0/mod/N

Apache对模块的使用有两种方法,一种是将其永久性地编译Apache内核中,即采用静态编译;另一种是采取动态编译,将其编译成DSO(Dynamic shared object,动态共享对象)模块,DSO模块的存储是独立于内核的,可被内核在需要时调用,具体是由mod_so模块提供的运行时配置指令(LoadModule)来实现的,若在编译中包含有任何动态模块,则mod_so模块会被自动包含进内核。若仅希望内核能够支持装载DSO模块,但不实际编译任何动态模块,则在编译配置时就明确指定--enable-so配置参数。

还提供了多道处理模块MPMs(multi-processing modules),编译过程中必须包含一个且只能有一个MPM,编译时系统会根据平台类型自动选择使用默认的MPM,也可在configure命令行中配置:

--with-mpm=要使用MPM类型

模块的指定方法:

1.静态编译模块到内核中,如编译包含mod-sll和mod_rewrite(去掉mod_)模块:

./configure --enable-module="ssl rewrite"或./configure --enable-sll --enable-rewrite

动态编译模块为DSO:

./configure --enable-mods-shared="ssl rewrite"或./configure --enable-rewrite=shared

模块说明:

httpd -l //查看httpd进程中包含哪些模块;

httpd -S //检查虚拟主机的配置是否存在语法错误;

httpd -f //启动httpd守护进程时,加载配置文件;

mod_deflate模块允许支持此功能的浏览器,在请求的页面内容发送前进行压缩,以节少网络带宽。

mod_vbost_alias模块支持虚拟主要的动态配置。

chkconfig --level 235 httpd on

chkconfig --list httpd

service httpd start

service httpd restart

service httpd reload//重新装载httpd.conf(不重启服务器)

./configure --prefix=/usr/local/apache2 --enable-so --with-mpm=prefork --enable-modules="setenvif rewrite deflate vhost_alias"

#apachectl start//启动Apache服务器;

#apachectl restart

#echo "/usr/local/apache2/bin/apachectl start">>/etc/rc.d/rc.local //自动启动

#httpd -t //检查配置文件httpd.conf

#apachect configtest //检查配置文件httpd.conf

#ServerRoot apache安装路径//设置服务器的根目录;

#ServerName 完整的域名[:端口号] //设置服务器用于重定向(端口)和虚拟主机;

#Listen [IP地址]端口号 //告诉服务器接受来自指定端口或者指定IP地址的某端口的请求;

Listen 80

Listen 61.186.160.104:8088

#ServrAdmin E-mail地址 //设置Web站点管理员的E-mail地址,当产生错误时(如指定的网页找不到),服务器返回给客户端的

错误信息中将包含该邮件地址,以告诉用户该向谁报告错误;

#DocumentRoot 目录路径名//设置Web服务器站点根目录;

DocumentRoot /usr/local/apache2/htdocs

#ErrorDocument 错误号 所要显示的网页 //定义当遇到错误时,服务器将给客户端什么样的回应,通常是显示预设置的一个错误页面;

grep ErrorDocument /etc/httpd/conf/httpd.conf //httpd.conf中一些对不同错误的响应信息;

#DirectoryIndex index.php index.htm index.html default.htm //设置站点主页文件的搜索顺序;

#user nobody //设置服务器以哪种(nobody)用户身份来响应客户端的请求;

#Group # -1//设置服务器以哪种(nobody)用户身份来响应客户端的请求;nobody用户权限较小。

#AddDefaultCharset GB2312 //指定默认的字符集;

#TimeOut //设置连接请求超时的时间(秒),超时将断开;

#KeepAlive //用于启用持续的连接或者禁用;KeepAlive On|Off

#MaxKeepAliveRequests //设置在一个持续连接期间允许的最大HTTP请求数目;

#KeepAliveTimeout //设置在关闭TCP连接之前,等待后续请示求的秒数;一旦接受请求建立了TCP连接后则开始计时;

#PidFile logs/httpd.pid//指定存放httpd主(父)进程号的文件名;

日志配置命令:

#ErrorLog //指定服务器存放错误日志文件的位置和文件名;

#LogLevel //设置记录在错误日志中的信息的详细程序;

emerg 紧急,系统将无法使用;

alert 必须立即采取措施;

crit致命情况;

crror 错误情况;

warm警告;

info普通信息;

notice 一般重要情况;

debug 出错级别信息;

http://127.0.0.1//测试Apache是否正常运行

Test Page

This page is used to test the proper operation of the Apache Web server after it has been installed. If you can read this page, it means that the Apache Web server installed at this site is working properly.

#rpm -q httpd

#rpm -Uvh http-2.0.40-21.11.i386.rpm

目录说明:

/etc/httpd/conf//Apache服务器的配置文件httpd.conf

/etc/rc.d/init.d/ //Apache服务器启动脚本安装,httpd

/var/www/html //Web站点根目录;

/usr/bin //Apache软件包提供的可执行程序安装在该目录下。

/etc/httpd/logs//日志文件

htdocs //默认Web站点的根目录,可通过配置文件httpd.conf进行设置或更改;

cgi-bin//CGI脚本目录;

bin//apachectl启动脚本会自动设置在某些操作系统下,正常运行httpd所需的环境变量;

httpd守扩进程被调用后做的第一件事就是读取httpd.conf,并根据其配置项来配置当前Web服务器;

httpd.conf 分为三部分(section),

第一部分为全局环境设置,主要用于设置ServerRoot、主进程号的保存文件、

对进程的控制、服务器侦听的IP地址、端口、要装载的DSO模块

第二部分是服务器的主要配置指一位置;

第三部分用于设置和创建虚拟主机;

Listen 80 //Web服务器绑定在80端口;

DocumentRoot //设置Web站点的根目录等;

访问控制指令:

<Directory /usr/local/*/htdoes> //<Directory>使指定的目录及其子目录有效;不可嵌套。目录名可使用“*”或“?”通配符,

<Files ~“\.ht">//作用于指定的文件,则不管该文件实际存在子哪个目录,允许所有主机访问位于任何目录下的.ht开的文件

Order allow,deny //指定allow和deny语句,哪一个被执行;允许、禁止访问主机。

Allow from all//允许所有主机访问;也可以是IP地址。

<Files>

</Directory>

<Location /assistant> //针对URL地址进行访问限制,不是文件系统;

Order deny,allow //

Deny from all

Allow from 61.186.160.105

</Location>

Order deny,allow //若主机没有被特别指出拒绝访问,则该资源被允许访问。

Order allow,deny //若主机没有被特别指出允许访问,则该主要将被拒绝访问该资源。

Order mntual-failure //只有那些在allow语句中被指定,同时又没有出现在deny语句的主机,才允许访问。若主机在两条指

令中都没有出现,则将被拒绝访问;

*、? //*代表任意个字符,?代表一个任意的字符;

<DirectoryMatch> //指定目录名时,可直接使用正则表达式;<Directory>若要使用正则表达式,则需要在正则表达式前加“~"

<FilesMatch> //可直接使用正则表达式来通配多个文件;

AccessFileName .htaccess//.htaccess分布式配置文件,在该文件中也可放置一些配置指令,以作用于该文件所在的目录以及

其下的所有子目录。搜寻.htaccess文件会降低系统性能;

<Directory />

AllowOverride None //禁止系统查找.htaccess文件;

Options FollowSymLinks //Options:控制在特定目录中将使用哪些服务器特性;

</Directory>

Options命令可用的选项:

None 不启用任何额处特性;

All 除MultiViews之外的所有特性,默认设置;

ExecCGI 允许执行CGI脚本;

FollowSymLinks 服务器允许在此目录中使用符号连接。在<Location>段中无效

Includes 允许服务器端包含SSI(Server-side includes)

IncludesN()EXEC允许服务器端包含,但禁用#exec和#exec CGI命令。但仍可以从ScriptAltase目录使用#include虚拟CGI脚本;

Indexes 如果一个映射目录的URL被请求,而此目录中又没有DirectoryIndex(如:index.html),那么服务器返回一个

格式化后的目录列表;

MultiViews 允许内容协商的多重视图;

SymLinksIfOwnerMatch 服务器仅在符号连接与其目的目录或文件拥有者具有同样的用户ID时,才使用它;

ExecCGI 拥有ExecCGI执行权限

prefork.c 控制Apache进程,对于使用prefork多道处理模块的Apache服务器;

<IfModule prefork.c>

StartServers 5//设置服务器启动时启动的子进程的个数;

MinSpareServers5//设置服务器中空闲子进程(即没有HTTP处理请求的子进程)数目的下限;

MaxSpareServers10 //设置服务器中空闲子进程数目的上限。若空闲子进程超过该设置值,则父进程就会

停止多余的子进程;

MaxClients 150 //设置服务器允许连接的最大客户数;

MaxRequestsPerChild0//设置子进程所能处理请求的数目上限,0为不受限制;

</IfModule>

access_log //日志文件用于记录服务器处理的所有请求;

CustomLog 指定access_log日志文件的位置和日志记录的格式;

LogFormat 定义日志的记录格式;

LogFormat 日志格式字符串 日志格式名称

LogFormat "%h %1 %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %1 %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i->%U" referer

LogFormat "%{User-agent}i“ agent

LogFormat logs/access_log common

LogFormat "%v %h %l %u %t \"%r"\ %>s %b" vhost

CustomLog logs/vhost_log vhost

%a远程主机IP地址

%A本地主机IP地址

%h远程主机名

%H请求协议

%l远程登录名

%u来自auth 的远程用户

%U请求的URL路径

%U{User-agent}i 用户浏览器类型

%b发送的字节数,不包括HTTP标题

%t请求的时间

%rHTTP请求的第一行的内容

%sHTTP响应状态码,200代表访问成功,404代表文件未找到,403代表禁止访问,401代表未授权访问,400代表错误请求。

%m请求方法

%v服务于该请求的服务器的ServerName

%V服务器的名字,取决于UseCanonicalName的设置

%{Host}i 返回HTTP请求的主机头信息,可能含端口号信息

split-logfile </var/www/myweb/vhost_log//当所有虚拟机日志都记录在主站点日志中时,使用此命令将日志按虚拟主机名分组,拆分成一个个独立的日

志文件,第个日志文件采用"虚拟主机名.log“形式命名,其中包含了该虚拟主机所产生的日志记录;

容器与访问控制指令:容器指令通常用于封装一组指令,使其在容器条件成立时有效,或者用于改变指令的作用域。

<IfModue ! mpm_winnt.c> //<IfModue>用于判断指定的模块是否存在,若存在(被静态地编译进服务器,或是被动态装载进服务器)则包含于

其中的指令将有效,否则会被忽略。可嵌套使用。

<IfModue ! mpm_netware.c> //若要使模块不存在时所包含的指令有效,只需在模块名前加一个“!”即可,

User nobody

Group # -1

</IfModue>

</IfModue>

基于域名虚拟主机:

例:假设当前服务器的IP地址为192.168.3.120,现要在该服务器创建两个基于域名的虚拟主机,使用端口为标准的80,其域名分别为www.myweb1.com和www.myweb2.com,站点根目录分别为/var/www/myweb1和/var/www/myweb2,日志文件分别放在/var/vhlogs/myweb1和/var/vhlogs/myweb2目录下面,Apache服务器原来的主站点采用域名www.myweb.com进行访问。

#vi /etc/hosts //使用/etc/hosts进行域名注册;

192.168.3.120 www.myweb1.com www.myweb2.com www.myweb.com

#ping www.myweb1.com //检测域名解析是否正常;

#ping www.myweb2.com

#ping www.myweb.com

#mkdir -p /var/www/myweb1

#mkdir -p /var/www/myweb2

#mkdir -p /var/vhlogs/myweb1

#mkdir -p /var/vhlogs/myweb2

#vi /etc/httpd/conf/httpd.conf

Listen 80 //设置Listen指令侦听的端口

NameVirtualHost 192.168.3.120 //基于域名的虚拟主机,如果对多个地址使用了多个基于域名的虚拟主机

则对每个地址均要使用此指令:NameVirtualHost IP地址:端口

NameVirtualHost * 当IP地址无法确定时,使用“*”通配任意的IP地址

<VirtualHost 192.168.3.120>//定义一个虚拟主机,VirtualHost的参数必须与NameVirtualHost后面所使用的参数保持一致。

ServerName www.myweb.com//当一个请求到时,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的IP地址。如果匹配,就会

DocumentRoot /usr/local/apache/htdoes //就会查找每个与这个IP地址相对应的<VirtualHost>配置段,并尝试找出一个ServerName或ServerAlias配置相

ServerAdmin yjghddii@126.com//与请求的主机名(域名)相同的,若找到,则使用该虚拟主机的配置,并响应其访问请求。否则将使用符合这个

</VirtualHost> //IP地址的第一个列出的虚拟主机。在最前面的虚拟主机成为默认虚拟主机。

<VirtualHost 192.168.3.120>

ServerName www.myweb1.com

DocumentRoot /var/www/myweb1

DirectoryIndex index.php index.php3 index.html index.htm default.html default.html

ServerAdmin yjghddii@126.com

ErrorLog /var/vhlogs/myweb/error_log

TransferLog /var/vhlogs/myweb1/access_log

</VirtualHost>

<VritualHost 192.168.3.200>

ServerName www.myweb2.com

DocumenRoot /var/www/myweb2

DirectoryIndex index.php index.php3 index.htm index.html default.htm default.html

ServerAdmin yjghddii@126.com

ErrorLog /var/vhlogs/myweb2/error_log

TranferLog /var/vhlogs/myweb2/access_log

</VirtualHost>

<Directory /var/www>//对Web站点目录设置访问控制;

Options FllowSymLinks

AllowOverride None

Order deny,allow

Allow from all

</Directory>

Apachectl –S //查查虚拟主机配置是否正确;

Aparhectl restart//重启Apache服务器配置生效;

例:

NameVirtualHost 192.168.168.10 //服务器配有两块网卡,IP:内网192.168.168.10,外网61.186.160.104,在Internet网中,企业域名

NameVirtualHost 61.186.160.104 //www.example.com指向外网IP地址,在企业内网的DNS服务器中,指向内网IP地址;现要求为来自内网

<VirtualHost 192.168.168.10 61.186.160.104>//外网的请求提供同样的Web服务。(httpd.conf中设置)

DocumentRoot /www/server1

ServerName www.example.com

</Virtual>

例:

Listen 80 //服务器:192.168.168.154,服务器上创建两个基于域名(主机名)的虚拟主机,域名:www.myweb3.com和www.

Listen 8080 //myweb4.com,每个虚拟主机的80端口和8080端口,分别服务一个Web站点,其站点根目录分别为

// /var/www/myweb3-80、/var/www/myweb3-8080、/var/www/myweb4-80、/var/www/myweb4-8080。

NameVirtualHost 192.168.168.154:80//www.myweb3.com的80端口作为默认Web站点。

NameVirtualHost 192.168.168.154:8080

<VirtualHost 192.168.168.154:80>

ServerName www.myweb3.com

DocumentRoot /var/www/myweb3-80

<VirtualHost>

<VirtualHost 192.168.168.154:8080>

ServerName www.myweb3.com

DocumentRoot /var/www/myweb3-8080

</VirtualHost>

<VirtualHost 192.168.168.154:80>

ServerName www.myweb4.com

DocumentRoot /var/www/myweb4-80

</VirtualHost>

<VirtualHost 192.168.168.154:8080>

ServerName www.myweb4.com

DocumentRoot /var/www/myweb4-8080

</VirtualHost>

基于IP地址虚拟主机:

#cd /etc/sysconfig/network-scripts //服务器有两张网卡eth0、eth1,eth0:192.168.167.157,

#cp ifctg-eth1 ifcfg-eth1:0//eth1:192.168.167.156.eth0网卡用作了基于主机名的虚拟主机,

#vi ifcfg-eth1:0 //eth1通过IP别名方式,为其绑定多个IP地址,用于提供基于IP地址

DEVICE=eth1:0 //的虚拟主机。eth1绑定的第一张虚拟网卡的设备名为eth1:0,对应的

IPADDR=192.168.167.157 //配置文件为ifcfg-eth1:0,通过修改配置文件中的设备名和IP地址,

#ifdown eth1 //即可实现IP地址的绑定。

#ifup eth1:0

#ifup eth1

#ping 192.168.167.157

#ping 192.168.167.156

#vi /etc/hosts//192.168.167.156:www.example2.com,192.168.167.157:

192.168.167.157 www.example3.com //www.example3.com,试为其创建基于IP地址的虚拟主机,端口使用80

#mkdir -p /var/www/example2 //目录分别为/var/www/example2、/var/www/example3,为这两个域再增

#mkdir -p /var/www/example3 //8080端口,使其也能在8080端口发布另外的Web站点。Web站点根目录分

///var/www/example2-8080、/var/www/example3-8080

#vi httpd.conf

Listen 80

Listen 8080

<VirtualHost 192.168.167.156:80>

ServerName www.example2.com

DocumentRoot /var/www/example2

</VirtualHost>

<VirtualHost 192.168.167.156:8080>

ServerName www.example2.com

DocumentRoot /var/www/example2-8080

</VirtualHost>

<VirtualHost 192.168.167.157:80>

ServerName www.exaple3.com

DocumentRoot /var/www/example3

</VirtualHost>

<VirtualHost 192.168.167.157:8080>

ServerName www.exaple3.com

DocumentRoot /var/www/example3-8080

</VirtualHost>


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/614904.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-14
下一篇2023-07-14

发表评论

登录后才能评论

评论列表(0条)

    保存