使用Apache部署静态网站

0.198字数 879阅读 6882

Apache

Web服务程序之一,类似的还有IIS、Nginx等,用来提供Web服务

利用curl命令获取http头:

Screenshot from 2018-01-31 16-10-59.png
Screenshot from 2018-01-31 16-14-58.png

Apache的安装部署

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.png

111这台主机访问时没有认证流程,直接会被拒绝访问,而其他主机需要认证成功才可访问:

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.png

2.支持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.";

然后就可以通过浏览器测试

推荐阅读更多精彩内容