Apache
Web服务程序之一,类似的还有IIS、Nginx等,用来提供Web服务
利用curl命令获取http头:
Screenshot from 2018-01-31 16-10-59.png Screenshot from 2018-01-31 16-14-58.pngApache的安装部署
yum install httpd ##Apache软件
yum install httpd-manual ##Apache的手册
systemctl start httpd ##开启http
systemc enable httpd ##设置开机自启
注意防火墙的策略对http服务的影响:
firewall-cmd --list-all ##列出防火墙信息
firewall-cmd --permanent --add-service=http ##永久允许http
firewall-cmd --reload ##重新加载防火墙策略
测试:
http://172.25.254.111 ##查看主页
http://172.25.254.111/manual ##查看手册
Screenshot from 2018-01-31 16-16-38.png
Screenshot from 2018-01-31 16-17-17.png
默认发布目录:
/var/www/html
默认发布文件:
/var/www/html/index.html ##需自行建立
Apache的基础信息
主配置目录: /etc/httpd/conf
主配置文件: /etc/httpd/conf/httpd.conf
子配置目录: /etc/httpd/conf.d
子配置文件: /etc/httpd/conf.d/\*.conf
默认发布目录: /var/www/html
默认发布文件: /var/www/html/index.html
默认端口: 80
默认安全上下文: http_sys_content_t
程序开启默认用户: apache
Apache日志: /etc/httpd/logs/\*
访问日志: /var/log/httpd/access_log
错误日志: /var/log/httpd/error_log
修改配置及相关设置:
主配置文件中,没有<>标签的是全局配置,有<>标签的是区域配置。
常用参数及用途描述:
ServerRoot 服务目录
ServerAdmin 管理员邮箱
User 运行服务的用户
Group 运行服务的用户组
ServerName 网站服务器的域名
DocumentRoot 网站数据目录
Listen 监听的IP地址与端口号
DirectoryIndex 默认的索引页页面
ErrorLog 错误日志文件
CustomLog 访问日志文件
Timeout 网页超时时间,默认为300秒
修改默认发布文件:
将DirectoryIndex改为想改成的默认发布文件,可以多个文件,以空格隔开,当第一个被删除后会默认访问第二个作为主页
Screenshot from 2018-01-31 16-46-14.png Screenshot from 2018-01-31 16-43-30.png设置完主页之后重启httpd服务就可以看到默认页面变成了hahaha页面:
Screenshot from 2018-01-31 16-54-14.png当把/var/www/html/hahaha删除,Apache就会自动寻找下一个可用的主页:
Screenshot from 2018-01-31 16-45-54.png修改默认发布目录:
DocumentRoot "/hahaha/html"
<Directory "/hahaha">
Require all granted
</Directory>
如果selinux开启,需要做以下设置:
semanage fcontext -a -t http_sys_content_t '/hahaha(/.*)?'
restorecon -RvvF /hahaha/
Screenshot from 2018-01-31 17-06-56.png
Screenshot from 2018-01-31 17-07-36.png
修改默认发布端口:
ss -antuple | grep httpd可以看到默认发布端口为80:
Screenshot from 2018-01-31 17-10-53.png在配置文件中找到Listen,后面改为想要的端口:
Screenshot from 2018-01-31 17-11-52.png修改防火墙过滤规则:
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
Screenshot from 2018-01-31 17-13-50.png
此时可以正常访问:
Screenshot from 2018-01-31 17-14-43.png如果没有修改防火墙,可能会出现403
Apache内部的访问控制
1.针对于主机的访问控制(例):
<Directory "/var/www/html/test">
Order deny,allow ##列表读取顺序,后读取的列表会覆盖前面的列表
Allow from 172.25.254.xxx
Deny from all
<Diretory>
Screenshot from 2018-02-03 09-41-43.png
Screenshot from 2018-02-03 09-43-11.png
2.用户方式的访问控制(例):
htpasswd -cm /etc/httpd/webuser admin ##创建用户并添加密码
如果已经存在用户密码文件,那么增加用户时不用加-c参数:
htpasswd -m /etc/httpd/webuser admin1
vim /etc/httpd/conf/httpd.conf:
<Directory "/var/www/html/admin">
AuthUserfile /etc/httpd/webuser
AuthName "Please input your name and passwd"
AuthType basic
#Require user admin ##只允许admin用户
Require valid-user ##允许名单中的用户
</Directory>
Screenshot from 2018-02-03 09-54-38.png
如果如下设置:
Screenshot from 2018-02-03 10-02-45.png111这台主机访问时没有认证流程,直接会被拒绝访问,而其他主机需要认证成功才可访问:
Screenshot from 2018-02-03 10-06-34.png由上图可以看出,针对主机的访问控制和针对用户的访问控制如果同时存在,是先按照主机的访控策略,再走用户认证流程
Apache的虚拟主机
为了在一台主机上部署多个网站,可以用Apache的虚拟主机功能。在vps(Virtual Private Server)没出来之前,用的都是虚拟主机,但是虚拟主机不能隔离硬件资源。
步骤:
服务器上建立多个文件夹用于存放不同的子网站文件:
mkdir /var/www/html/music/html -p
mkdir /var/www/html/news/html -p
再在每个其中建立index.html文件
Screenshot from 2018-02-03 10-49-28.png然后再在/etc/httpd/conf.d/下建立各个子网站的配置文件:
以music.hahaha.com为例:
vim music.conf:
<VirtualHost *:80>
ServerName music.hahaha.com
DocumentRoot /var/www/html/music/html
CustomLog logs/music.log combined
</VirtualHost>
<Directory "/var/www/html/music/html">
Require all granted
</Directory>
Screenshot from 2018-02-03 10-51-41.png
如果需要启用不同ip对应不同虚拟主机,可以参考《Linux就该这么学》里面的配置:
<VirtualHost 192.168.10.10>
DocumentRoot /home/wwwroot/10
ServerName www.linuxprobe.com
<Directory /home/wwwroot/10 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.10.20>
DocumentRoot /home/wwwroot/20
ServerName bbs.linuxprobe.com
<Directory /home/wwwroot/20 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.10.30>
DocumentRoot /home/wwwroot/30
ServerName tech.linuxprobe.com
<Directory /home/wwwroot/30 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
最后,在需要进行访问的主机上编辑/etc/hosts进行解析:
例:
172.25.254.211 www.hahaha.com news.hahaha.com music.hahaha.com
这样就能访问了
这样配置了之后,发现主站www.hahaha.com访问到的是music,这是因为子配置文件少了一个默认配置:
vim /etc/httpd/conf.d/default.conf:
Screenshot from 2018-02-03 11-16-58.png配置Apache支持多种语言
1.支持php:
yum install php -y
然后编辑php测试页index.php:
<?php
phpinfo();
?>
这样就可以通过浏览器访问了
Screenshot from 2018-02-03 16-39-08.png2.支持cgi:
编辑配置文件:
vim /etc/httpd/conf.d/a_default.conf
<VirtualHost _default_:80>
DocumentRoot /var/www/html
CustomLog logs/default.log combined
</VirtualHost>
<Directory /var/www/html/cgi>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
在/var/www/html下新建一个cgi目录,在此目录中新建index.cgi文件:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world.";
然后就可以通过浏览器测试
网友评论