Apache 随记

 

默认目录和用户

默认用户: apache (自动创建的用户)

Apache 安装目录:/etc/httpd

常用模块配置文件存放目录:/etc/httpd/conf.modules.d

 

Apache 主配置文件内容简单描述

Apache 主配置文件所在路径:/etc/httpd/conf/httpd.conf

User 运行的系统用户名

Group 运行的系统用户组

ServerRoot 服务器根路径

DocumentRoot 网页文件存放目录(网站主目录)

 

Apache 主机访问控制

  • DAC(Discretionary Access Control) 自主访问控制,基于用户名和密码的访问控制
  • MAC(Mandatory Access Control)    强制访问控制,基于 IP,域名,主机名 的访问控制
  • mod_access 根据访问者的IP,域名,主机名来控制访问,该模块提供 order,deny,allow 等控制指令
权限配置:
    Allow from All         允许所有客户端访问
    Allow from 1.1.1.1     允许IP地址为 1.1.1.1 的客户端访问
    AllowOverride All      使用页面目录中的.htaccess文件中的规则重写默认规则
    AllowOverride None     不使用页面目录中的.htaccess文件中的规则重写默认规则
    Deny from All          禁止所有客户端访问
    Deny from 1.1.1.1      禁止IP地址为 1.1.1.1 的客户端访问
    Order allow,deny       先执行 allow 的规则再执行 deny 规则
    Require local          仅允许本地访问
    Require all granted    允许所有访问请求
    Require all denied     禁止所有访问请求
    Satisfy All            当同时设置了Allow, Required等控制条件时,需要条件都满足才行
    Satisfy Any            当同时设置了Allow, Required等控制条件时,只需满足其中任意一个条件即可

注意:下层的权限会覆盖上层的权限
例:/var/www/html/test 目录下除了 test.txt 文件其他文件都不允许访问
<Directory "/var/www/html/test">
    Deny from all
    <Files "test.txt">
        Allow from all
    </Files>
</Directory>

Order allow,deny 使用时注意事项:Order 以最后一个规则为结束规则,在 Order allow,denydeny 就是最后一个规则

由于 Deny 为 Order 中的结束规则所以当执行到 Deny 时就结束并不会继续执行后面的 Allow, 所以1.1.1.1也访问不了 test 目录
<Directory "/var/www/html/test">
    Order Allow,Deny
    Deny from all
    Allow from 1.1.1.1
</Directory>

要使 1.1.1.1 能访问 test 目录只需将 Order Allow,Deny 换成 Order Deny,Allow 即可
<Directory "/var/www/html/test">
    Order Deny,Allow
    Deny from all
    Allow from 1.1.1.1
</Directory>

 

Apache 账户访问控制

作用:网站资源只有通过认证的用户才能访问

常用基本认证模块:mod_auth_basic

注:可自己在页面目录下创建 .htaccess 文件然后把规则写入 .htaccess 中,也可直接在主配置文件中创建对应的目录规则。若使用 .htaccess 文件来制定规则则需要更改主配置文件中的 AllowOverride 规则

要注意合理设置文件的权限,要能让Apache服务读取这些文件或目录

例1. 为网页指定认证的用户(单一用户认证)

