查看: 403|回复: 4

如何搭建属于自己的一个网站

[复制链接]

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
发表于 2018-12-23 17:56:46 | 显示全部楼层 |阅读模式
如何搭建属于自己的一个网站
这是一篇关于前面三篇如何搭建Apache网站服务的汇总,因为考虑到查看不方便,所以我汇总了一下,把三篇文档合成了一篇。
前言:在Internet网络环境中,Web服务无疑是最为流行的应用系统。有了Web站点,企业可以充分展示自己的产品、宣传自己的企业形象等等。Web站点还可以提供与客户交流、电子商务交易平台等丰富的网络应用。接下来让我们一起来了解著名的Web网站服务——"Apache HTTP Server"的安装及httpd服务的基本配置。
一、关于Apache
Apache是广泛应用的Web应用系统之一,是开源软件项目的杰出代表,基于标准的HTTP网络协议提供网页浏览服务,在Web服务器领域中长期保持着超过半数的份额。Apache服务器可以运行在Linux、UNIX、Windows等多种操作系统平台。
1.Apache的起源

  • 源于"A Patchy Server",著名的开源Web服务软件
  • 1995年时,发布Apache服务程序的1.0版本
  • 其正式名称是"httpd",一般Apache或httpd,均指Apache HTTP Server
  • 由Apache软件基金会(ASF,Apache Software Foundation)负责管理和维护
  • AFS的官方站点:http://httpd.apache.org/
2.Apache的主要特点

  • 开放源代码、跨平台应用
  • 支持多种网页编程语言
  • 模块化设计 、运行稳定、良好的安全性
3.Apache的主要版本
Apache服务器目前包括1.X和2.X两个版本,并且对其分别进行维护。两个版本具有一定的差异,也具有各自的特性。

  • 1.X
目前最高版本是1.3,运行稳定
向下兼容性较好,但缺乏一些较新的功能

  • 2.X
目前最高版本是2.4
具有更多的功能特性
与1.X相比,配置管理风格存在较大差异
二、安装Apache(httpd)服务器
Httpd服务器的安装可以选用RPM包安装、源码编译安装两种方式,RPM包安装相对比较简单、快速,但是在功能上存在一定的局限性,在实际的生产环境中,使用源码编译安装的方式要更加普遍。
编译安装的优点:

  • 具有较大的自由度,功能可定制
  • 可及时获得最新的软件版本
  • 普遍适用于大多数Linux版本,便于移植使用
获得Apache服务器的源码包

  • 参考地址:http://httpd.apache.org/download.cgi(官网自己下载)
  • 我的云盘链接:https://pan.baidu.com/s/1ICTiuzWXqo-qbX2ipRXIdw
  • 提取码:a4cz
复制链接并打开,输入提取码就可下载
编译安装httpd服务器操作步骤:(如下图)


1.准备工作
为避免发生端口冲突、程序冲突等现象,建议先卸载使用RPM方式安装的httpd

  • 查看是否安装:rpm -q httpd
  • 卸载:rpm -e httpd --nodeps
Apache的配置及运行需要apr、pcre等软件包的支持,因此需要先安装这些软件包,以便提供相应的库和头文件,确保Apache的安装顺利,我们称这些包为前提包,这些前提包在系统光盘中都有,所以我们可以采用yum或RPM安装。

  • Yum安装:如果有网络直接安装,如果没有网络可以先挂载系统光盘,然后搭建一个本地yum仓库安装。如下图:



  • RPM安装:挂载系统光盘,进入系统光盘挂载目录下的Packages目录,然后分别进行安装。如下图:


2.源码编译安装(前面有文章分享过源码安装的详细过程的,如果想了解的话可以在我的主页查找)
源码编译安装httpd服务的过程主要包含解包、配置、编译及安装。
1)解包(如下图)


将httpd源码包解压并释放到/usr/src目录下,然后切换到解压后的源码目录(/usr/src/httpd-2.4.25)中。
2)配置(如下图)


