Apache的详细配置

http 协议名
apache 软件名 nginx

httpd (http daemon;http服务)

web 服务器


survey.netcraft.net --此网站会有每个月份的世界上网站使用的WEB服务器的使用率统计

官网:
www.apache.org



IBM apache软件基金会 redhat oracle
websphere tomcat jboss weblogic



==========================================================================================================
学习环境配置:
准备一台全新的虚拟机(centos7.3平台),准备好本地yum源

# yum install httpd\* --安装软件包


# rpm -qa |grep httpd
httpd-manual-2.4.6-45.el7.centos.noarch
httpd-2.4.6-45.el7.centos.x86_64
httpd-devel-2.4.6-45.el7.centos.x86_64
httpd-tools-2.4.6-45.el7.centos.x86_64



主配置文件
ls /etc/httpd/conf/httpd.conf


启动服务
默认端口:80
启动前验证没有进程占用80,若是有,先停掉或kill掉占用的进程
# lsof -i:80
# netstat -ntlup |grep :80


# systemctl start httpd
# systemctl enable httpd
# systemctl status httpd


启动完成后,再验证是不是你要启动的进程占用了80
# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2312 root 4u IPv6 30417 0t0 TCP *:http (LISTEN)
httpd 2313 apache 4u IPv6 30417 0t0 TCP *:http (LISTEN)
httpd 2314 apache 4u IPv6 30417 0t0 TCP *:http (LISTEN)
httpd 2315 apache 4u IPv6 30417 0t0 TCP *:http (LISTEN)
httpd 2316 apache 4u IPv6 30417 0t0 TCP *:http (LISTEN)
httpd 2317 apache 4u IPv6 30417 0t0 TCP *:http (LISTEN)

# netstat -ntlup |grep :80
tcp6 0 0 :::80 :::* LISTEN 2312/httpd

======================================================================================================


例一:创建网站主页(主页文件优先于welcome欢迎页面)
在网站根目录下 创建一个主页文件

echo 'main page' > /var/www/html/index.html 主页文件的默认路径

http://127.0.0.1/ --就能够看到main page的信息,也就是直接访问到主页

把主页文件写成html标签的格式以下:
<html>
<head>
<title>笔记站点</title>
</head>
<body>
<center><h1>欢迎来个人网站!@_@</h1></center>
</body>
</html>



例二:修改网站根目录

# vim /etc/httpd/conf/httpd.conf

119 DocumentRoot "/www" --修改网站根目录为/www

131 <Directory "/www"> --把这个也对应的修改成/www



# mkdir /www
# echo "new main page" > /www/index.html

# systemctl reload httpd




--注意,不要开启selinux,不然换新的家目录的话,客户端访问会被拒绝



例三:修改主页类型或加多个主页类型并调整优先级


# vim /etc/httpd/conf/httpd.conf

164 DirectoryIndex index.php index.html

--使用浏览器访问,发现没有返回主页信息,由于上面的意思为:先找网站家目录下的index.php,不存在话,再找index.html,都不存在,就表示找不到主页

# echo 'php main page' > /www/index.php

客户端测试会优先访问index.php



例四:对php支持的简单讨论

# cat /www/index.php --把例三的index.php主页文件改为下面的一段简单代码
<?php
echo "hello world"
?>

客户端测试访问不到hello world,而是一个空白页面(说明没有php解释器来解释它)
解决方法:
# yum install php\* --要安装php解释器
# systemctl restart httpd

客户端再测试,显示的是hello world(说明php解释成功)



例五:把家目录里的文件作成列表的形式

条件1.
Options Indexes FollowSymLinks --相应目录的参数控制里要有indexes参数
条件2.
没有主页文件
条件3.
符合上面两个条件,就会访问到redhat的欢迎页面

vim /etc/httpd/conf.d/welcome.conf --注释掉这个欢迎页面,或者是删除它,或者mv更名







例六
关于apache的标签,容器(访问控制)

Directory (目录) Files(文件) Location (位置,url)
DirectoryMatch (目录,匹配regex)
Files(文件,匹配regex)
Location (位置,url,匹配regex)


<Directory "/www">
Options indexes FollowSymLinks --容许列表,符号连接
AllowOverride None --不使用.htaccess控制
Require all granted --容许全部人访问; Require all deined 拒绝全部人访问
</Directory>



访问控制写法简单总结(基于apache2.4版本):
Require all denied
Require ip 10.1.1.1 10.1.1.2 --拒绝全部,但容许10.1.1.1和10.1.1.2


<RequireAll>
Require all granted
Require not ip 10.1.1.1 10.1.1.2 --容许全部,但拒绝10.1.1.1和10.1.1.2
</RequireAll>



例七:对apache家目录作一个基本验证功能

1,
# vim /etc/httpd/conf/httpd.conf

