一、实验环境(rhel7.0版本)

主机环境:rhel7.0

各主机信息

主机名IP
server172.25.254.1
物理机172.25.254.7

 

二、Apache 的相关概念

 

1、Apache 的介绍

Apache 就是一个网络服务器,这个服务器侦听一个TCP端口,一般为80,对端口收到的命令进行解释。Apache提供了超文本传输协议http,httpd 是 Apache超文本传输协议的主服务器。下文将对 httpd 的安装和配置进行简单的叙述。

 

2、Apache和Nginx的区别

Apache:稳定;同步阻塞模式(前面的人有优先权,后面的人被阻塞)

Nginx:高效;异步非阻塞模式(前面的人和后面的人可以同时访问)

Linux  +  Apache  + Mariadb  +  Perl/PHP/Python  =  LAMP

Linux  +  Nginx  +  Mariadb  +  Perl/PHP/Python = LNMP

 

3、查看各网站的服务软件类型

使用"curl  -I"命令

 

4、Apache 的 Server/Client 间数据传输的方式

  1. GET:就是浏览器直接向 Apache 服务器要求网址上面的资源,这也是最常见的此外,使用 GET 的方式可以直接在网址列输入变量。举例来说,网址:http://phorum.vbird.org/viewtopic.php?t=96,发现“  ?t=96  ”了吗?t 就是变量,96 就是这个变量的内容。如果你将问号后面的数据拿掉时,看看,会出现什么后果?
  2. POST:这也是客户端向服务器端提出的要求,只是这个要求里面含有比较多的数据。举例来说,讨论区里面不是常常有留言的选项吗,如果你选择留言的话不是会在浏览器冒出一个框让你填入资料吗?当按下传送后,那个框框内的数据就会被浏览器包起来传送至  Apache 服务器。POST 与 GET 不相同,GET 可以在网址取得客户端所要求的变量,不过 POST 就不是使用网址的功能了。
  3. HEAD:服务器端响应给 Client 端的一些数据文件头而已。
  4. OPTIONS:服务器端响应给 Client 端的一些允许的功能与方法。
  5. DELETE:删除某些资源的举动。

        常见的是 GET 这个项目。只有当大量数据由客户端上传到 Apache 服务端时,才会使用到  POST 这个项目。

 

三、apache的基础信息

 

主配置目录:/etc/httpd/conf

主配置文件:/etc/httpd/conf/httpd.conf

子配置目录:/etc/httpd/conf.d

