什么是apache?
APACHE就是一个网络服务器,这个服务器侦听一个TCP端口,一般是80,对端口收到的命令进行解释,然后提交一些结果。Apache是专门用来提供HTTP服务的,以及相关配置的(例如虚拟主机等)。
apache与nginx的区别
apache 稳定;同步阻塞模式(前面的人有优先权等待的人,后面的人被阻塞)
nginx 高效;异步非阻塞模式(前面的人和后面的人可以同时访问)
apache基本配置
1、清理实验环境:
rpm -e httpd php php-mysql
rm -fr /var/www/
![这里写图片描述](https://img-blog.csdn.net/20180531175422456?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdrYW5h/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2、安装apache:
yum install httpd -y //安装
systemctl start httpd //开启http服务
systemctl stop firewalld //关闭防火墙
netstat -antlupe | grep httpd //查看httpd的端口
vim /var/www/html/index.html //默认发布文件编辑,其中,/var/www/html为默认发布目录
hello world //内容
文件index.html内容(其中<h1>是改变字体大小的):
浏览器测试:看到的内容就是/var/www/html/index.html的内容
修改端口后的查询方式
vim /etc/httpd/conf/httpd.conf //编辑配置文件
listen 8080; //将原来的80改为现在的8080;
systemctl restart httpd //重启服务
浏览器查询
(这里的端口已经不是默认的了,需要指定端口):
将端口恢复至80,不要影响后面的实验;
重新指定默认发布目录
[root@foundation174 html]# mkdir /westos/html -p //建立新的目录
[root@foundation174 html]# cd /westos/html/
[root@foundation174 html]# pwd //查询当前目录
/westos/html
[root@foundation174 html]# vim index.html //编辑文件内容
[root@foundation174 html]# vim /etc/httpd/conf/httpd.conf //编辑配置文件
在119行附近,重新修改目录:
121 DocumentRoot "/westos/html" //修改默认发布目录
122 <Directory "/westos">
123 require all granted
124 </Directory>
[root@foundation182 html]# systemctl restart httpd //重启服务
编辑配置文件的内容:
指定默认发布目录/westos/html后,编辑发布文件index.html:
浏览器查询:
重新指定默认发布文件
vim /etc/httpd/conf/httpd.conf //编辑配置文件
121 DocumentRoot "/westos/html"
122 <Directory "/westos/html/linux">
123 DirectoryIndex index.html
124 </Directory>
125 <Directory "/westos">
126 require all granted
127 DirectoryIndex index.html
128 </Directory>
systemctl restart httpd //重启服务
配置文件编写内容:
指定发布文件/westos/html/linux/index.html 内容:
浏览器查询:(linux目录里2个文件:index.html和test.html,因为指定的文件为index.html,所以不会显示test.html的内容)
基于ip的访问控制
[root@desktop ~]# systemctl start httpd //开启httpd服务
[root@desktop ~]# systemctl stop firewalld //关闭火墙
[root@desktop ~]# vim /etc/httpd/conf/httpd.conf //编辑配置文件,恢复默认发布目录;恢复默认发布目录为/var/www/html
119 DocumentRoot "/var/www/html"
120
121 #DocumentRoot "/westos/html"
[root@desktop ~]# systemctl restart httpd //重启服务
[root@desktop ~]# cd /var/www/html/
[root@desktop html]# mkdir westos
[root@desktop html]# ls
index.html test.html westos
[root@desktop html]# cd westos/
[root@desktop ~]# vim /etc/httpd/conf/httpd.conf//编辑文件:对某些ip进行访问控制;
122 <Directory "/var/www/html/westos">
123 Order Allow,Deny //先读取白名单的内容,后读取黑名单的内容
124 Allow from All //白名单:允许所有ip进行访问
125 Deny from 172.25.254.74 //黑名单,禁止ip为172.25.254.74进行访问;
126 </Directory>
[root@desktop ~]# systemctl restart httpd //重启服务
配置文件编辑内容:
用ip为172.25.254.74的主机浏览器进行访问:(被拒绝)
[root@desktop ~]# vim /etc/httpd/conf/httpd.conf
122 <Directory "/var/www/html/westos">
123 Order Deny,Allow //先读取黑名单的内容,后读取白名单的内容
124 Allow from 172.25.254.74 //只允许ip为172.25.254.74主机进行访问
125 Deny from ALL //禁止所有用户进行访问
126 </Directory>
[root@desktop ~]# systemctl restart httpd //重启服务
配置文件编辑:
用ip为172.25.254.74的主机浏览器进行访问:(允许)
基于用户的访问控制
A:指定单个用户进行访问
准备实验环境:注释刚刚ip的设定
[root@desktop httpd]# htpasswd -cm apacheuser tom //修改tom的密码
New password:
Re-type new password:
Adding password for user tom
[root@desktop httpd]# htpasswd -m apacheuser admin //加上-c会覆盖之前的内容
New password:
Re-type new password:
Adding password for user admin
[root@desktop httpd]# cat apacheuser //查看用户及密码信息
tom:$apr1$JI/YD8Pi$RnrExjesN/s.8tPjOfnmO.
admin:$apr1$UsLV8vRU$cqTY/f.YHS5g5XC127Tix/
[root@desktop ~]# vim /etc/httpd/conf/httpd.conf //编辑配置文件
129 <Directory "/var/www/html/westos">
130 AuthUserFile /var/www/html/westos/apacheuser //指定文件,这里的文件是apacheuser的绝对路径
131 AuthName "Please input your name and your passwd!!" //网页提示语
132 AuthType basic //基本认证(认证类型)
133 Require user admin //指定用户
[root@desktop ~]# systemctl restart httpd //重启服务
配置文件/etc/httpd/conf/httpd.conf内容:
浏览器查询(会出现一个用户登录认证界面):
现在我们输入admin(刚刚指定可以登录的用户)和密码:是可以看到内容的
那么输入tom(其余用户)和密码:是不能登陆成功的
B:指定文件的所有用户
[root@desktop ~]# vim /etc/httpd/conf/httpd.conf //编辑配置文件
129 <Directory "/var/www/html/westos">
130 AuthUserFile /etc/httpd/apacheuser
131 AuthName "Please input your name and your passwd!!"
132 AuthType basic
134 Require valid-user //所有apacheuser文件中存在的所有用户
[root@desktop ~]# systemctl restart httpd //重启服务
文件内容:
浏览器查询(所有用户都试一遍),当然都可以看见内容了;
用一个ip发布多个节点的测试页
本次实验用真机进行浏览器访问测试(浏览器在哪台主机,ip就是这台主机的ip)
1、首先完成本地解析:
vim /etc/hosts //本地解析文件
172.25.254.174 www.westos.com music.westos.com news.westos.com
2、在虚拟机desktop完成以下操作(完成apache配置的主机):
[root@desktop conf.d]# vim /etc/httpd/conf.d/default.conf //编辑默认网页发布的文件
1 <VirtualHost _default_:80>
2 DocumentRoot /var/www/html
3 CustomLog "logs/defult.log" combined
4 </VirtualHost>
[root@desktop conf.d]# mkdir /var/www/virtual/westos.com/news -p //建立文件
[root@desktop conf.d]# mkdir /var/www/virtual/westos.com/music -p
[root@desktop conf.d]# cd /var/www/virtual/westos.com
[root@desktop westos.com]# cd news
[root@desktop news]# vim index.html //编辑news.westos.com发布内容
编辑内容:我是:/var/www/virtual/westos.com/news/index.html
[root@desktop westos.com]# cd music
[root@desktop news]# vim index.html //编辑music.westos.com发布内容
编辑内容:我是:/var/www/virtual/westos.com/music/index.html
[root@desktop conf.d]# vim news.conf //编辑news.westos.com发布内容
1 <VirtualHost *:80>
2 ServerName news.westos.com
3 DocumentRoot "/var/www/virtual/westos.com/news/"
4 CustomLog "logs/news.log" combined
5 </VirtualHost>
6 <Directory "/var/www/virtual/westos.com/news/">
7 Require all granted
8 </Directory>
[root@desktop conf.d]# cp new.conf music.conf //复制一份
[root@desktop conf.d]# vim music.conf //更改所有的news为music :%s/news/music/g
[root@desktop conf.d]# systemctl restart httpd //重启
浏览器(配置本地解析的那台主机的浏览器)测试:
如果三个域名出现各自的文件,那么操作成功;
自定义自签名证书
[root@desktop ~]# yum install mod_ssl -y
[root@desktop ~]# yum install crypto-utils.x86_64 -y
[root@desktop ~]# genkey www.westos.com //执行此命令后进入自定义设置界面
执行genkey www.westos.com 后进入自定义设置界面:
完成之后,进入选择:
接下来,谈些自定义信息:
完成一系列设置之后,替换证书和密钥:
[root@desktop ~]# vim /etc/httpd/conf.d/ssl.conf //安装证书及其私钥
100 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
107 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
[root@desktop ~]# systemctl restart httpd //重启服务
密钥和证书的地址,可以在genkey命令后面找到;
编辑替换原来的证书和密钥:
打开浏览器,输入 https://www.westos.com(点击锁的样式,看证书是否是自定义的;)
查询证书,会发现,证书信息是自己定义的:
网页重写
在真机的地址解析添加:在172.25.254.174后面添加login.westos.com
//在虚拟机完成以下操作:
[root@desktop conf.d]# cp new.conf login.conf
[root@desktop conf.d]# mkdir -p /var/www/virtual/westos.com/login/
[root@desktop conf.d]# vim /var/www/virtual/westos.com/login/index.html
编辑内容:我是:/var/www/virtual/westos.com/login/index.html
[root@desktop conf.d]# vim login.conf
1 <VirtualHost *:443> //建立一个虚拟主机
2 ServerName login.westos.com
3 DocumentRoot "/var/www/virtual/westos.com/login/"
4 CustomLog "logs/login.log" 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/virtual/westos.com/login/">
10 Require all granted
11 </Directory>
12 <VirtualHost *:80> //自动转换
13 ServerName login.westos.com
14 RewriteEngine on
15 RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] //^(/.*)$客户主机在浏览器所写入的字符; https://%{HTTP_HOST}$1 客户主机在浏览器所写入的内容去掉协议的部分;redirect=301 代表临时转换
16 </VirtualHost>
[root@desktop conf.d]# systemctl restart httpd //重启服务
/etc/httpd/conf.d/login.conf 的内容:
/var/www/virtual/westos.com/login/index.html的内容:
浏览器查询,输入域名login.westos.com
php语言支持
[root@desktop html]# yum install php -y //安装软件
[root@desktop html]# vim index.php //编辑php类型文本
1 <?php
2 phpinfo();
3 ?>
[root@desktop html]# vim /etc/http/conf/httpd.conf //在配置文件将php添加在html之前,让系统访问
180 DirectoryIndex index.php index.html
[root@desktop html]# systemctl restart httpd //重启服务
文件index.php内容:
配置文件编辑(调整顺序,在配置文件将php添加在html之前,让系统先于php访问):
浏览器查询:
cgi
[root@desktop conf.d]# cd /var/www/html
[root@desktop html]# mkdir cgi 新建目录
[root@desktop html]# vim cgi/index.cgi //编辑cgi脚本
1 #!/usr/bin/perl
2 print "Content-type: text/html\n\n";
3 print `date`; //显示日期
[root@desktop html]# ll cgi/index.cgi
-rw-r--r-- 1 root root 67 May 27 02:13 cgi/index.cgi
[root@desktop html]# chmod +x cgi/index.cgi //赋予可执行权限
[root@desktop html]# ./cgi/index.cgi //执行脚本
Content-type: text/html
Sun May 27 02:14:16 EDT 2018
[root@desktop html]# cd /etc/httpd/conf.d
[root@desktop conf.d]# vim default.conf
1 <VirtualHost _default_:80>
2 DocumentRoot /var/www/html
3 CustomLog "logs/defult.log" combined
4 </VirtualHost>
5 <Directory "/var/www/html/cgi">
6 Options +ExecCGI
7 AddHandler cgi-script .cgi
8 DirectoryIndex index.cgi
9 </Directory>
[root@desktop conf.d]# systemctl restart httpd
浏览器查询,输入172.25.254.174/cgi,会看到浏览器显示的是编写的脚本执行结果
squid正向代理
确保有一台主机可以上网(真机),另一台主机想要上网必须通过有网的主机缓存
在虚拟机里设置网络,确保虚拟机可以连接到网络;
yum install squid -y
vim /etc/sysconfig/nework-scripts/ifcfg-eth0
GATE=172.25.254.74
DNS1=114.114.114.114
systemctl restart network
vim /etc/squid/squid.conf
56 http_access allow all
62 cache_dir ufs /var/spool/squid 100 16 256 //取消这行的注释
systemctl start squid
输入百度的网址,测试可以看到网页,但是真实访问的不是真实的网页,而是172.25.254.114这台主机的缓存;
浏览器设置网络代理:
preferences–>Advanced–>Network–>Settings–>Manual proxy configuration
HTTP Proxy: 172.25.254.74 (可以上网的主机) Port:3128
选中 use this proxy server for all protocols 这一项;
squid反向代理
实现了两次加速;
实验需要2个主机:
主机作为服务端,相当于深圳;server作为中介,相当于西安;
主机(服务端):设置好httpd服务
server:
yum install squid -y //安装squid;
systemctl stop firewalld //关闭火墙
vim /etc/squid/suqid.conf
56 http_access allow all
59 http_port 80 vhost vport //虚拟主机和虚拟端口
60 cache_peer 172.25.254.114 parent 80 0 proxy-only //通过80端口缓存自己没有的东西
systemctl start squid
打开浏览器,关闭网络代理:preferences–>Advanced–>Network–>Settings–>No Proxy
在desktop(客户端)浏览器中查询ip:172.25.254.247(server),可以看到apache的发布内容;