环境: reset–ip,route,yum源
1.安装部署
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的默认发布文件 |
(1)编辑默认发布文件:vim /var/www/html/index.html
(2)在浏览器中测试: http://172.25.60.1
2.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)修改默认端口:
netstat -antlupe | grep httpd //httpd使用的端口
semanage port -l | grep http //http默认允许使用的端口
修改为允许的:
vim /etc/httpd/conf/httpd.conf
43 Listen 8080 ##修改默认端口为8080
systemctl restart httpd
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
测试:http://172.25.60.1:8080 //加上端口号,不然浏览器默认访问80端口
修改为不允许的:
netstat -antlupe | grep 6666 //查看6666没有被占用
vim /etc/httpd/conf/httpd.conf
43 Listen 6666 ##修改默认端口为6666
systemctl restart httpd //重启失败
修改selinux:setenforce 0 :Enforcing-->Permissive
systemctl restart httpd //重启成功
测试:http://172.25.254.120:6666 //访问不到
semanage port -a -t http_port_t -p tcp 6666
修改selinux:setenforce 1 :Permissive-->Enforcing
systemctl restart httpd
测试:http://172.25.254.120:6666 //再次访问就可以了
(2)修改默认发布文件:
默认发布文件就是访问apache时没有指定文件名称时默认访问的文件。
vim /etc/httpd/conf/httpd.conf
164 DirectoryIndex index.html test.html //当index.html不存在时访问test.html
- 注:/etc/httpd/conf/httpd.conf文件可以指定多个默认发布文件,当有多个时,按顺序访问(前面的不存在时,访问后面的)
当有两个默认发布文件时,默认访问配置文件中写的第一个:
访问:172.25.60.1–出现的内容为配置文件中指定的第一个文件中的内容
当删除掉配置文件中的第一个,访问时第一个不存在,就回去寻找默认的第二个:
访问:172.25.60.1–出现的内容为配置文件中指定的第二个文件中的内容
(3)修改默认发布目录;
第一步: 创建发布目录,编辑发布文件
mkdir /westos/html -p
vim /westos/html/test.html
第二步: 编辑主配置文件,修改默认发布目录
vim /etc//httpd/conf/httpd.conf
120 DocumentRoot "/westos/html" //不能访问,没权限(selinux=0时也不能访问,说明与其无关)
systemctl restart http
直接访问时无法访问,修改selinux=0时也不能访问,说明与selinux无关
第三步: 既然与selinux无关,那么可能就是权限问题。修改主配置文件,给默认发布目录权限
vim /etc//httpd/conf/httpd.conf
121 <Directory "/westos/html"> //给权限
122 Require all granted
123 </Directory>
systemctl restart http
虽然可以访问了,但将selinux=1时,就又出现不能访问的情况,说明此时与安全上下文有关
第四步: 修改安全上下文
semanage fcontext -a -t httpd_sys_content_t '/westos/html(/.*)?' //修改安全上下文
restorecon -RvvF /westos/html/ //刷新
再次测试时,就可以正常访问了
3.apache的虚拟主机
指的是在一台主机上运行多个网站,下面我们以这三个网站为例:www.westos.com ;news.westos.com ; music.westos.com
步骤一: 建立发布目录与编写发布文件
mkdir /var/www/vhost/news -p
mkdir /var/www/vhost/music -p
vim /var/www/vhost/music/index.html --music
vim /var/www/vhost/news/index.html --news
//index.html可以自定义为*.html,但需要在主配置文件中加上此文件为默认发布文件
//或者访问时加上文件名即可
步骤二: 编辑子配置文件
vim /etc/httpd/conf.d/vhost.conf //在子配置目录中编辑子配置文件vhost.conf
//文件名必须以.conf结尾,结尾方式在主配置文件中定义了
代码段:
<virtualHost _default_:80>
DocumentRoot /var/www/html
CustomLog logs/default.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName news.westos.com
DocumentRoot /var/www/vhost/news
CustomLog logs/news.log combined
</VirtualHost>
<Directory "/var/www/vhost/news">
Require all granted
</Directory>
<VirtualHost *:80>
ServerName music.westos.com
DocumentRoot /var/www/vhost/music
CustomLog logs/music.log combined
</VirtualHost>
<Directory "/var/www/vhost/music">
Require all granted
</Directory>
步骤三: 在真机中编辑本地解析,用真机测试
编辑本地解析:
打开浏览器测试:三个站点搭建成功
4.apache访问控制
(1)基于ip
白名单:
vim /etc/httpd/conf.d/vhost.conf //编辑子配置文件
<virtualHost _default_:80>
DocumentRoot /var/www/html
CustomLog logs/default.log combined
</VirtualHost>
<Directory "/var/www/html"> //访问规则
Order Deny,Allow //先读取Deny再读取Allow
Allow from 172.25.60.250 //允许172.25.60.250(真机ip)访问
Deny from All //不允许所有人访问
</Directory> //先不让所有人访问,再可以让172.25.60.250访问---白名单
systemctl restart httpd
在虚拟机中配置好域名解析
测试:真机为白名单用户,可以访问;虚拟机不在白名单中,不可以访问。
黑名单:
vim /etc/httpd/conf.d/vhost.conf //编辑子配置文件
<Directory "/var/www/html"> //访问规则
Order Allow,Deny //先读取Allow再读取Deny
Allow from All //允许所有人访问
Deny from 172.25.60.250 //不允许172.25.60.250访问
</Directory> //先允许所有人,再不允许172.25.60.250访问---黑名单
systemctl restart httpd
测试:真机为黑名单用户,不可以访问;虚拟机不在黑名单中,可以访问。
(2)基于用户名和密码
第一步:在某个文件中创建用户名和密码
第二步:编辑子配置文件,并重启服务
vim /etc/httpd/conf.d/vhost.conf
<virtualHost _default_:80>
DocumentRoot /var/www/html
CustomLog logs/default.log combined
</VirtualHost>
<Directory "/var/www/html">
AuthUserFile /etc/httpd/.apache_auth //用户名密码文件
AuthType basic //文件中指定的才能访问
AuthName "Please input username add password" //提示语
#Require user admin //Require user指定可以访问的用户
Require valid-user //Require指定所有人都可以访问
</Directory>
systemctl restart httpd
指定用户可以登陆:Require user admin //指定只有admin用户可以登陆,当指定多个用户时,中间用空格分隔开
所有用户都可以登陆: Require valid-user
测试:在浏览器中输入www.westois.com,就会弹出输入用户名和密码的窗口
当指定admin用户可以登陆时,只有admin用户可以登陆,其他用户登陆就会被拒绝
当所有用户都可以登陆时,输入用户名和密码就可以登陆
- 做完实验恢复为原来的环境。
5.apache 支持的语言
(1)html: 前面用的就是改语言,就不举例了。
(2)php:
第一步:编辑发布文件
vim /var/www/html/index.php
<?php
phpinfo();
?>
第二步:下载php
yum install php -y
systemctl restart httpd //在/etc/httpd/conf.d中生成php.conf文件
测试:在浏览器中输入172.25.60.1/index.php,可以看到php的主页,说明文件中的内容已经执行
(3)cgi
第一步:创建发布目录,并更改安全上下文
mkdir -p /var/www/html/cgi
semanage fcontent -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'
restorecon -RvvF /var/www/html/cgi/
第二步:编辑发布文件脚本,赋予和执行权限,并在shell中测试能否执行
vim /var/www/html/cgi/index.cgi //编辑perl语言脚本--显示系统当前时间
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `date`;
chmod +x /var/www/html/cgi/index.cgi
/var/www/html/cgi/index.cgi #执行下脚本确保脚本运行正常
第三步:修改子配置文件,并重启服务
vim /etc/httpd/conf.d/vhost.conf
1 <virtualHost _default_:80>
2 DocumentRoot /var/www/html
3 CustomLog logs/default.log combined
4 </VirtualHost>
5 <Directory "/var/www/html/cgi"> //发布目录
6 Options +ExecCGI
7 AddHandler cgi-script .cgi
8 </Directory>
systemctl restart httpd
测试:在浏览器中输入172.25.60.1/cgi/index/cgi,执行脚本内容,说明实验成功
(4)wsgi
第一步:下载
yum install mod_wsgi -y
第二步:创建发布目录与发布文件
mkdir /www/cgi-bin
vim /var/www/cgi-bin/webapp.wsgi
第三步:编辑子配置文件
vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
ServerName wsgi.westos.com //建立一个新的
WSGIScriptAlias / /var/www/cgi-bin/webapp.wsgi
</VirtualHost>
systemctl restart httpd
第四步:在真机中编辑本地解析,加上wsgi.westos.com的解析
7.加密访问:https
(1)下载
yum install mod_ssl -y
yum install crypto-utils -y
(2)生成密钥:genkey apache_server.westos.com
输入命令就会弹出下图窗口,选择下一步
越长安全性越高,生成需要的时间越长;做实验钻选1024就可以了
生成密钥需要随机数,如果比较慢,就打开服务器,随机输入一些字母就好了
此处选择NO,选择YES时收费的
填写相关信息,下一步就可以了
此时密钥对就生成了,密钥对的位置也回给出
(3)在/etc/httpd/conf.d/ssl.conf 中将原来的密钥对用新生成的替换,并重启httpd服务
vim /etc/httpd/conf.d/ssl.conf
101 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
109 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
systemctl restart httpd
(4)在火墙中添加https
测试:在浏览器中输入https://172.25.60.1,刷新
出现如图所时情况,我们需要在浏览器中手动设置
设置成功后在返回就会看到i如图所示的样子,并且点击锁查看,也正是我们设定的
8设定https虚拟主机并设定网页重写
(1)建立发布目录,编写发布文件
(2)编辑子配置文件
^(/.*)$ | 客户在浏览器地址栏中输入的所有字符 |
---|---|
https:// | 强制客户加密访问 |
%{HTTP_HOST} | 客户请求主机 |
$1 | 表示 ^(/.*)$的值 |
[redirect=301] | 永久重写; 302为临时 |
1 <VirtualHost *:443> //建立一个443端口虚拟主机
2 ServerName login.westos.com
3 DocumentRoot /var/www/vhost/login //默认发布目录
4 CustomLog "logs/login.logs" combined
5 SSLEngine on //开启这个功能
6 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt //钥匙
7 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key //锁
8 </VirtualHost>
9 <Directory "/var/www/html/virtual/login.westos.com/html"> //授权
10 Require all granted
11 </Directory>
12 <VirtualHost *:80> //建立一个80端口的虚拟主机
13 ServerName login.westos.com
14 RewriteEngine On //将网页重写功能开启
15 RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] //redirect=301永久设定
16 </VirtualHost>
编辑完配置文件重启服务:systemctl restart httpd
(3)在测试端浏览器主机本地解析/etc/shots中添加解析
测试:在浏览器中输入login.westos.com