子配置文件:/etc/httpd/conf.d/*.conf

以上这些配置文件的名字可以通过"rpm  -ql  httpd"查看

默认侦听端口:80

默认发布页:/var/www/html/index.html

默认发布目录:/var/www/html

默认安全上下文:httpd_sys_content_t

程序开启默认用户:apache

apache日志:/etc/httpd/logs/*,一般用到的是:err.log

 

四、Apache的配置

注意:自己访问自己的时候,可以不关闭防火墙或者对防火墙进行设置!!!!!!!!!!!!!!!!

 

服务端——172.25.254.1:

 

1、httpd服务的安装,开启和开机自启动的设置

"yum  install  httpd  -y"。安装httpd服务。

"systemctl  start  httpd"。开启httpd服务。

"systemctl  enable  httpd"。设置httpd服务开机自启动。

 

2、关闭防火墙,并设置防火墙开机不自启动;或者配置防火墙(本文采用图形化配置防火墙的方式

 

【1】、方法一:关闭防火墙,并设置防火墙开机不自启动

"systemctl  stop  firewalld"。关闭防火墙。

"systemctl  disable  firewalld"。设置防火墙开机不自启动。

 

【2】、方法二:或者对防火墙进行配置

配置的方法有两种,一种是命令行的方式,另外一种是图形的方式:

(1)命令行的方式

"firewall-cmd  --list-all"。列出防火墙的控制列表

"firewall-cmd  --permanet   --add-service=http https"。给防火墙允许通过的服务中添加http,https(注意此写法是错误的,不能写在一起,要分开写。)即"firewall-cmd  --permanet  --add-service=http";"firewall-cmd  --permanet  --add-service=https"。——添加https是为了后面的实验提供环境。

"firewall-cmd  --reload"。重新加载防火墙列表

(2)图形的方式

"firewall-config"。进入防火墙配置的图形化界面,进行配置

配置过程:Configuration选择为permanent;在Zones的区域选择public;在Services的区域选择http,https;Options选择Reload  Firewalld。

配置分为两种runtime和permanent

runtime表示当前运行生效,当前设置的参数,在系统重启之后就会失效

permanent表示永久生效,当前设置的参数永久生效,但是在完成设置之后,必须重新加载防火墙

 

3、将selinux的模式设置为强制模式(为该实验提供环境)

 

4、httpd的帮助手册

"man  5  httpd.conf"。查看httpd服务的帮助手册(该手册是没有的)

"yum  install  httpd-manual  -y"。下载httpd服务的帮助手册。重启服务之后(这是因为在/etc/httpd/conf.d 目录下生成了maual.conf 这个配置文件)在浏览器中输入IP/manual,即可查看httpd服务的帮助

手册(自己下载的该手册是英文的,如果想看到中文,那么就在百度里输入"apache帮助手册"即可)。

 

5、httpd服务的默认侦听端口

httpd服务的默认侦听端口是80。

"netstat  -antulpe  |  grep  httpd"。查看httpd的侦听端口。

 

如果要修改httpd服务的侦听端口,请执行下面的操作:

 

(1)添加 Selinux 中允许的端口

 

【1】、第一步:

在文件"/etc/httpd/conf/httpd.conf"中的第42行,可以更改侦听端口(Lisetn),如下图所示,将侦听端口改 为

8080,完成后重启服务。

"netstat  -antulpe  |  grep  httpd"可以看到侦听端口已经发生了变化(有80变为了8080)。

 

【2】、第二步:

但是此时在浏览器中输入:IP:8080是看不到默认发布页内容的。这是因为防火墙允许通过的httpd服务的端口是80。 此时,就需要对防火墙进行配置。

 

<1>、方法一:命令行方式配置过程:

《1》、添加端口

《2》、删除端口

 

<2>、方法二:图形配置过程(本文采用图形化配置):

Configuration选择为permanent;在Zones的区域选择public;在 Ports的区域选择Add,添加端口,这里添加两个
tcp端口:8080和6666(添加两个端口的原因是,为后面的实验做准备);File选择Reload  Firewalld。

 

【3】、第三步:

此时在浏览器中输入:IP:8080是可以看到默认发布页的内容。

 

(2)添加 Selinux 中未允许的端口

 

【1】、第一步:

重复上面的编辑步骤【1】,将侦听端口改为6666,此时发现,httpd服务重启失败。这是因为selinux的影响。

 

【2】、第二步:

"semanage  port  -l  |  grep  http"。查看selinux允许通过的httpd服务的端口。

"semanage  port  -a  -t   http_port_t   -p   tcp  6666"。往selinux允许通过的httpd服务的端口添加6666端口。

  • "semanage  port  -d  -t   http_port_t   -p   tcp  6666"。往selinux允许通过的httpd服务的端口删除6666端口。
  • -a:add,表示添加
  • -d:delete,表示删除

此时,httpd服务可以重启,在浏览器中输入:IP:6666是可以看到默认发布页的内容。

 

6、httpd服务的默认发布页

默认发布文件就是访问Apache时,没有指定文件名称时默认访问的文件,这个文件可以指定多个,有访问顺序(先访

问第一个,第一个不存在时,访问第二个)。

httpd服务的默认发布页为"/var/www/html/index.html",在刚开始这个文件是不存在的。

例如在目录"/var/www/html/"下的"index.html"写入下图所示内容。在浏览器中输入IP就可以看见该内容。

 

如果要修改httpd服务的默认发布页,请执行下面的操作:

 

【1】、第一步:

"vim /var/www/html/xin.html"。在文件中编辑下图所示内容

 

【2】、第二步:

在文件"/etc/httpd/conf/httpd.conf"中的第164行,可以更改默认发布页,如下图所示,将默认发布页改

为"xin.html"(有先后顺序),如果"xin.html"不存在,就访问"index.html"。完成后重启服务。在浏览器中输入IP

 

7、httpd服务的默认发布目录

httpd服务的默认发布目录是"/var/www/html"。

 

如果要修改httpd服务的默认发布目录,请执行下面的操作:

httpd服务的默认发布目录是"/var/www/html"。如果要更改这个默认发布目录,则需要做如下配置:

 

(1)第一种情况:在/var/www目录下建立目录或者在/var/www/html目录下建立目录:(此时:不需要修改目录及其内部内容的安全上下文,也不需要对此目录进行授权)

 

【1】、第一步:

"mkdir   /var/www/test"。建立一个目录作为默认发布目录。

并编辑默认发布页 index.html

 

【2】、第二步:

编辑主配置文件:/etc/httpd/conf/httpd.conf

并重启服务,进行测试

 

(2)第二种情况:不在/var/www目录下建立目录:

 

【1】、第一步:

"mkdir   /xin/www/html   -p"。建立一个目录作为默认发布目录。

"vim /xin/www/html/index.html"。在文件"index.html"中写入下图所示内容。

 

【2】、第二步:

"vim /etc/httpd/conf/httpd.conf"。在配置文件中编辑如下内容,将119行注释,如下图第120行至第123行所示:  

  • 其中Require  all   granted表示任何人都可以访问该目录            

 

【3】、第三步:

"semanage   fcontext   -a   -t    httpd_sys_content_t    '/xin(/.*)?'"。修改"/xin"目录中所有内容的安全上下文,并

通过"restorecon   -RvvF   /xin"刷新生效。

配置完成后,在浏览器当中输入IP,就可以看见【2】中编辑的文件内容。

 

总结:

  • 1.对于侦听端口的修改,有两种情况:

(1)selinux允许通过的端口,其中能使用的只有第一行和第三行;

(2)elinux不允许通过的端口,使用命令添加端口到selinux循序通过的端口中。只能添加到第三行。

  • 2.对于默认发布页的修改,只有上面描述的一种情况。
  • 3.对于默认发布目录的修改,有三种情况:

(1)将默认发布目录修改为/var/www/html下的某个新建的目录,此时只需要修改DocumentRoot后面的目录即可;

(2)将默认发布目录修改为/var/www下的某个新建的目录,此时只需要修改DocumentRoot后面的目录即可;

(3)将默认发布目录修改为不是/var/www/html下的某个新建目录,也不是/var/www下的某个目录。此时要做三件事:

  1. 修改DocumentRoot后面的目录;
  2. 在DocumentRoot这行下面添加,对该目录的授权(Require  all  granted等等);
  3. 修改该新建目录的安全上下文。

 

五、Apache的虚拟主机

 

为了排除其他因素的影响,将httpd服务之前的配置都还原

 

httpd也可以从多个目录中发布,默认的发布目录为主发布目录,其他的目录为虚拟发布目录。例如网页上不同页面之间的转变就是使用的虚拟发布目录,而不是使用多台服务器。

 

(1)第一步:

"mkdir   /var/www/xin.com/news/html   /var/www/xin.com/music/html   -p"。建立两个虚拟的发布目

录"/var/www/xin.com/news/html"和"/var/www/xin.com/music/html"。

 

(2)第二步:

"vim /var/www/xin.com/news/html/index.html"。编辑"news.xin.com"的发布页,内容如下图所示。

 

(3)第三步:

"vim /var/www/xin.com/music/html/index.html"。编辑"music.xin.com"的发布页,内容如下图所示。

 

(4)第四步:

"cd /etc/httpd/conf.d"。进入/etc.httpd/conf.d这个目录。

 

(5)第五步:

"vim  default.conf"。编辑默认发布页的文件,编辑以下内容,如下图所示:

表示除了下面写的news.xin.com和music.xin.com,都解析为默认 (即该配置文件的作用是令没有指定域名的访问默认跳转到/var/www/html发布目录下)          

  • 第一行表示虚拟主机开启的端口
  • 第二行表示虚拟主机的发布目录
  • 第三行表示虚拟主机的日志,此处为相对路径,绝对路径为"/etc/httpd/logs/default.log",combined表示日志的类型是混合日志类型

 

(6)第六步:

"vim news.conf"。编辑"news.xin.com"的文件。编辑以下内容,如下图所示:

因为/var/www/xin.com/news/html目录是在/var/www目录下,所以此时,也可以不写六,七,八行。同修改httpd服务的默认发布目录一样,如果建立的目录不是在/var/www或者/var/www/html目录里,是需要写六,七,八行的。

  • 第一行表示虚拟主机开启的端口
  • 第二行表示指定站点名称
  • 第三行表示虚拟主机的发布目录
  • 第四行表示虚拟主机的日志,此处为相对路径,绝对路径为"/etc/httpd/logs/default.log",combined表示日志的类型是混合日志类型
  • 第六行表示对虚拟主机发布目录授权
  • 第七行表示任何人都可以访问该目录

 

(7)第七步:

"vim music.conf"。编辑"music.xin.com"的文件。内容与"news.conf"相同,将其中的"news"替换为"music"。

重启服务后虚拟发布页就配置完成了。

因为/var/www/xin.com/news/html目录是在/var/www目录下,所以此时,也可以不写六,七,八行。同修改httpd服务的默认发布目录一样,如果建立的目录不是在/var/www或者/var/www/html目录里,是需要写六,七,八行的。

 

(8)第八步:

在测试主机上添加解析,并进行测试

浏览器非指定域名的访问默认会跳转到Apache的默认发布目录下

指定域名会跳转到指定发布目录下,访问该目录的默认发布文件

 


这里需要注意的是:

(1)建立的虚拟发布目可以建在/var/www目录下或者/var/www/html目录下(此时不需要修改安全上下文),但是如果不是在该目录下,可能需要修改安全上下文。

(2)在该目录中编辑的文件必须是index.html(默认发布页,除非修改/etc/httpd/conf/httpd.conf文件)

(3)default.conf,news.conf,music.conf文件中填写的端口必须为80((认侦听端口,除非修改/etc/httpd/conf/httpd.conf文件,将端口由 80 修改为 8080),此时测试时,后面必须加":8080"

(4)域名可以任意给定


 

总结:

  • 对于Apache虚拟主机的建立,有三种情况(同修改httpd服务的默认发布目录)

  1. 将其中的Apache的虚拟主机,对应的目录建立在/var/www/html目录下,此时只需要在对应的虚拟主机的配置文件中,将DocumentRoot后面的目录写成这个目录即可;
  2. 将其中的Apache的虚拟主机,对应的目录建立在/var/www目录下,此时只需要在对应的虚拟主机的配置文件中,将DocumentRoot后面的目录写成这个目录即可;
  3. 将其中的Apache的虚拟主机,对应的目录不是建立在/var/www/html目录下,也不是/var/www目录下。此时需要做三件事:

(1)在对应的虚拟主机的配置文件中,将DocumentRoot后面的目录写成这个目录即可;

(2)在对应的虚拟主机的配置文件中,对该目录授权(Require  all  granted等等);

(3)修改该目录的安全上下文。

 

六、Apache 内部的访问控制

 

1、基于ip的访问控制

 

(1)如果配置了apache的虚拟主机(这里以default.conf 为例,news.conf,music.conf文件的访问控制同理):

可以在/etc/httpd/conf.d目录下的文件default.conf中进行编辑。编辑内容如下,重启服务后生效。

编辑的内容有下面两种形式:

当然也可以在主配置文件"/etc/httpd/conf/httpd.conf"文件中指定这些信息,编辑内容如下:

 

【1】、编辑内容(1)

 

<1>、第一步:

编辑文件/etc/httpd/conf.d/default.conf

"Order Allow,Deny"表示开启允许或者禁止访问功能,且哪个在前哪个先生效,此处"Allow"先生效。"Allow from all"表示允许所有用户访问。"Deny from 172.25.254.1"表示禁止IP为"172.25.254.1"的用户访问。根据上述前后顺序,则IP 为"172.25.254.1"的用户不可以访问。news.conf,music.conf文件的访问控制同理。

 

<2>、第二步:

在172.25.254.1的主机上测试

 

【2】、编辑内容(2)

 

<1>、第一步:

编辑文件/etc/httpd/conf.d/default.conf

"Order Deny,Allow",此处"Deny"先生效。"Deny   from  all"表示禁止所有用户访问。"Allow  from  172.25.254.1"表示允许IP为"172.25.254.1"的用户访问。根据上述前后顺序,则只有IP 为"172.25.254.1"的用户可以访问。

 

<2>、第二步:

在IP不是172.25.254.1的主机上测试

 

(2)如果配置了apache的虚拟主机:

通过编辑配置文件"etc/httpd/conf/httpd.conf",可以设置禁止或允许一些用户访问。在120行-124行编辑,编辑内容同上。

 

2、基于用户的访问控制

 

基于用户的访问控制包含认证和授权两个过程,认证是识别用户身份的过程,授权是指定特定用户访问特定目录区域的过程。下面以基本认证为例,添加用户授权限制。

 

(1)指定单个用户进行访问

 

【1】、指定用户认证信息

 

<1>添加用户(该用户可以不是系统中真实存在的用户),并设置登陆密码(http_userlist名字可以任意给定)

"htpasswd   -cm   http_userlist   xin"。添加用户xin,并为xin这个用户设置登陆密码

"htpasswd   -m    http_userlist    chen"。添加用户chen,并为chen这个用户设置登陆密码(注意,第二次添加时,不能加c,否则会把,之前添加的用户的信息覆盖掉)

"cat  http_userlist"。查看用户及密码信息

注意:htpasswd命令的参数:

  1. -c:创建一个加密文件;
  2. -m:默认采用MD5算法对密码进行加密;
  3. -n:不更新加密文件,只将加密后的用户密码显示在屏幕上;
  4. -d:采用CRYPT算法对密码进行加密
  5. -p:不对密码进行加密,即明文密码
  6. -s:采用SHA算法对密码进行加密
  7. -b:在命令行一并输入用户名和密码而不是根据提示输入密码
  8. -D:删除指定用户;

 

【2】、修改配置文件,使其能在特定的目录区域中添加授权配置,以启用基本认证

 

<1>

如果配置了Apache的虚拟主机

在"/etc/httpd/conf.d"目录下的"default.conf"文件中指定用户名和密码信息,编辑内容如下

  • "AuthUserFile  /etc/httpd/conf.d/http_userlist",指定用户名和密码信息存放的文件,这里的文件是http_userlist的绝对路(当然,这个文件所处的路径也可以不是"/etc/httpd/conf.d/http_userlist",在哪里执行的命令"htpasswd   -cm   http_userlist   xin",那么处的路径就在哪里;但是如果文件所处的路径不是在/etc/httpd/conf.d目录中,需要修改安全上下文。)

  • "AuthName  "Please  input  username  and  passwd",网页提示语。
  • "AuthType  basic",基本认证(认证类型)。
  • "Require  user  xin",只允许用户xin可以访问。
  • "Require  valid-user",允许认证文件中的所有用户可以访问。

也可以在主配置文件"/etc/httpd/conf/httpd.conf"文件中指定用户名和密码信息,编辑内容如下

news.conf,music.conf文件的访问控制同理。(此时需要注意的是:必须把第7行注释,因为第七行表示任何人都可以访问该目录)

不管这个目录/var/www/xin.com/news.html目录是否建立在/var/www目录或者/var/www/html目录里,都必须注释"Require  all   granted"这句。

如果没有配置apache的虚拟主机

在"/etc/httpd/conf/httpd.conf"文件中指定用户名和密码信息,编辑内容如下

 

【3】、上面的配置完成之后,重启服务生效。并进行测试。

 

<1>地址栏输入——IP 地址(172.25.254.1)

验证:如果访问时出现了下面输入用户名和密码的界面,说明设置生效

填入用户名(xin)和密码之后,访问到刚刚写入的内容并且地址栏前面有钥匙的样式

第二次输入时,不需要密码,地址栏也没有钥匙的样式(这是因为网页有缓存)

 

<2>地址栏输入——www.xin.com

 

<3>地址栏输入——news.xin.com

 

<4>地址栏输入——music.xin.com

 

(2)指定文件的所有用户进行访问

同单个用户的设置步骤相同,只是将其中的"Require  user   xin"改为"Require  valid-user"即可。

此时http_userlist中的所有用户(xin,chen)都可以访问

 

总结:

  • 基于用户的访问控制有两种情况:
  1. 基于IP的访问控制。此时有两种情况:(1)只允许某个IP访问;(2)只是不允许某个IP访问。
  2. 基于用户的访问控制。此时有两种情况:

(1)指定某个用户可以访问;此时又有三种情况:

<1>生成的存放用户名和密码的文件在/etc/httpd目录中。此时只需要指定文件的路径即可

<2>生成的存放用户名和密码的文件在/etc/httpd/conf.d目录中。此时只需要指定文件的路径即可

<3>生成的存放用户名和密码的文件既不再/etc/httpd目录里,也不在/etc/httpd/conf.d目录里。此时不仅仅要指定文件的路径,还要修改此文件的安全上下文。

(2)指定某个文件中的所有用户可以访问。

 

七、Apache支持的语言

 

 

1、html语言(一般以".html"结尾),Apache默认支持该语言。

 

2、php语言(一般以".php结尾")

 

(1)安装php

 

(2)编辑/var/www/html/index.php文件

 

(3)重启服务,并在浏览器输入IP/index.php进行测试

 

3、cgi语言(通用网管接口,处理表单,比如说注册时的表单)(一般以".cgi"结尾),其实是一种perl语言,Apache也是默认支持此语言的。

 

(1)在默认发布目录(/var/www/cgi-bin)下:

 

【1】、"vim  index.cgi",编写index.cgi脚本文件(该脚本文件的来源:Apache的帮助手册),该文件的名字任意给定。

 

【2】"chmod  +x  index.cgi",给该脚本文件添加可执行的权限

 

【3】重启服务,输入IP/cgi-bin/index.cgi进行测试

 

(2)在非默认发布目录下:

 

【1】、"mkdir  /var/www/html/cgi  -p",建立/var/www/html/cgi目录

 

【2】、在"/var/www/html/cgi"目录里

"vim  index.cgi",编辑cgi的脚本文件

 

【3】、"chmod  +x  index.cgi",给脚本文件增加可执行的权限

 

【4】、

"semanage  fcontext  -a  -t   httpd_sys_script_exec_t    /var/www/html/cgi(/.*)?",修改/var/www/html/cgi目录本身,及其内部内容的安全上下文

 

此时重启服务进行测试,发现,显示出来的不是该脚本文件运行出来的结果,而是该脚本文件本身,这是因为,网页不认识这些脚本文件,所以需要添加下面的内容

如果此时,不进行下面的操作,会出现下面的界面

 

【5】、

 

<1>第一种情况:如果配置了Apache的虚拟主机

 

在"/etc/httpd/conf.d"目录下的default.conf文件的14-17行中,编辑下面的内容

其中该内容的来源为Apache的帮助手册

也可以在主配置文件"/etc/httpd/conf/httpd.conf"文件中进行编辑,在120-123行进行编辑,编辑内容如下

 

<2>第二种情况:如果没有配置Apache的虚拟主机

可以在主配置文件"/etc/httpd/conf/httpd.conf"文件中进行编辑

 

【6】、重启服务,并在浏览器输入IP/cgi/index.cgi进行测试

 

注意:

(1)该目录必须在/var/www/html目录中建立,因为Apache的默认发布目录是/var/www/html(除非修改 Apache 的默认发布目录)

 

4、python语言(python脚本语言需要网络服务器网关接口即WSGI)

(此处相当于,建立Apache的虚拟主机,但是又不同于普通的虚拟主机)

 

(1)"yum   install   mod_wsgi"。安装支持wsgi的软件

 

(2)"vim  /var/www/cgi-bin/webapp.wsgi"。编辑脚本文件(webapp.wsgi这个名字你可以任意给定)

 

(3)"chmod   +x   /webapp.wsgi"。给该脚本文件增加可执行的权限,因为该目录不是python语言的默认发布目录,所以要进行下一步的配置

 

(4)在"/etc/httpd/conf.d"目录下编辑"webapp.conf"文件

 

(5)重启服务,在客户主机上编写本地解析文件,在浏览器,输入webapp.xin.com进行测试,(注意:此时输入IP/cgi-

bin/webapp.wsgi仍然显示不出来)

 

注意:

该文件的建立可以在/var/www/cgi-bin目录下,也可以不在/var/www/cgi-bin目录下。如果不在/var/www/cgi-bin目录下,则需要修改安全上下文。

 

 

总结:

Apache支持的语言有四种:

  • 1、html语言,默认支持
  • 2、cgi语言,默认支持。此时有两种情况:
  1. cgi语言文件在其默认发布目录(/var/www/cgi-bin),此时只需做两件事。(1)编辑cgi语言的文件;(2)给该文件赋予可执行的权限(+x的权限)。
  2. cgi语言文件不在其默认发布目录(/var/www/cgi-bin),但是此目录必须在Apache的默认发布目录,或者在Apache的默认发布目录中再新建一个目录。此时要做四件事。(1)编辑cgi语言的文件;(2)给该文件赋予可执行的权限(+x的权限);(3)修改该文件的安全上下文;(4)在httpd服务的主发布目录或者在虚拟主机的主发布目录里添加,相应2行的代码,使得其能识别cgi语言。
  • 3.php语言。此时需要做两件事。(1)安装php软件;(2)在Apache的默认发布目录中,编辑php语言的文件。或者在默认发布目录中新建一个目录,再在此目录中,编辑php语言的文件。
  • 4.python语言。此时有两种情况。
  1. wsgi文件在/var/www/cgi-bin目录里,或者在/var/www/cgi-bin目录里再新建一个目录。此时需要做五件事。(1)安装wsgi的软件;(2)新建一个Apache的虚拟主机;(3)在虚拟主机定义的目录中编写python语言的文件;(4)给该文件赋予可执行的权限(+x的权限);(5)在虚拟主机的对应文件中,添加相应的1行代码,使得其能时别python语言。
  2. wsgi文件不在/var/www/cgi-bin目录里,也不在在/var/www/cgi-bin目录里再新建一个目录。此时需要做六件事。(1)安装wsgi的软件;(2)新建一个Apache的虚拟主机;(3)在虚拟主机定义的目录中编写python语言的文件;(4)修改该python语言文件的安全上下文;(5)给该文件赋予可执行的权限(+x的权限);(6)在虚拟主机的对应文件中,添加相应的1行代码,使得其能识别python语言。

 

八、apache的加密访问(https证书验证)

https(全称:Hyper  Text  Transfer  Protocol  over  Secure  Socket   Layer或者Hypertext  Transfer  Protocol  Secure,超文本传输安全协议),是以安全为目标的http通道,简单来说https是http的安全版。即在http下加入ssl层,因此加密的详细内容就需要ssl。常用于密码登陆等页面,实现客户端和服务端之间的数据的加密传输。https的配置步骤如下所示:

 

1、安装软件

 

(1)"yum   install   mod_ssl.x86_64   -y"。下载加密模块ssl,在目录"/etc/httpd/conf.d"下生成ssl.conf文件。

 

(2)"yum   install   crypto-utils.x86_64 -y"。安装认证证书和key的生成软件。

 

(3)设置防火墙策略允许https(前面的实验,已经做过这一步),https的默认端口为443(通过/etc/httpd/conf.d/ssl.conf查看)

  • http:80端口
  • https:443端口

 

2、配置key和证书

 

(1)"genkey www.xin.com"。为"www.xin.com"生成证书和key。其生成为图形界面,步骤如下图所示。

  1. www.xin.com这个域名是任意的域名,可以不存在

 进入界面,提示证书和key的存放位置,点击Next。

进入选择加密长度界面。选定后点击Next。

进入文件检查界面。

 完成后进入key生成界面,需要在另外一个shell上随便输入一些东西。

完成后进入如下界面,点击no,因为yes是需要钱的,是官方认证,如果是企业需要,则点击yes。

完成后进入如下界面,直接点击next。

完成后进入如下界面,输入认证证书的信息。完成后点击next。

完成上述步骤后,如下显示两条重要信息

/etc/pki/tls/certs/www.xin.com.crt      表示生成的安全证书

/etc.pki/tls/private/www.xin.com.kry    表示生成的钥匙

 

3、编辑配置文件

 

(1)

"vim /etc/httpd/conf.d/ssl.conf"。编辑配置文件,配置内容如下,输入生成的证书和key所在的文件位置。如图第100行和第107行所示:                    

 

4、测试并查看证书

 

(1)

加密页的配置已经完成,重启服务后生效。在浏览器中输入"https://172.25.254.1"需要通过认证才可以看见。

查看该认证证书,和之前设置证书时输入的一样。

点击Advanced——Add Exception

点击Confirm  Security  Exception,查看网页信息

验证:如果访问到刚刚写入的内容并且有加密协议(地址栏前面有锁的样式),说明设置生效

点击View可以查看证书信息

第二次输入时,不需要再次验证,直接看到界面

点击锁的样式,查看证书信息

查看该认证证书,和之前设置证书时输入的一样。

 

注意:

  1. 此加密只是针对主发布目录的内容进行加密,别的虚拟主机的发布目录的内容并没有实现加密。

  2. 只要解析了的域名,输入https://域名,通过认证之后,看到的都是主发布目录中的内容。

  3. 不管httpd服务的默认侦听端口是否已经更改,对于https来说,跳转时对应的端口仍然是80端口。

 

九、设定https虚拟主机并设定网页重写

 

上述配置完成后在访问网页时需要输入"https",显然这是不合理的,需要在访问域名时直接跳转至https页面。还需要做如下配置:

  • 把所有的80端口的请求全部重定向由https来处理。强制转换http://——>https://
  • http的默认端口是80,https的默认端口是443(查看/etc/httpd/conf.d/ssl.conf文件即可查看)
  • 301表示永久重定向,302表示临时重定向

 

1、完成八的操作

 

2、新建Apache虚拟主机(不同于普通的Apache的虚拟主机)

 

(1)

"mkdir  /var/www/xin.com/login/html    -p"。建立一个虚拟发布目录。

 

(2)

"vim   /var/www/xin.com/login/html/index.html"。配置虚拟发布页,内容如下图所示:

 

(3)

"vim   /etc/httpd/conf.d/login.conf"。配置虚拟发布页的文件。内容如下,如图所示:

  • 其中第2行,第6行和第7行摘自(/etc/httpd/conf.d/ssl.conf文件)
  • 第14,15行摘自apache的帮助手册

  • 其中"*:443"表示将端口改为443。
  • "SSLEngine on"表示加密开启,在后面输入证书和key的位置。
  • "RewriteEngine on"表示,重写功能开启。
  • "RewriteRule   ^(/.*)$   https://%{HTTP_HOST}$1   [redirect=301]"表示重写规则,
  1. "^(/.*)$"是客户端上输入的字符,
  2. https://表示强制客户加密访问
  3. "%{HTTP_HOST}"表示客户请求主机,
  4. "$1"表示在这里代表"^(/.*)$",
  5. "redirect=301",表示重定向等级是永久重定向,如果是302表示临时重定向。

 

3、测试

 

(1)重启服务生效后,测试时,在客户主机的"/etc/hosts"本地解析文件中加入"login.xin.com",在浏览器中输入"login.xin.com"测试,此时自动跳转到https://login.xin.com。

根据下图可以看出,网页自动跳转至"https://login.xin.com",获取认证证书后即可看到页面内容。

 

注意:

  1. 也可以对别的域名实现自动调转,方法同上。

  2. https的自动跳转,只针对httpd服务的默认侦听端口是80端口的情况。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