<Directory "/www">
Options indexes FollowSymLinks
AllowOverride All --把None改成All(None表示此目录的验证功能不生效,All表示生效)
Require all granted
</Directory>


2,
# vim /www/.htaccess   --对哪一个目录进行验证,就在哪一个目录下创建此文件

authname "please input your username and password! @_@"
authtype basic
authuserfile /etc/httpd/userpasswd
require valid-user


3,
# htpasswd -c /etc/httpd/userpasswd aaa  --建立此文件,并加入一个用户,自定义密码,注意此用户与系统普通用户无关(文件不存在,第一次建立须要加-c参数)
New password:
Re-type new password:
Adding password for user aaa


# htpasswd /etc/httpd/userpasswd bbb  --再增长一个用户
New password:
Re-type new password:
Adding password for user bbb


4,#systemctl restart httpd


5,客户端使用浏览器访问测试



练习:针对一个子目录(非家目录)单独作验证




例八:关于Files和FilesMatch标签 --支持正则匹配,一个是文件匹配,一个是目录匹配

拒绝全部目录下的1文件被访问
<Files ~ "1">
Require all denied
</Files>



练习:网站下全部目录(包括子目录)以aaa开头的文件都不能被访问

<FilesMatch ~ "^aaa">
Require all denied
</FilesMatch>


练习:网站下全部目录(包括子目录)以.txt结尾的文件都不能被访问

<FilesMatch ~ ".txt$">
Require all denied
</FilesMatch>


练习:网站下全部.gif .jpeg .png的图片都被拒绝

<FilesMatch ~ "\.(gif|jpeg|png)$">
Require all denied
</FilesMatch>



例九:关于Location和LocationMatch的讨论

<Location "/aaa">
Require all denied
</Location>

表示elinks http://IP/aaa这个访问路径会被拒绝


<LocationMatch "^/aa">
Require all denied
</LocationMatch>

表示elinks http://IP/aaa或http://IP/aab这样以aa开头的访问路径会被拒绝



例十:apache的alias跳转

# vim /etc/httpd/conf/httpd.conf
Alias /yum "/yum" --前面/yum是location /yum ;后面的/yum是服务器根目录下的yum子目录

<Directory "/yum">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Require all granted
</Directory>


# systemctl restart httpd


客户端elinks http://IP/yum 就能够访问到服务器的/yum目录的文件




例十一:
错误页面

准备一个图片放到家目录,好比一个404bg.jpg


# vim /etc/httpd/conf/httpd.conf --修改主配置文件,指向你的这个图片路径
ErrorDocument 404 /404bg.jpg

# systemctl restart httpd


客户端测试,故意访问一个不存在的页面,触发404错误,就会显示上面的图片



======================================================================================================


虚拟主机 --用apache或nginx就能够作

一台服务器跑多台web服务


虚拟主机(用apache或nginx就能够作) --》 VPS(virtual private server虚拟专用服务器)(虚拟化) --》 云服务器 (云计算)



mkdir /www/aaa
mkdir /www/bbb
echo "aaa main page" > /www/aaa/index.html
echo "bbb main page" > /www/bbb/index.html




例十二:基于ip的虚拟主机
# vim /etc/httpd/conf/httpd.conf --把下面一段直接加到最后的空白处

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/aaa
ServerName 10.1.1.2
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/bbb
ServerName 10.1.1.5
</VirtualHost>


# ifconfig eth0:0 10.1.1.5/24 --基于ip的虚拟主机,你这台apache服务器得有访问它们的多个ip,没有的能够虚拟出来

# systemctl restart httpd

客户端访问测试
elinks -dump http://10.1.1.2/ --获得aaa main page
elinks -dump http://10.1.1.5/ --获得bbb main page




例十三:基于port的虚拟主机
# vim /etc/httpd/conf/httpd.conf

listen 80 --默认有这一句,不须要再加
listen 8080 --这一句没有,须要加上这一句


<VirtualHost *:80>
DocumentRoot /www/aaa
ServerName 10.1.1.2
</VirtualHost>

<VirtualHost *:8080>
DocumentRoot /www/bbb
ServerName 10.1.1.2
</VirtualHost>

# systemctl restart httpd

客户端访问测试
elinks -dump http://10.1.1.2/ --获得aaa main page
elinks -dump http://10.1.1.5:8080/ --获得bbb main page


例十四:基于域名的虚拟主机

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/aaa
ServerName news.web.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/bbb
ServerName sports.web.com
</VirtualHost>

# systemctl restart httpd


dns作CNAME,也就是news.web.com和sports.web.com都指向apache服务器ip(这里过程省略),若是不想作dns,能够直接在客户端/etc/hosts里绑定就能够了


客户端访问测试
elinks -dump http://news.web.com/ --获得aaa main page
elinks -dump http://sports.web.com/ --获得bbb main pagephp