根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径、启用字符集支持等。
上图所示配置中,各选项的含义如下:
--prefix:指定安装目录
--enable-so:启用动态加载模块支持,使httpd具备进一步扩展功能的能力
--enable-rewrite:启用网页地址重写功能,用于网站优化及目录迁移维护
--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网页
--enable-cgi:启用CGI(Common Gateway Interface,公用网络接口)脚本程序支持,便于扩展网站的应用访问能力
3)编译并安装(如下图)


3.确认安装结果
由于指定的安装目录为/usr/local/httpd,因此httpd服务的各种程序、模块、文件等都将复制到此目录下。(如下图)


如上图所示,主要目录的用途如下:

  • /usr/local/httpd/bin:存放httpd服务的各种执行程序文件,包括主程序httpd、服务控制工具apachectl等工具
  • /usr/local/httpd/cgi-bin:存放各种CGI程序文件
  • /usr/local/httpd/logs:存放httpd服务的日志文件
  • /usr/local/httpd/conf:存放httpd服务的各种配置文件,包括主配置文件httpd.conf、增强配置子目录extra等
  • /usr/local/httpd/htdocs:存放网页文档,包括默认首页文件index.html等
  • /usr/local/httpd/modules:存放httpd服务的各种模块文件
4.优化执行路径
通过源码编译安装的httpd服务,程序路径并不在默认的搜索路径中,为了使该服务在使用时更方便,可以为相关程序添加符号链接。这样当执行"httpd -v"命令(产看程序版本)是,就相当于执行"/usr/local/httpd/bin/httpd -v"。如下图:


5.启动服务
由于是源码包编译安装,所以我们暂时不能用systemctl工具管理httpd服务(怎么添加httpd为系统服务,下个文档我们再一起了解),但现在我们可以使用apachectl工具来控制httpd服务。如下图:


注:当启动或者关闭httpd服务时,提示的内容并不是报错,是因为我们还没有改配置文件中Web站点的完整主机名,它可以说是一个警告或者提示内容,可以忽略。
6.测试
在浏览器中,通过IP地址访问httpd服务器,将可以看到Web站点的页面内容。若使用的是httpd服务默认的首页,则页面会提示"It works"。如下图:




可以看到,httpd服务器已经正常启动了。
三、添加httpd为系统服务
CentOS7系统下,将编译安装的程序添加为系统服务有以下两种方式:

  • 通过chkconfig命令添加为系统服务,然后由systemctl进行管理。
  • 在/lib/systemd/system/目录下,手动编写以.service结尾的单元(unit)配置文件。
1.使用chkconfig添加系统服务
若希望将httpd添加为系统服务,以便通过chkconfig进行管理,需要建立可控的服务脚本。其实原理很简单,例如,可将apachectl脚本复制为/etc/init.d/httpd,然后编辑"/etc/rc.d/init.d/httpd"文件,在 #!/bin/sh 下增加两行文字如下:
# chkconfig: 35 70 30 (添加chkconfig识别配置)
# description: Apache
然后将其添加为标准的linux系统服务。(如下图所示)


注:cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd ,如果有其他的版本的Apache存在,也可以直接覆盖掉
2.建立[service].service配置文件
在/lib/systemd/system/目录下,建立一个以.service结尾的单元(unit)配置文件,用于控制由systemd控制或监控的httpd服务。配置文件主要分为三个部分,控制单元[unit]的定义、服务[Service]的定义以及安装部分[Install],具体内容如下所示:


