环境: 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/htmlapache的/目录,默认发布目录/var/www/html/index.htmlapache的默认发布文件(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程序开启默认用户apacheapache日志/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的解析
测试:在浏览器中输入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