[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/html" # 设置页面主目录为 /html
...
<Directory "/html">
    Options Indexes FollowSymlinks # 当目录下没有index.html就列出该目录下的文件和子目录
    AuthName "Web User Authentication" # 认证区域的名称,让其他相同认证区域的资源也可被同一认证用户访问
    AuthType Basic # 设置认证类型为基础类型
    Require User test # 指定认证的用户名只能为 test,其他的用户名无法通过认证
    AuthUserFile "/etc/httpd/.test" # 指定用户认证文件的路径(建议放在权限低的地方,以免被非法下载)
</Directory>
...

# 为Apache认证用户 test 设置认证密码并把认证用户名和加密后的密码写入指定的用户认证文件(/etc/httpd/.test)
# htpasswd 的 -c 参数表示覆盖原先文件中的内容,不加 -c 表示追加
[root@localhost ~]# htpasswd -c /etc/httpd/.test test
New password: 123
Re-type new password: 123
Adding password for user test

例2. 用户认证文件中的用户都能认证访问网站(多用户认证)

# 编辑主配置文件
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/html" # 设置页面主目录为 /html
...
<Directory "/html">
    Options Indexes FollowSymlinks
    AuthName "Web User Authentication"
    AuthType Basic
    Require valid-user # 用户认证文件中任意用户名都可进行认证访问网站
    AuthUserFile "/etc/httpd/.testusers" # 指定用户认证文件的路径
</Directory>
...

# 添加Apache认证用户
[root@localhost ~]# htpasswd -c /etc/httpd/.testusers test1
...
[root@localhost ~]# htpasswd /etc/httpd/.testusers test2
...
[root@localhost ~]# htpasswd /etc/httpd/.testusers test3
...

# 查看是否添加成功
[root@localhost ~]# cat /etc/httpd/.testusers 
test1:$apr1$ixYFqjIS$13WBaYjNY3UPcC3KhiF8N.
test2:$apr1$jCnxaXkQ$lRP8u.Jbh3JTD.UEfaYvV0
test3:$apr1$wuQpoK.u$ly7hbvSGYxS0tIyGQGAhp0

例3. 为网页指定认证的组,只有组内成员能进行认证(组认证)

# 编辑主配置文件
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/html" # 设置页面主目录为 /html
...
<Directory "/html">
    Options Indexes FollowSymlinks
    AuthName "Web User Authentication"
    AuthType Basic
    Require Group webuser # 指定认证的组,只能用组中的用户进行认证
    AuthGroupFile "/etc/httpd/.webuser" # 组认证文件,里面指定了组内用哪些用户
    AuthUserFile "/etc/httpd/.users" # 用户认证文件,里面存放了组内用户的认证信息
</Directory>
...

# 组认证文件的格式为 组名: 组内用户1 组内用户2 组内用户3 ...
[root@localhost ~]# cat /etc/httpd/.webuser
webuser: user1 user2 user3

# 为webuser组内的认证用户设置认证密码并写入指定的用户认证文件(/etc/httpd/.users)
[root@localhost ~]# htpasswd -c /etc/httpd/.users user1
...
[root@localhost ~]# htpasswd /etc/httpd/.users user2
...
[root@localhost ~]# htpasswd /etc/httpd/.users user2
...

# 查看用户是否已写入指定的用户认证文件
[root@localhost ~]# cat /etc/httpd/.users
user1:$apr1$KB0TuS/t$wv1lIgrQgZlZk2IiVZ50W0
user2:$apr1$VKSyoGWA$NOEO2kMgBDlroSCDDzqkc/
user3:$apr1$K61CLuGN$7dj4pEMUeJ1vNWqPNz3sZ/
  • 开始认证

  • 认证成功

 

Apache 虚拟目录和虚拟主机

虚拟目录:映射到本地或远程服务器上的物理目录的目录名称。当资源在其他地方时,可用虚拟目录让服务器仍然能够访问资源。

虚拟主机:在网络服务器上划分出一定大小的磁盘空间,该空间可存放站点,应用组件与必要的站点数据等,使得单一机器上可运行多个站点服务。

  • 创建虚拟目录让 Apache 服务器可访问其他位置的资源
# 创建目录
[root@localhost ~]# mkdir -p /resource/book

# 创建虚拟目录并为物理目录设置访问权限
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
...
Alias /book "/resource/book"  # 为物理目录(/resource/book)创建虚拟目录(/book)
<Directory "/resource/book">
    Require all granted  # 定义访问权限为所有人均可访问
</Directory>
...

# 重启服务
[root@localhost ~]# systemctl restart httpd
  •  在单一机器上使用虚拟主机来管理多个网站
# 把虚拟主机示例复制到 Apache 服务器目录下(也可以自己手打,为方便这里就直接复制了而且没有改名字)
[root@localhost ~]# cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d

# 编辑虚拟主机文件(httpd-vhosts.conf)
[root@localhost ~]# vi /etc/httpd/conf.d/httpd-vhosts.conf
...
<VirtualHost *:80>  # 80端口上的站点(站点1)
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/web1"  # 站点根目录
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    <Directory "/web1">  # 目录访问权限设置
        AllowOverride None
        Require all granted
    </Directory>
    Alias /book "/resource/book"  # 创建虚拟目录
    <Directory "/resource/book">  # 物理目录权限设置
        AllowOverride None
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/dummy-host.example.com-error_log"
    CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common
</VirtualHost>

Listen 8080  监听8080端口
<VirtualHost *:8080>  # 8080端口上的站点(站点2)
    DocumentRoot "/web2"  # 站点根目录
    <Directory "/web2">  # 目录访问权限设置
        Require all granted
    </Directory>
</VirtualHost>
...

# 重启服务
[root@localhost ~]# systemctl restart httpd

 

posted @ 2022-12-09 13:59  一个入门学者  阅读(72)  评论(0编辑  收藏  举报