上图所示配置文件的各配置项的作用如下所示:

  • Description:设置服务单元描述字符串。
  • After:设置服务单元的启动先后顺序。例如,http.ervice单元文件中出现"After=network.target"表示启动时先启动network.target,后启动httpd.service,关闭时顺序相反。与After字段相应的还有一个Before字段,如httpd.service单元文件中出现"Before=network.target"表示启动时httpd.service,后启动network.target。
  • Type:设置服务进程的启动类型。需要注意的是,当启动类型为forKing时需要同时设置PIDFile配置项,以帮助systemd准确定位到服务的主进程。
  • PIDFile:设置服务的守护进程的PID文件
  • ExecStart:设置服务启动时执行的命令
  • ExecReload:设置服务重新加载时执行的命令
  • KillMode:设置在单元停止时,杀死进程的方法。Process表示仅杀死主进程。
  • Restart:设置服务进程正常退出、异常退出、被杀死、超时的时候,是否重启该服务。On-failure表示仅在进程异常退出时重启。
  • RestartSec:设置在重启服务前暂停多长时间,默认值是100毫秒(ms)
  • WantedBy:设置该服务所在的Target(运行目标)。WantedBy=graphical.target(图形界面多用户系统)是指,httpd所在的Target是graphical.target运行目标时,该目录下的所有服务均开机启动。该配置项常用的Target除了graphical.target之外,还有multi-user.target(非图形界面多用户系统)
httpd.service文件编辑完之后,就可以使用systemctl工具控制httpd服务了。如下图:


在日常维护的过程中,既可以使用apachectl工具来控制httpd服务,也可以使用systemctl命令控制httpd服务。其实,执行"systemctl start httpd"命令,等同于执行"/usr/local/httpd/bin/apachectl start"命令。
四、web站点的简单部署
1.确定网站名称、IP地址
若要向Internet中发布一个Web站点,需要申请一个合法的互联网IP地址,并向DNS服务提供商注册一个完整的网站名称。在实验环境中,我们可以自行设置。如:Web主机的IP地址设为:192.168.1.1,网站名称改为:www.test.com。如果我们实验环境中最后想通过域名访问到网站,可以在客户机的hosts文件中添加一行主机记录。如下图:


2.配置并启动httpd服务
编辑httpd服务的主配置文件httpd.conf,查找配置项"ServerName",修改web站点的完整主机名为自己定义的主机名(如:www.test.com),用于设置网站名称。这里我们先就简单的修改这一个地方就行,关于其他的更多配置项后面有详细的介绍。修改完配置文件之后,可以使用"apachectl -t或httpd -t"命令对配置文件进行语法检查,如果没有语法错误,会返回ok的信息。然后启动httpd服务。(如下图)


3.部署网页文档
对于新编译安装的httpd服务,网站根目录位于/usr/local/httpd/htdocs下,需要将Web站点的网页文档复制或上传到此目录下。这里我们自己编辑一个简单的网页内容,用来测试。如下图:


4.访问web站点
在客户机的网页浏览器上,通过域名或IP地址访问httpd服务器,将可以看到web站点的页面内容中是我们刚刚编辑的那个简单网页,表示httpd符已经在正常运行。如下图:


5.查看web站点的访问情况
httpd服务有两种类型的日志:访问日志和错误日志,这两种日志的文件名分别为access_log和error_log,均位于/usr/local/httpd/logs目录下。
可以通过查看日志文件access_log,及时了解web站点的访问情况,访问日志中的每行对应一条访问记录,记录了客户机的IP地址、访问时间、请求的网页对象信息。如下图:


当然也可以通过查看错误日志文件error_log,可以为排查服务器运行故障提供参考依据。
五、关于httpd.conf配置文件
要对web站点进行更加具体、更加强大的配置、仅仅学会添加"ServerName"配置项显然是不够的,还需要进一步熟悉httpd.conf配置文件,了解其他各种常见的配置项。
主配置文件httpd.conf由注释行、设置行两部分组成,与大多数linux配置文件一样,注释行以"#"开始,包含了对相关配置内容进行的说明和解释。除了注释行和空行以外的内容为配置行,构成了web服务的有效配置。根据配置所作用的范围不同,设置行又可分为全局配置、区域配置。
1.全局配置项(如下图)


全局配置决定了httpd服务器的全局运行参数,使用"关键字 值"的配置格式。如:"ServerName www.test.com",其中"ServerName"为配置关键字,"www.test.com"为对应的值。
在全局配置中常见的配置项的含义如下:
ServerRoot:设置httpd服务器的根目录,该目录下包括了运行web站点必需的子目录和文件。默认情况下,httpd服务器的根目录为httpd的安装目录。在httpd.conf配置文件中,如果指定目录或文件位置时不使用绝对路径,则该目录或文件位置都认为是在服务器的根目录下。

  • Listen:监听的IP地址、端口号,默认为80
  • User:运行服务的用户身份,默认为daemon
  • Group:运行服务的组身份,默认为daemon
  • ServerAdmin:管理员邮箱
  • ServerName:网站服务器的域名
  • DocumentRoot:网页文档的根目录,网页文档在系统中的实际存放路径。比较容易和ServerRoot混淆,需格外注意
  • DirectoryIndex:默认的索引(首页)页文件,可以设置多个首页文件,以空格分开,默认的首页文件为index.html
  • ErrorLog:设置错误日志文件的路径,默认路径为logs/error_log
  • LogLevel:记录日志的级别,默认为warn(警告)
  • CustomLog:访问日志文件的位置、日志类型,默认路径为logs/access_log,使用的类型为common(通用格式)
  • PidFile:保存httpd进程PID号的文件,默认保存路径为log/httpd.pid,logs目录位于Apache的服务器根目录下
  • AddDefaultCharset:设置站点中的网页默认使用的字符集编码
  • Timeout:网络连接超时,默认为300秒
  • KeepAlive:是否保持连接,可选On或Off
  • MaxKeepAliveRequests:每次连接最多请求文件数
  • KeepAliveTimeout:保持连接状态时的超时时间
  • Include:包含另一个配置文件的内容,可以实现将一些特殊功能的配置放到一个单独的文件中,再使用Include配置项将其包含到httpd.conf文件中,这样便于独立进行配置功能的维护而不影响主配置文件
2.区域配置项
除了全局配置以外,httpd.conf文件中的大多数配置是包括在区域中的。区域配置使用一对组合标记,限定了配置的作用范围。最常见的目录区域配置形式如下图所示:


在以上区域定义中,设置了一个根目录的区域配置,其中添加的访问控制相关配置只对根目录有效,而不会作用于全局或其他目录区域。
注:这里所说的根目录是指设置httpd服务器的根目录(ServerRoot所设置的值),而不是CentOS系统的根目录。
六、httpd服务的访问控制(以下是以httpd-2.4为例,版本不同配置内容也有所差异)
作用:

  • 控制对网站资源的访问
  • 为特定的网站目录添加访问授权
常用访问控制方式:

  • 客户机地址限制
  • 用户授权限制
1.客户机地址限制
使用Require配置项实现访问控制,按先后顺序限制,可以根据主机名或IP地址来决定是否允许客户端访问。在httpd服务器的主配置文件(/usr/local/httpd/conf/httpd.conf)的、、、配置段中均可以使用Require配置项来控制客户端的访问。使用Require配置项时,需要设置客户机地址以构成完整的限制策略,地址的形式可以是IP地址、网络地址、主机名或域名,使用"all"时表示任意地址。
Require配置项的常见语法

  • Require all granted:表示允许所有主机访问
  • Require all denied:表示拒绝所有主机访问
  • Require local:表示仅允许本地主机访问
  • Require [not] host :表示允许或拒绝指定主机或域访问
  • Require [not] ip :表示允许或拒绝指定IP地址或网段访问
例如:只希望IP地址为192.168.1.100的主机能够访问/usr/local/httpd/htdocs网页目录下的内容。如下图:(修改完配置文件记得重启服务)


说一个比较绕的东西,就是在定义限制策略时,多个不带not的Require配置语句之间是或的关系,即任意一条Require配置语句满足条件均可以访问。若既出现了不带not的Require配置语句,又出现了带not的Require配置语句,则语句之间是与的关系,即同时满足所有Require配置语句才可以访问。
再举一个拒绝的例子,例如,只希望禁止来自192.168.0.0/24和192.168.1.0/24两个网段的主机访问,但允许其他任何主机访问。如下图:(修改完配置文件记得重启服务)


注意:在使用not禁止访问时要将其置于容器中,并在容器中指定相应的限制策略。
当未被授权的客户机访问网站目录时,将会被拒绝访问,不同的浏览器中,拒绝的消息可以略有差异,通常都是提示为403错误。如下图:


2.用户授权限制
包含认证(Authentication)和授权(Authorization)两个过程,认证是指识别用户身份的过程,授权是指允许特定用户访问特定目录区域的过程。
Httpd服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证需要在编译httpd之前添加"--enable-auth-digest"选项,但并不是所有的浏览器都支持摘要认证,而基本认证是httpd服务的基本功能,不需要预先配置特别的选项。(以下都是以基本认证为例,对/usr/local/httpd/htdocs网页内容添加用户授权限制)
1)创建用户认证数据文件
Httpd的基本认证通过校验用户名、密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
使用htpasswd工具时,必须指定用户数据文件的位置,添加"-c"选项表示新建立此文件。
示例:执行以下操作可以新建数据文件/usr/local/httpd/conf/.awspwd,其中包含一个名为webadmin的用户信息。


若省略"-c"选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。
2)添加用户授权配置
有了授权用户账号以后,还需要修改httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置哪些用户访问。
示例:只允许".awspwd"数据文件中的用户访问网页。如下图:


上图所示配置项的含义如下:

  • AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示
  • AuthType:设置认证类型,Basic表示基本认证
  • AuthUserFile:设置用于保存用户账号、密码的认证文件路径
  • Require valid-user:要求只有认证文件中的合法用户才能访问。其中,valid-user表示所有合法用户,若只授权给单个用户,可改为指定的用户名(如webadmin)。
注意:用户访问授权与主机访问控制同时设置时,设置的主机访问控制优先生效。
3)验证用户访问授权
当再次访问网站的默认首页时,浏览器会首先弹出认证对话框。如下图所示,只有输入正确的用户名和密码才能查看网页,否则拒绝访问。


七、构建虚拟Web主机
什么是虚拟Web主机
在同一台服务器中运行多个Web站点,其中每一个站点并不独立占用整个服务器。其目的是为了充分利用服务器的硬件资源,提高资源的利用率。
httpd支持的虚拟主机类型

  • 基于域名的虚拟主机:为每个虚拟主机使用不同的域名,但是其对应的IP地址是相同的。这是使用最为普遍的虚拟Web主机类型
  • 基于IP地址的虚拟主机:为每个虚拟主机使用不同的域名,且各自对应不同的IP地址。这种方式需要为服务器配备多个网络接口,因此应用并不是非常广泛。
  • 基于端口的虚拟主机:这种方式并不使用域名、IP地址来区分不同的站点内容,而是使用了不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问,非常不方便用户的访问。
在上述几种虚拟Web主机中,基于域名的虚拟主机是使用最为广泛的,所以我们接下来重点了解一下基于域名的虚拟主机。
1.基于域名的虚拟主机
下面以实现两个虚拟Web主机"www.test1.com"和"www.test2.com"为例,使用一台httpd服务器搭建,IP地址为192.168.1.1。具体构建过程如下。
1)为虚拟机提供域名解析
这里可以采用编辑/etc/hosts文件或者安装DNS服务器两种方式来实现。
编辑hosts文件很简单,就写两行对应的解析记录。如下图:


