文章目录
Apache访问控制
实验环境:
关闭防火墙关闭selinux
搭建好lamp
服务器zcy01(17216.1.10)
测试机:本地win10华为浏览器
httpd版本为2.4.47
一、用户访问功能搭建
指定目录下(WordPress)创建权限文件,访问WordPress时需要权限验证,其他目录则不需要
cd /usr/local/apache2/htdocs/wordpress/
vim .htaccess
AuthName "Welcome to kernel"
#提示信息
AuthType basic
#加密类型
AuthUserFile /usr/local/apache2/htdocs/apache.passwd
#密码文件,文件名自定义。(使用绝对路径)
require valid-user
#允许密码文件中所有用户访问
touch /usr/local/apache2/htdocs/apache.passwd
#创建指定的密码文件、添加允许访问的用户(与系统用户无关)
#注:-c创建密码文件和添加第一个用户、-m添加更多用户;
#注:htpasswd是httpd的命令,若没有安装httpd-tools软件包
yum install httpd-tools -y
htpasswd -c /usr/local/apache2/htdocs/apache.passwd admin
htpasswd -m /usr/local/apache2/htdocs/apache.passwd zcy
#编辑配置文件,在需要登录认证的目录标签中添加:
声明被保护目录,只要在对应的权限控制目录下创建.htaccess文件即可
vim /usr/local/apache2/conf/httpd.conf
<Directory "/usr/local/apache2/htdocs">
Options Indexes FollowSymLinks
#开启权限认证文件.htaccess
AllowOverride All
Require all granted
</Directory>
重启服务、验证(访问其他界面正常,访问wordpress界面后输入用户名和密码才能看到内容)
/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
输入正确可以访问
输入错误,重复提示登陆
取消则报错
二、虚拟主机功能搭建(基于域名)
主配置文件开启虚拟主机模块的关联配置文件
vim /usr/local/apache2/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf #取消注释
编辑虚拟主机配置文件、添加相应的标签
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
有几个虚拟机主机添加几组下面的标签
<VirtualHost *:80> #虚拟主机标签(ip、端口)
ServerAdmin webmaster@sina.com #管理员邮箱
DocumentRoot "/usr/local/apache2/htdocs/sina" #网站主目录
ServerName www.sina.com #完整域名
ErrorLog "logs/sina-error_log" #错误日志
CustomLog "logs/sina-access_log" common #访问日志
</VirtualHost>
#设置sina虚拟主机的权限,若与主配置文件中配置相同、可省略
<Directory "/usr/local/apache2/htdocs/sina">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
我这里有两个分别是zcy.vip和qy.vip 配置如下
重启服务、验证
/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
客户端配置
更改hosts文件,添加服务器IP 指定的域名
浏览器访问测试
三、地址跳转(基于域名的虚拟主机基础上,zcy.vip–>qy.vip)
主配置文件开启重定向模块
vim /usr/local/apache2/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so #取消注释
在需要进行跳转的目录下添加权限文件
地址跳转的可用参数,参考:http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewriterule
cd /usr/local/apache2/htdocs/zcy
vim .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} www.zcy.vip
RewriteRule .* http://www.qy.vip/$1 [R=permanent,L]
检查下主配置文件AllowOverride All是打开的
重启服务、验证
/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
浏览器访问测试
字符终端测试
四、结合openssl实现https
在地址跳转的基础上继续实验
前提:安装apache的时候需要添加选项(–enable-ssl)、安装了基础依赖(openssl、openssl-devel)
修改主配置文件开启ssl模块、开启加载ssl关联的配置文件
vim /usr/local/apache2/conf/httpd.conf
LoadModule ssl_module modules/mod_ssl.so #取消注释
Include conf/extra/httpd-ssl.conf #取消注释
#加载缓存模块
LoadModule socache_shmcb_modulemodules/mod_socache_shmcb.so
修改ssl关联的配置文件(改域名、关缓存)
vim /usr/local/apache2/conf/extra/httpd-ssl.conf
<VirtualHost _default_:443>
#改域名
DocumentRoot "/usr/local/apache2/htdocs/qy"
ServerName www.qy.vip:443
ServerAdmin qy@example.com
ErrorLog "logs/sina-https-error_log"
CustomLog "logs/sina-https-access_log" common
</VirtualHost>
创建证书,配置文件指定默认在配置文件所在目录
$ cd /usr/local/apache2/conf
$ openssl genrsa -out server.key 1024
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
重启服务、验证
/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
客户端访问
浏览器地址栏输入:https://www.qy.vip - 高级-继续访问
五、地址跳转(端口跳转,www.qy.com的80 --> 443)
在四的基础上继续实验
主配置文件开启重定向模块
vim /usr/local/apache2/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so #取消注释
在需要进行跳转的目录下添加权限文件
cd /usr/local/apache2/htdocs/qy
vim .htaccess
RewriteEngine on
#判断站点访问端口,不是443的时候,进行处理;HTTP_PORT是80
RewriteCond %{SERVER_PORT} !443
RewriteRule .* https://www.qy.vip/$1 [R=permanent,L]
重启服务、验证
/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
浏览器测试
访问www.qy.vip自动跳转到https://www.qy.vip
同时访问www.zcy.vip也会跳转到https://www.qy.vip
六、配置缓存
在五的基础上继续试验
vim /usr/local/apache2/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so #启用模块
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 4 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hours"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
重启测试
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
七、http2
在六的基础上继续试验
环境要求:
1.httpd软件包在2.4.17以上,否则不支持mod_http2
2.需要依赖nghttp2在1.2.1以上
3.openssl软件包在1.0.2以上,否则不支持HTTP/2.0
4.需要在configure时指定–enable-http2选项
vim /usr/local/apache2/conf/httpd.conf
#开启HTTP/2.0模块、SSL模块
LoadModule http2_module modules/mod_http2.so
设置域名、协议
ServerName www.linuxlc.com:80
Protocols h2 http/1.1
重启服务
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
客户端测试;
https://IP
http://IP/xx.html – 跳转到https,查看开发者工具,右键勾选Protocol,看到h2