1. 基础知识
Apache HTTP Server(简称Apache)是Apache基金会的一个开放源码的网页服务器,可以在大多数电脑操作系统中运行,由于其跨平台和安全性 被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等编译到服务器中。
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
nginx 相对 apache 的优点:
- 轻量级,同样起web 服务,比apache 占用更少的内存及资源
- 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
- 高度模块化的设计,编写模块相对简单
- 社区活跃,各种高性能模块出品迅速
2. 配置
2.1基本知识
ServerRoot "/etc/httpd" 用于指定Apache的运行目录
Listen 80 监听端口
User apache 运行apache程序的用户和组
Group apache
ServerAdmin root@localhost 管理员邮箱
DocumentRoot "/var/www/html" 网页文件的存放目录
<Directory "/var/www/html"> <Directory>语句块自定义目录权限
Require all granted
</Directory>
ErrorLog "logs/error_log" 错误日志存放位置
AddDefaultCharset UTF-8 默认支持的语言
IncludeOptional conf.d/*.conf 加载其它配置文件
DirectoryIndex index.html 默认主页名称
#####安装Apache
yum install httpd.x86_64 -y
2.2基本配置
2.2.1修改默认发布文件
[root@mariadb mysqladmin]# cd /etc/httpd/conf/
[root@mariadb conf]# vim httpd.conf
[root@mariadb conf]# systemctl restart httpd
2.2.2测试:
2.3 修改默认发布目录
2.3.1 selinux开启时Permissive
[root@mariadb conf]# mkdir /redhat/www/test/ -p
[root@mariadb conf]# mv /var/www/html/westos.html /redhat/www/test/
[root@mariadb conf]# vim httpd.conf
Require all granted ####给文件进行授权
[root@mariadb conf]# systemctl restart httpd
###测试
2.3.2selinux开启时enforing
semanage fcontext -a -t httpd_sys_content_t '/redhat(/.*)?' ####改变安全上下文
restorecon -RvvF /redhat ####刷新
####测试
2.4 访问控制
2.4.1设定IP访问
###配置 vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
#DocumentRoot "/westos/www/test"
<Directory "/var/www/html/admin"> ####只允许21主机访问admin目录
Order Deny,Allow
Allow from 172.25.254.21
Deny from All
</Directory>
[root@mariadb conf]# systemctl restart httpd
####测试
<Directory "/var/www/html/admin"> ####允许所有主机访问admin目录但拒绝21主机访问
Order Allow,Deny
Allow from All
Deny from 172.25.254.21
</Directory>
[root@mariadb conf]# systemctl restart httpd
###测试
2.4.2设定用户的访问
Apache无格式文件用户身份验证在此配置中,用户账户和密码存储在本地.htpasswd文件中。处于安全原因,该文件不能
保存在网站的DocumentRoot中,而应保存在Web服务器不提供服务的一些目录中。特殊的htpasswd命令在.htpasswd文件中管理用户。
####生成文件
htpasswd -cm /etc/httpd/accessuser admin 生成用户admin 并为之生成密码
htpasswd -m /etc/httpd/accessuser tom 生成用户tom 并为之生成密码
#####在主配置文件里添加vim httpd.conf
<Directory "/var/www/html/admin">
AuthUserFile /etc/httpd/accessuser #####用户的认证文件
Authname "please name password" #####用户认证提示信息
AuthType basic #####认证类型
Require valid-user
[Require user admin] #####认证用户
</Directory>
#####测试
2.5语言支持
2.5.1html语言默认支持
2.5.2 Php语言
####安装php yum install php -y
#####在/var/www/html目录下创建文件 vim index.php
<?php
phpinfo();
?>
#####重启服务systemctl restart httpd
####测试
2.5.3cgi语言
2.5.3.1
定义:CGI(CommonGateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
功能: 绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。
2.5.3.2配置
#####写cgi脚本
vim index.cgi
#!/usr/bin/perl
print "Content-type:test/html\n\n";
print `date`;
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/cgi"> #####授权
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
chmod +x index.cgi
systemctl restart httpd
####测试
2.6 Apache虚拟主机
2.6.1.定义
虚拟主机允许您从一个httpd服务器同时为多个网站提供服务。在本节中,我们将了解基于名称的虚拟主机其中多个主机名都指向同一个IP地址,但是Web服务器根据用于到达站点的主机名提供具有不同内容的不同网站。
2.6.2.建立测试页
[root@mariadb conf.d]# cd /var/www
[root@mariadb www]# mkdir virtual/news.westos.com -p
[root@mariadb www]# mkdir virtual/money.westos.com -p
[root@mariadb www]# mkdir virtual/news.westos.com/html -p
[root@mariadb www]# mkdir virtual/money.westos.com/html -p
[root@mariadb www]# echo "money.westos.com'page"> virtual/money.westos.com/html/index.html
[root@mariadb www]# echo "news.westos.com'page"> virtual/news.westos.com/html/index.html
2.6.3.配置文件
在子配置文件中
[root@mariadb cgi]# cd /etc/httpd/conf.d/
[root@mariadb conf.d]# vim default.conf ####为指定域名的默认访问都访问default
[root@mariadb conf.d]# cat default.conf
<Virtualhost _default_:80> #####虚拟主机开放的端口
DocumentRoot "/var/www/html" #####虚拟主机默认的发布目录
CustomLog "logs/default.log" combined #####虚拟主机日志
</Virtualhost>
[root@mariadb conf.d]# vim news.conf #####指定域名为news.westos.com的访问到默认发布目录
[root@mariadb conf.d]# cat news.conf
<Virtualhost *:80>
ServerName "news.westos.com" #####指定服务器名称。在使用基于名称的虚拟主机的情况下,此处的名称必须与客户端请求完全的匹配
DocumentRoot "/var/www/virtual/news.westos.com/html"
CustomLog "logs/news.log" combined
</Virtualhost>
<Directory "/var/www/virtual/news.westos.com/html"> #######默认发布目录授权
Require all granted
</Directory>
[root@mariadb conf.d]# cp news.conf money.conf
[root@mariadb conf.d]# vim money.conf
[root@mariadb conf.d]# cat money.conf
<Virtualhost *:80>
ServerName "money.westos.com"
DocumentRoot "/var/www/virtual/money.westos.com/html"
CustomLog "logs/money.log" combined
</Virtualhost>
<Directory "/var/www/virtual/money.westos.com/html">
Require all granted
</Directory>
[root@mariadb conf.d]# systemctl restart httpd
2.6.4.测试
在测试浏览器所在主机
[root@foundation21 Desktop]# vim /etc/hosts
[root@foundation21 Desktop]# cat /etc/hosts
172.25.254.121 www.westos.com news.westos.com money.westos.com
2.7 自定义自签名证书
1.1定义
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
SSL协议位于TCP/IP协议与各种应用层协议之间,是一种国际标准的加密及身份认证通信协议,为TCP提供一个可靠的端到端的安全服务,为两个通讯个体之间提供保密性和完整性(身份鉴别)。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
1.2HTTPS和HTTP的区别
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
2.7.2.配置
[root@mariadb mysqladmin]# yum install mod_ssl -y
[root@mariadb mysqladmin]# yum install crypto-utils -y
[root@mariadb mysqladmin]# genkey www.westos.com
[root@mariadb mysqladmin]# cd /etc/httpd/conf.d/
[root@mariadb conf.d]# cp money.conf login.conf
[root@mariadb conf.d]# vim login.conf
[root@mariadb conf.d]# cat login.conf
SSLEngine on ###开始https功能
SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt ###证书所在位置
SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key ###秘钥所在位置
<Virtualhost *:80> ####网页重写实现访问https
ServerName "login.westos.com"
RewriteEngine on
rewriterule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</Virtualhost>
############### ^(/.*)$ 客户主机所在地址中写入的所有字符
############### https:// 定向成为的客户访问
############### %{HTTP_HOST} 客户端请求主机
############### $1 表示^(/.*)$
############### [redirect=301] 临时定向 302 永久定向
[root@mariadb conf.d]# mkdir /var/www/virtual/login.westos.com/html -p
[root@mariadb conf.d]# vim /var/www/virtual/login.westos.com/html/index.html
[root@mariadb conf.d]# systemctl restart httpd
3.测试
在客户端主机添加解析vim /etc/resolv.conf
####第一次登陆需要证书,下载证书后会跳转
######第二次登陆时不需要证书