6、httpd配置:
1.默认虚拟主机:
(1)虚拟主机:虚拟主机(共享主机,又称虚拟服务器)是一种在单一主机或主机 群上,实现多网域服务的方法,可以运行多个网站或服务的技术。
(2)配置:
# vim /usr/local/apache2.4/conf/httpd.conf //httpd.conf这个文件是httpd服务的的主配置文件,找到httpd-vhost这行并把行首的#号删掉。
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
//这个配置文件是虚拟主机的配置文件。
将配置文件改成如下图所示:
#mkdir -p /data/wwwroot/aming.com /data/wwwroot/www.123.com
#echo“aming.com”> /data/wwwroot/aming.com/index.html
//网站默认的主页就是 index.html
#echo“123.com”> /data/wwwroot/www.123.com/index.html
#/usr/local/apache2.4/bin/apachectl -t
#/usr/local/apache2.4/bin/apachectl graceful //这个操作是重新加载 httpd服务,避免重启。
#curl -x127.0.0.1:80 www.abc.com
2.用户认证:
(1)先对123.com做一个全站的用户认证:
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com虚拟主机编译成如下图一样的内容:
创建密码文件:
# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming
//htpasswd命令为创建用户的工具,-c为创建,-m为密码加密方式为MD5,/data/.htpasswd为密码文件,aming为要创建的用户,第一次执行命令需要加-c,第二次再创建新用户时则不用,否则/data/.htpasswd文件会被重置,之前的用户将会被清空。
# /usr/local/apache2.4/bin/apachectl -t
//没有问题后才能重启
#/usr/local/apache2.4/bin/apachectl graceful
配置完成后需要在Windows上修改一下hosts文件,在最下面加一行
#192.168.200.10 www.123.com
//这里的IP地址为你虚拟机的IP地址。
保存hosts文件后就可以访问www.123.com了,效果如下图:
3.配置域名跳转:
(1)修改配置文件:
# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
(2)查看httpd是否加载改模块:
#/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
#vim /usr/local/apache2.4/conf/httpd.conf //搜索rewrite,找到那行并把前面的#删除。
#/usr/local/apache2.4/bin/apachectl graceful
#/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
rewrite_module(shared) //有这一行输出,说明正常加载rewrite板块
(3)测试:
4.配置访问日志:
(1)编辑主配置文件:
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
改成如上图一样,保存。
(2)测试语法并重新加载配置:
#/usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful
#curl -x127.0.0.1:80 -I 123.com
# tail /usr/local/apache2.4/logs/123.com-access_log
如上图所示,系统中生成了日志,并且有相关的日志记录。
(3)配置日志文件:
防止日志文件过大,限制一些静态元素,并把日志文件按天归档,一天一个日志,配置如下图:
可以看到123.com-access_20201119.log 日志中只有aming.txt请求日志,但没有aming.jpg的请求日志,去除了静态元素,这样日志文件就会瘦身很多。
5.配置静态元素过期时间:
一个静态文件缓存时长的问题,叫作缓存过期时间。
(1)编辑主机配置文件:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
加入以下内容:
<IfModule mod_ expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days“ //过期时间为1天
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours'
ExpiresByType text/css "now plus 2 hour" //过期时间为2小时
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" //过期时间为0分钟,也就是不缓存
</IfModule>
(2)测试
可以看到max-age=86400,这说明jpg的图片将缓存86400秒,
也就是一天,我们也可以看到txt文件,max-age=0,说明没有缓存该类型的文件。
6.配置防盗链:
(1)编辑虚拟主机配置文件:
修改成如上图所示。
(2)测试:
# /usr/local/apache2.4/bin/apachectl -t
#/usr/local/apache2.4/bin/apachectl graceful
7.访问控制:
(1)定义:除了用户认证限制,还可以通过限制IP和限制user_agent,限制IP指的是限制访问网站的来源IP,而限制user_agent,通常用来限制恶意或者不正当的请求。
(2)限制IP:
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
写入以下内容:
<Directory /data/wwwroot/www.123.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
#/usr/local/apache2.4/bin/apachectl -t
#/usr/local/apache2.4/bin/apachectl graceful
#mkdir /data/wwwroot/www.123.com/admin/
//创建admin目录,模拟网站后台
#echo "admin" > /data/wwwroot/www.123.com/admin/index.html
在后台目录下创建文件,并写入内容。
# > /usr/local/apache2.4/logs/123.com-access_20201120.log
//清空当天访问日志
#curl -x192.168.200.10:80 -I www.123.com/admin/index.html
# curl -x127.0.0.1:80 -I www.123.com/admin/index.html
# cat /usr/local/apache2.4/logs/123.com-access_20201120.log
//查看当天日志,这里的日期随着虚拟机的时间改变。
验证成功:
(3)对某个文件进行限制:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
写入以下内容:
<Directory /data/wwwroot/testdomain.com/admin/>
<Filesmatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Filesmatch>
</Directory>
验证:
#touch /data/wwwroot/www.123.com/admin/admin.php
# curl -x192.168.200.10:80 www.123.com/admin/admin.php-I
#curl -x127.0.0.1:80 www.123.com/admin/admin.php-I
验证成功:
(4)禁止解析PHP代码:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
加入以下内容:
<Directory /data/wwwroot/testdomain.com/upload>
php_admin_flag engine off
</Directory>
#/usr/local/apache2.4/bin/apachectl -t
#/usr/local/apache2.4/bin/apachectl graceful
#cp /usr/local/apache2.4/htdocs/1.php /data/wwwroot/www.123.com/upload
# curl -x127.0.0.1:80 www.123.com/upload
验证成功:
注:401为没有用户名密码。
(5)限制user_agent:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
写入以下内容:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.*[NC]
RewriteRule .* - [F]
</IfModule>
#/usr/local/apache2.4/bin/apachectl -t
#/usr/local/apache2.4/bin/apachectl graceful
#curl -A “123123” -I -x127.0.0.1:80 www.123.com/upload //200
# curl -I -x127.0.0.1:80 www.123.com/upload //403
验证成功:
8.PHP配置:
(1)查看php配置文件所在位置:
#/usr/local/php/bin/php -i |grep -i "loaded configuration file"
可以看到第一行为警告信息,取消警告需要编辑php.ini这个文件,找到date.timezone设置为:date.timezone = Asia/Shanghai
再次执行将不再提示警告信息:
(2)PHP的disable_functions:
禁用一些存在安全风险的函数:
#vim /usr/local/php/etc/php.ini
搜索disable_functions,编辑成如下:
disable_functions=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,pas
sthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_e
xec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symli
nk,1eak,popepassthru,stream_socket_server,popen,proc_open,proc_close
#/usr/local/apache2.4/bin/apachectl -t //检查错误
#/usr/local/apache2.4/bin/apachectl graceful //重启服务
(3)配置error_log:
# vim /usr/local/php/etc/php.ini
//记录错误日志:搜索 log_errors, 改成如下
log_errors=On
//记录错误日志目录位置:搜索 error_log,改为
error_log = /var/log/php/php_errors.log
//记录错误日志级别:搜索 error_reporting 改为
error_reporting = E_ALL & ~E_ NOTICE
//再搜索 display_errors,改为
display_errors = Off
//配置完php.ini还需要做一些操作
# mkdir /var/log/php
# chmod 777 /var/log/php
# /usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful
我们做一个演示:
# vim /data/wwwroot/www.123.com/test.php //写入以下内容,如下图所示:
这里出现状态码500,此时需要查看日志来判断错误原因,如下图所示:
由日志可得知,test.php文件第三行少了分号。
(4)配置open_basedir:
在php.ini中设置open_basedir:
# vim /usr/local/php/etc/php.ini //搜索open_basedir,给成如下所示:
open_basedir = /tmp:/data/wwwroot/www.123.com
#/usr/local/apache2.4/bin/apachectl graceful
因为上边限制PHP只能在/tmp和/data/wwwroot/www.123.com两个目录下活动,所以我们用aming.com做演示:
给单个虚拟机设置open_basedir:
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
在123.com虚拟主机下面加一行:
php_admin_value open_basedir "/data/wwwroot/testdomain.com/:/tmp/"
9.PHP动态扩展模块安装:
(1)查看PHP都加载了哪些模块:
# /usr/local/php/bin/php -m
(2)安装PHP的redis扩展模块:
# cd /usr/local/src/
# wget http://pecl.php.net/get/redis-2.2.5.tgz
# tar -zxvf redis-2.2.5.tgz
#cd redis-2.2.5.tgz
# /usr/local/php/bin/phpize //生成configure文件
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make
# make install
# /usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,可以在php.ini中自定义该路径。
# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
//可以看到redis.so
# vim /usr/local/php/etc/php.ini
//增加一行配置:extension = redis.so
# /usr/local/php/bin/php -m |grep redis //查看是否加载了redis模块
#/usr/local/apache2.4/bin/apachectl graceful //重启一下服务才能使用
加载redis模块需编写: