Linux运维之Apache web服务
一、实验环境(rhel7.0版本)
主机环境:rhel7.0
各主机信息
主机名 | IP |
---|---|
server | 172.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 间数据传输的方式
- GET:就是浏览器直接向 Apache 服务器要求网址上面的资源,这也是最常见的。此外,使用 GET 的方式可以直接在网址列输入变量。举例来说,网址:http://phorum.vbird.org/viewtopic.php?t=96,发现“ ?t=96 ”了吗?t 就是变量,96 就是这个变量的内容。如果你将问号后面的数据拿掉时,看看,会出现什么后果?
- POST:这也是客户端向服务器端提出的要求,只是这个要求里面含有比较多的数据。举例来说,讨论区里面不是常常有留言的选项吗,如果你选择留言的话不是会在浏览器冒出一个框让你填入资料吗?当按下传送后,那个框框内的数据就会被浏览器包起来传送至 Apache 服务器。POST 与 GET 不相同,GET 可以在网址取得客户端所要求的变量,不过 POST 就不是使用网址的功能了。
- HEAD:服务器端响应给 Client 端的一些数据文件头而已。
- OPTIONS:服务器端响应给 Client 端的一些允许的功能与方法。
- 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下的某个目录。此时要做三件事:
- 修改DocumentRoot后面的目录;
- 在DocumentRoot这行下面添加,对该目录的授权(Require all granted等等);
- 修改该新建目录的安全上下文。
五、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服务的默认发布目录)
- 将其中的Apache的虚拟主机,对应的目录建立在/var/www/html目录下,此时只需要在对应的虚拟主机的配置文件中,将DocumentRoot后面的目录写成这个目录即可;
- 将其中的Apache的虚拟主机,对应的目录建立在/var/www目录下,此时只需要在对应的虚拟主机的配置文件中,将DocumentRoot后面的目录写成这个目录即可;
- 将其中的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命令的参数:
- -c:创建一个加密文件;
- -m:默认采用MD5算法对密码进行加密;
- -n:不更新加密文件,只将加密后的用户密码显示在屏幕上;
- -d:采用CRYPT算法对密码进行加密
- -p:不对密码进行加密,即明文密码
- -s:采用SHA算法对密码进行加密
- -b:在命令行一并输入用户名和密码而不是根据提示输入密码
- -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)都可以访问
总结:
- 基于用户的访问控制有两种情况:
- 基于IP的访问控制。此时有两种情况:(1)只允许某个IP访问;(2)只是不允许某个IP访问。
- 基于用户的访问控制。此时有两种情况:
(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语言,默认支持。此时有两种情况:
- cgi语言文件在其默认发布目录(/var/www/cgi-bin),此时只需做两件事。(1)编辑cgi语言的文件;(2)给该文件赋予可执行的权限(+x的权限)。
- 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语言。此时有两种情况。
- wsgi文件在/var/www/cgi-bin目录里,或者在/var/www/cgi-bin目录里再新建一个目录。此时需要做五件事。(1)安装wsgi的软件;(2)新建一个Apache的虚拟主机;(3)在虚拟主机定义的目录中编写python语言的文件;(4)给该文件赋予可执行的权限(+x的权限);(5)在虚拟主机的对应文件中,添加相应的1行代码,使得其能时别python语言。
- 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。其生成为图形界面,步骤如下图所示。
- 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可以查看证书信息
第二次输入时,不需要再次验证,直接看到界面
点击锁的样式,查看证书信息
查看该认证证书,和之前设置证书时输入的一样。
注意:
此加密只是针对主发布目录的内容进行加密,别的虚拟主机的发布目录的内容并没有实现加密。
只要解析了的域名,输入https://域名,通过认证之后,看到的都是主发布目录中的内容。
不管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]"表示重写规则,
- "^(/.*)$"是客户端上输入的字符,
- https://表示强制客户加密访问
- "%{HTTP_HOST}"表示客户请求主机,
- "$1"表示在这里代表"^(/.*)$",
- "redirect=301",表示重定向等级是永久重定向,如果是302表示临时重定向。
3、测试
(1)重启服务生效后,测试时,在客户主机的"/etc/hosts"本地解析文件中加入"login.xin.com",在浏览器中输入"login.xin.com"测试,此时自动跳转到https://login.xin.com。
根据下图可以看出,网页自动跳转至"https://login.xin.com",获取认证证书后即可看到页面内容。
注意:
也可以对别的域名实现自动调转,方法同上。
https的自动跳转,只针对httpd服务的默认侦听端口是80端口的情况。
更多推荐
所有评论(0)