使用DNS服务器解析域名需要搭建DNS服务器,搭建DNS服务器的步骤前面有文章已经详细介绍过了,在这里就不赘述了(想了解的可以在作者的主页查找《Linux如何搭建DNS服务器》这篇文档),这里我们只说一下配置文件的主要编辑内容。在主配置文件named.conf中添加test1.com和test2.com两个区域;然后在各区域数据文件中均设置"www-->192.168.1.1"的A记录。确认客户机能够正确解析www.test1.com和www.test2.com对应的IP地址。如下图:




2)为虚拟主机准备网页文档
为每个虚拟Web主机准备网站目录及网页文档。为了测试方便,分别为每个虚拟Web主机提供包含不同内容的首页文件。如下图:


3)添加虚拟主机配置
启用基于域名的虚拟Web主机,需要配置以下几个方面的内容:

  • 虚拟主机区域:使用......区域配置文件,为每个虚拟Web主机建立独立的配置内容。其中至少应该包括虚拟主机的网站名称、网页根目录的配置项,其他(如管理邮箱、访问日志等)配置项可根据实际需要添加。
  • 目录权限:使用......区域配置,为每个虚拟Web主机的网站目录设置访问权限,如允许任何人访问。目录访问可以继承其父目录的授权许可,因此可以采取直接为父目录授权访问权限的方法来简化配置。
当虚拟Web主机的数量较多时,建议使用独立的虚拟主机配置文件,然后在httpd.conf文件中通过Include加载这些配置。这样可以将对httpd.conf文件的改动减少至最少,更方便配置内容的维护。如下图:




4)测试——在客户机浏览器分别访问虚拟Web主机
确认能够看到不同的网页内容,如下图。




2.基于IP地址、基于端口的虚拟主机
基于IP地址或基于端口的虚拟主机的过程与基于域名的虚拟主机类似,也需要先提前提供域名解析、准备网页文档,再调整httpd配置、重启httpd服务,然后在客户机中访问虚拟主机进行测试。其中最主要的区别是,不同类型的虚拟主机在httpd.conf文件中的配置内容略有不同。
1)基于IP地址的虚拟主机
对于基于IP地址的虚拟主机,每个虚拟Web主机各自使用不同的IP地址,但都是通过同一台httpd服务器对外提供Web服务。所以,用来支撑这些虚拟web主机的服务器也就需要有大量的网络接口及IP地址,在实际应用中往往不太方便,因此应用不是太广泛。
配置基于IP地址的虚拟web主机时,需要在每个虚拟web主机的virtualHost配置项中指定各自域名所对应的IP地址。这里我们还是以test1.com和test2.com为例,配置区别如下图所示。


注意:需要事先添加网卡(网络接口),然后分别配置不同的IP,其他配置与基于域名的虚拟主机基本相同。
2)基于端口的虚拟主机
基于端口的虚拟主机通常指用于同一个Web站点,其针对的网站名称、IP地址往往是相同的,但通过不同的TCP端口来提供访问不同网页内容的服务入口。在浏览器中访问非80端口的Web服务时,需要指出服务器的端口号。如:httpd://网站名称:端口号
配置基于端口的虚拟web主机时,需要通过多个Listen配置项来指定要监听的TCP端口号,每个虚拟web主机的VirtualHost配置中需同时指定IP地址和端口号。如下图所示:


然后在/usr/local/httpd/conf/httpd.conf配置文件中指定端口,也可以在/usr/local/httpd/conf/extra/httpd-vhosts.conf文件中添加下面两行内容来指定端口(就是随便找个地方添加一下就行,别太随便)。


到这里,Apache网站服务器的搭建基本就完成了,完了就是各种关于服务器的优化问题了。关于优化,主页也有文章分享过。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-12-23 17:47:32 | 显示全部楼层
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-12-23 18:07:03 | 显示全部楼层
转发了
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-12-23 18:27:12 | 显示全部楼层
转发了
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-12-23 18:46:58 | 显示全部楼层
转发了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

快速回复 返回顶部 返回列表