1.什么是apache?
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
2.apache的安装部署
yum install httpd -y ##apache软件
yum install httpd-manual ##apache的手册
systemctl start httpd
systemctl enable httpd
firewall-cmd --list-all ##列出火墙信息
firewall-cmd --permanent --add-service=http ##永久允许http
firewall-cmd --reload ##火墙从新加载策略
/var/www/html ##apache的/目录,默认发布目录
/var/www/html/index.html ##apache的默认发布文件
vim /var/www/html/index.html
<h1> hello world </h1>
:wq
测试:
3.apache的基础信息
#主配置目录: /etc/httpd/conf
#主配置文件: /etc/httpd/conf/httpd.conf
#子配置目录: /etc/httpd/conf.d/
#子配置文件: /etc/httpd/conf.d/*.conf
#默认发布目录: /var/www/html
#默认发布文件: index.html
#默认端口: 80
#默认安全上下文:httpd_sys_content_t
#程序开启默认用户: apache
#apache日志: /etc/httpd/logs/*
1.修改默认端口
修改前本机selinux=enforcing
vim /etc/httpd/conf/httpd.conf
43 Listen 8080 ##修改默认端口为8080
firewall-cmd --permanent --add-port=8080/tcp ##若出现killed则说明此添加端口已被使用过。
firewall-cmd --reload
若修改端口为666按照上面步骤则无法成功重启httpd(selinux=enforcing)
解决办法
2.修改默认发布文件
默认发布文件就是访问apache时没有指定文件名称时默认访问的文件
这个文件可以指定多个,有访问顺序
为了实验方便把端口该回默认端口80
vim /etc/httpd/conf/httpd.conf
164 DirectoryIndex index.html test.html ##当index.html不存在时访问test.html(这里实验删除index.html)
3.修改默认发布目录
vim /westos/html/index.html -p
vim /etc/httpd/conf/http.conf
120 DocumentRoot "/www/html" ##注释掉
DocumentRoot "/westos/html"
121 <Directory "/westos/html">
122 Require all granted 授权所有
123 </Directory>
测试:
此时selinux=enforcing需考虑/westos/html/文件下的安全上下文是否和/var/www/html/的安全上下文文相同
4.apache的虚拟主机
cd /etc/httpd/conf.d/
vim vhost.conf
cd
mkdir -p /var/www/vhost/news
mkdir -p /var/www/vhost/music
vim /var/www/vhost/news/index.html
vim /var/www/vhost/music/index.html
systemctl restart httpd
##注意:1.默认看的是目录下的index.html文件,如果你的文件叫其他名字.html在访问时需要在浏览器端指定。
2.系统中默认的日志由三种:access_log,default.log,error_log,下面的music.log和news.log是我们刚在vhost.conf文件中写入的,他们俩保存了当有客户端访问时的记录。
测试:
在客户端
vim /etc/hosts
172.25.254.116 www.westos.com news.westos.com music.westos.com
5.apache的内部访问控制
1.针对主机的访问控制(安全性差,只要改ip就行)
vim /etc/httpd/conf.d/vhost.conf
5 <Directory "/var/www/html">
6 Order allow deny ##列表读取顺序,后读取的列表会覆盖限度去内容的重复部分
7 Allow from all
8 Deny from 172.25.254.216
9 </Directory>
测试:
在ip为172.25.254.16的客户机
在ip为172.25.254.216的客户机
2.用户方式的访问控制(安全性较高)
htpasswd -cm /etc/httpd/.apache_auth admin
htpasswd -m /etc/httpd/.apache_auth szy
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
测试:
注意:如果有缓存就不用再次认证,此时我们需要清理缓存,ctrl+shift+delete清除缓存
vim /etc/httpd/conf.d/vhost.conf
10 <Directory "/var/www/html">
11 AuthUserFile /etc/httpd/.apache_auth
12 AuthName "Please input your name and password"
13 AuthType basic
14 #Require user admin
15 Require valid-user ##此时两个用户都可以访问
16 </Directory>
6.apache支持的语言
1.html
HTML:超文本标记语言(Hyper Text Markup Language),标准通用标记语言下的一个应用。HTML 不是一种编程语言,而是一种标记语言 (markup language),是网页制作所必备的“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
超文本标记语言的结构包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体
前面的实验都是html语言完成的。
前面的实验都是用html来编写的
2.php
定义:PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
实验:
vim /etc/httpd/conf/httpd.conf
vim /var/www/html/index.php
<?php
phpinfo();
?>
systemctl restart httpd
yum install php -y
systemctl restart httpd
测试:
3.perl(实验中用perll来编写cgi)
Perl: 最初的设计者为拉里·沃尔(Larry Wall),他于1987年12月18日发表。Perl借取了C、sed、awk、shell 脚本语言以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
Perl 被称为“实用报表提取语言”(Practical Extraction and Report Language)。它是术语,而不仅仅是简写,Perl的创造者,Larry Wall提出第一个,但很快又扩展到第二个。那就是为什么“Perl”没有所有字母都大写。没必要争论哪一个正确,Larry 两个都认可。
Perl对进程、文件和文字有很强的处理能力,操作灵巧方便,已经成为web上主要的脚本语言,绝大部分的CGI是用Perl写的。不但如此,Perl作为一种快捷的语言原形,在让不同的系统一起工作方面也有广泛的应用。许多系统管理员都在用Perl完成各种各样繁多的系统管理。有关快速原型设计、系统工具、软体工具、系统管理、资料库连结、图像程式设计、网路连结,和WWW程式设计等之类的任务,都特别 适合用 Perl来做。
什么是cgi?
CGI:CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。
可以根据manual里的步骤来完成实验
vim /var/www/html/cgi/index.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n"; ##转换成文本模式,text->html
print `date`;
chmod +x /var/www/html/cgi/index.cgi
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
查看手册
查看手册
测试:
发现无法访问,此时selinux=enforcing
解决办法:修改selinux未permissive或者修改/etc/www/html/cgi/文件夹以及旗下的文件的安全上下文
semanager fcontent -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'
restorecon -RvvF /var/www/html/cgi/
4.python我们使用的里面的wsgi
进入/var/www/cgi-bin目录,且在/var/www/cgi-bin下获得 webapp.wsgi文件
cd /var/www/cgi-bin/
yum install lftp -y
lftp 172.25.254.10
get webapp.wsgi ##下载一个写好的脚本(.wsgi)
安装mod_wsgi
yum search wsgi
yum install mod_wsgi.x86_64 -y
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
vim /etc/hosts ##添加本地解析
测试:
7.https
定义:HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
1.实现https对其加密
发现无法访问
为解决上面问题进行以下操作:
yum install mod_ssl -y ##安装ssl插件,使其可以访问https(如果不安装,在网址中输入https会出现报错
systemctl restart httpd
在防火墙策略里加入https
firewall-cmd --list-all
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
测试:然后在浏览器https:172.25.254.116让你添加证书(证书相当于加密key的标签),证书添加之后可以访问到.
但是这种证书不安全是别人的,所以我们需要自己去实现一个加密key,将原本的证书信息删除,因为浏览器会缓存。
或这或者crtl+shift+delete
进行key加密
安装加密key安装包
yum install crypto-utils -y 自主提供加密key,安装crypto-utils插件,使其可以出现设置加密key的图形
进行key加密
cd /etc/httpd/conf.d
genkey apache.westos.com 在子配置目录下生成加密文件
cd /etc/httpd/conf.d/
vim /etc/httpd/conf.d/ssl.conf 将锁和证书换成自己设定的
SSLCertificateFile /etc/pki/tls/certs/apache.westos.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/apache.westos.com.key
systemctl restart httpd
8.设定https虚拟主机并设定网页重写
在浏览器中输入一个网址回车后会自动在前面加https://
实验:
输入westos.com自动转成https://westos.com
cd /etc/httpd/conf.d
vim meng_https.conf 在里面写入
<VirtualHost *:443> https的默认端口是443
ServerName login.westos.com
DocumentRoot /var/www/meng/login
Customlog logs/login.log combined
SSLEngine on 开启加密认证
SSLCertificateFile /etc/pki/tls/certs/apache.westos.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/apache.westos.com.key
</VirtualHost>
<Directory "/var/www/meng/login">
Require all granted
</Directory>
<VirtualHost *:80> 将在80端口浏览器输入的字符前强制加入https
ServerName login.westos.com
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</VirtualHost>
mkdir -p /var/www/vhost/login
vim /var/www/vhost/login/index.html
systemctl restart httpd
测试:
vim /etc/hosts