LAMP

LAMP介绍

Linux+Apache(httpd)+MySQL+PHP

5e4a01dc3f1ed06e3100cf0795fddfd1001.jpg

PHP网站(Google、淘宝、百度、51cto博客、猿课论坛)

31d3ab705ce6b30ecb130bda584489556ab.jpg

三个角色可以在一台机器、也可以分开(httpd和PHP要在一起)

httpd、PHP、MySQL三者如何工作

518d8121b09611da824f00d35957d2cfb44.jpg

 

MySQL/Mariadb介绍

 MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)  

MySQL官网https://www.mysql.com  最新版本5.7GA/8.0DMR  

MySQL5.6变化比较大,5.7性能上有很大提升  

Mariadb为MySQL的一个分支,官网https://mariadb.com/最新版本10.2  MariaDB主要由SkySQL公司(现更名为MariaDB公司)维护,SkySQL公司由MySQL原作者带领大部分原班人马创立.  

Mariadb5.5版本对应MySQL的5.5,10.0对应MySQL5.6  

Community 社区版本,Enterprise 企业版,GA(Generally Available)指通用版本,在生产环境中用的,DMR(Development Milestone Release)开发里程碑发布版,RC(Release Candidate)发行候选版本,Beta开放测试版本,Alpha内部测试版本

 MySQL的几个常用安装包:rpm、源码、二进制免编译  

mysql二进制安装包基本操作流程:

cd /usr/local/src  #把包下到指定目录下
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz  
tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz   #解压
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql  #把解压的文件移动到我们指定目录并更名
cd /usr/local/mysql  
useradd mysql   #创建用户
mkdir /data/    #创建mysql数据文件存放目录
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql   #初始化
cp support-files/my-default.cnf  /etc/my.cnf   #拷贝Mysql默认配置文件
cp support-files/mysql.server /etc/init.d/mysqld   #拷贝mysql启动文件
vi /etc/init.d/mysqld  #定义basedir和datadir  
/etc/init.d/mysqld start   #启动

下载到指定目录:

9cdbf41744a4c4951f88c85a1cfe1577b89.jpg

解压:

1b9bb72e68bf720896efe355a7d2ea480e3.jpg

移动目录,创建mysql(我这里之前做过),创建/data/目录:

57f2893c3f1210515139dcc7c957102ca1c.jpg

初始化:

1ff363b089185eb1dc3c19240c7590ff6d9.jpg

1dde8da3d0a57cc31b1d0948b7aee5246e3.jpg

拷贝配置文件和启动脚本:

54c9c3965866d6d6ee941adb5faf1707f94.jpg

vim /etc/init.d/mysqld 编辑启动脚本:

f152851bcda66626372205bfd611827eba9.jpg

加入开机启动服务列表:

bcc820712016ff20c4bc7b1a94f3efca8fb.jpg

/etc/init.d/mysql start (servce mysqld start)启动服务:

7acea80fc99ea47d85ed948bc169d8c64f0.jpg

MariaDB安装

它的安装和mysql类似:

cd /usr/local/src 
wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb
cd /usr/local/mariadb
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb
cp support-files/my-small.cnf /usr/local/mariadb/my.cnf
vi /usr/local/mariadb/my.cnf  #定义basedir和datadir
cp support-files/mysql.server /etc/init.d/mariadb
vim /etc/init.d/mariadb  #定义basedir、datadir、conf以及启动参数
/etc/init.d/mariadb start

解压:

52ecc3d389676fdb6435e695657cc8e01f6.jpg

82be7f0490fd81a1a2f8fa0d02b2bed8af7.jpg

移动解压文件→初始化:

8137e72a58c3fcd82399760ce5626e310c5.jpg

拷贝配置文件和启动脚本:

cb1b4a75b2d1ce78891467ea0205c4dc9eb.jpg

vim /usr/local/mariadb/my.cnf  编辑配置文件:

1c677e8ce4b9e8cf55cfad0a3eb1531c6f4.jpg

vim /etc/init.d/mariadb 编辑启动脚本:

5cc449ef1648df37a45228563c74682d912.jpg

启动:

bf1afd11e47f6a766a0f77cbd465fc92caa.jpg

53c7ead93aa867b9bb3f89c1cce79b13b4a.jpg

注:这里因为装了mysql又来装mariadb,所有为了不冲突安装路径自己改了哈,如果只是mariadb的话路径都和mysql一样。

安装Apache

Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache  

Apache官网www.apache.org  

wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.27.tar.gz  

wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.2.tar.gz  

wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.4.tar.gz  

apr和apr-util是一个通用的函数库,它让httpd可以不关心底层的操作系统平台,可以很方便地移植(从linux移植到windows)

apr安装:

cd /usr/local/src/apr-1.6.3
./configure --prefix=/usr/local/apr
make && make install

1794b38a302ff3cac694fd124ac9d6e9e52.jpg

d6e4db8a370ace77e0ad4db1d4bef6ef87b.jpg

a5a65762eff69ff1ce5a4eba4673c7e7470.jpg

注:这里由于我之前安装过,可能出现的有些会不一样,只需要最后检查一下就可以了,下面也是。

apr-util安装:

cd /usr/local/src/apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

d329f6f47f9ef35a39ad7187d38ff0017d0.jpg

3435afcb8b85f8df1bf4cb5552a4c6b7207.jpg

9490227dae663daa047bb049ae63ba352f9.jpg

89bbd79eed65e2022a2b6272e99fdd5c2d6.jpg

安装httpd:

这里有个包需要提前安装:

yum install -y prce-devel   注意看自己错误提示!

cd /usr/local/src/httpd-2.4.29
 ./configure \   #这里的反斜杠是脱义字符,加上它我们可以把一行命令写成多行
--prefix=/usr/local/apache2.4 \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--enable-so \
--enable-mods-shared=most
make && make install
ls /usr/local/apache2.4/modules
/usr/local/apache2.4/bin/httpd -M #查看加载的模块

编译:

22546ac1644d839b2c28790a7d8c3f39370.jpg

05d115e5d298e7bc06247e09b8ee1a89d3b.jpg

安装:

ceceb36569a1b583f193528655065b0b6e6.jpg

e72cd56be12c43085de5888f77078e720f7.jpg

Apache下面的模块:

701361a681f912f724c112860551632b17d.jpg

查看Apache安装的模块:

2e9985ab248d32275db5080d177039e4675.jpg

启动,检查:

16a70f3a9ca276f5be4097d3370e799f0f7.jpg

PHP5安装

PHP官网www.php.net
当前主流版本为5.6/7.1

 

环境配置:

rpm -ivh 'http://www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm'
yum install -y libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel libmcrypt-devel

cd /usr/local/src/ 
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
tar zxf php-5.6.30.tar.gz
cd php-5.6.30
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc  --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
make && make install
cp php.ini-production  /usr/local/php/etc/php.ini

编译:

a131b67c7923ea310cba3a671729c395e77.jpg

851c06a69de8b7be9faa54baf1d04ee6d28.jpg

安装:

0981f6d5cf735864a0643d1cbe41310d180.jpg

注:这里由于我之前安装过,所以没有什么错误,这里一般会缺少很多包!

查看加载的模块:

b5232e899239ced36c2388eb5c8aad52cb1.jpg

php以模块的形式存在于Apache中:

46d714a245140dc55f96dd6cfbfd7e31629.jpg

最后就是复制配置文件:

cp php.ini-production  /usr/local/php/etc/php.ini

PHP7安装

cd /usr/local/src/ 
wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
tar zxf php-7.1.6.tar.bz2
cd php-7.1.6
./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc  --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
make && make install
ls /usr/local/apache2.4/modules/libphp7.so
cp php.ini-production  /usr/local/php7/etc/php.ini

编译:

e97875cd11c71e3c64d0216e5de6801f920.jpg

d6386e53f4c7718f6fc292952dd3d1eeef4.jpg

安装:

72ca60d0cd921ed41cc2ffd53b5011e7836.jpg

8cd44cfe25d40b6fea8ddc357b23c6878f7.jpg

vim /usr/local/apache2.4/conf/httpd.conf

28d180bb4bc8b345202f9624cc2ab421b34.jpg

apache与php结合

流程:

httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
 vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方
ServerName  去掉前面的#号
Require all denied  修改为granted
AddType application/x-httpd-php .php  增加
DirectoryIndex index.html index.php   增加
 /usr/local/apache2.4/bin/apachectl -t //测试语法
 /usr/local/apache2.4/bin/apachectl start //启动服务
 netstat -lntp 
 curl localhost
 vim /usr/local/apache2.4/htodcs/1.php //增加如下内容
<?php
phpinfo();
?>
 curl localhost/1.php

 

ca82f424d8bda0d24ca58a489e17698b39a.jpg

a033586a8349bd92654f01b67807b68db27.jpg

fb1b57b5228e0ca2c0c88fba8ac9c16da71.jpg

这里由于我们装了2个php,所以需要先禁掉一个:

5def26c9be7a2761bf1cb4c5d572440704e.jpg

php5测试:

vim /usr/local/apache2.4/htdocs/1.php

8d38e27d413563b53c9e0eb02a2504d2ab4.jpg

80242689a9db1ed344cef36140b2dd2ed2b.jpg

php7测试:

3f8a9f60abf5351e012cfc30979093eddbc.jpg

刷新:

a653bb2e4f8f32939834b68b0bd0e3ea741.jpg

5c6f3b6d4ce38d63ae443c56ef0fe3af4c4.jpg

这里我们的php就算成功和apache结合了!

Apache默认虚拟主机

一台服务器可以访问多个网站,每个网站都是一个虚拟主机
 概念:域名(主机名)、DNS、解析域名、hosts
 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

配置:

vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost,去掉#
 vim /usr/local/apache2/conf/extra/httpd-vhosts.conf //改为如下
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

/usr/local/apache2/bin/apachectl –t
/usr/local/apache2/bin/apachectl graceful

f498c43da99a2d3d77b825b84463351cb7f.jpg

创建测试目录和文件:

[root@cc-01 ~]# mkdir /data/wwwroot/
[root@cc-01 ~]# mkdir /data/wwwroot/abc.com
[root@cc-01 ~]# mkdir /data/wwwroot/111.com
[root@cc-01 ~]# vim /data/wwwroot/abc.com/index.php

edabcd4e14f914ea5179e432683b2c794c2.jpg
[root@cc-01 ~]# vim /data/wwwroot/111.com/index.php

3ce312c9ca817c71b83477bfce6bc3fcb91.jpg

测试:

5f5547d04bbfb0267e23b2e584bd6d9313f.jpg

在本地机测试:

1.需要编辑本地机的host:

f3b5708f0c12f1116a3f618678e94c54f97.jpg

 

这样才能让网址指向我们的ip地址:

d38c2f088b8ced9fd9a1d924dce162beddc.jpg

浏览器测试:

aa7e69a48d6cf6412d048450d63fd80e2c4.jpg

deb7c569b50fa8e9fd89a3f3d754d6fc542.jpg

1af900fcb92ea15df49f626e83a62ea7355.jpg

410471bc33d79319081c485097e35df3abb.jpg

httpd的用户认证

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把111.com那个虚拟主机编辑成如下内容

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    <Directory /data/wwwroot/111.com> //指定认证的目录
        AllowOverride AuthConfig //这个相当于打开认证的开关
        AuthName "111.com user auth" //自定义认证的名字,作用不大
        AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过
        AuthUserFile /data/.htpasswd  //指定密码文件所在位置
        require valid-user //指定需要认证的用户为全部可用用户
    </Directory>
</VirtualHost>

79518920e9f3f6c9a726da6da43e1e35894.jpg

/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd cc

/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan

c4bc9dc9d3fa31d73cbc390e09e1969ef2e.jpg

重新加载配置-t , graceful

aa1f299a9e33f4fdbaafc04ad7649541c0b.jpg
 curl -x127.0.0.1:80 111.com //状态码为401

8fa96da7eed8e626f9c24bc4ceb83a63772.jpg
 curl -x127.0.0.1:80 -ucc:123456 111.com //状态码为200

c5cf0cdb970c2d9e36f843d3fafbb6ac910.jpg

浏览器测试:

96e815b9558a120e69f20295f8177121988.jpg13761f95168a60fa821086aeefcb0258ce2.jpg

8ce1d0e97f9c42092eff533585dd64d359f.jpg

还可以针对单个文件进行认证

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    <FilesMatch 123.php>
        AllowOverride AuthConfig
        AuthName "111.com user auth"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </FilesMatch>
</VirtualHost>

3f17491fe9af83708336d15848d62e6acb2.jpg

重新加载配置-t , graceful

7dba7d4dbb992fd6ca470c37742accf8d83.jpg

curl测试:

主页能够访问

09fe69586389c9ae10957e7d82bff7934b2.jpg

123.php出现401

b9bba9900221e0297a4a5fd20c3d335e250.jpg

输入用户名:密码 状态码为200,访问OK

470abb8a24ffc3aca93052a6e0a6f345b5d.jpg

浏览器测试:

访问主站:

3bd1679e2ff6bf92f50de1dffd5c1ff2277.jpg

访问123.php

02a0b25dddb5244f001144eb01c7b386ec7.jpg

 

输入用户名和密码:

0c54cee4ad4b27d020ce96a9ee348fc5d1a.jpg

7d11ea8b83e8dd032c46fce7dd64d25ed51.jpg

域名跳转(重定向)

需求,把2111.com.cn域名跳转到111.com,配置如下:

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    Servername 111.com
    ServerAlias www.example.com 2111.com.cn
    <IfModule mod_rewrite.c> //需要mod_rewrite模块支持
        RewriteEngine on  //打开rewrite功能
        RewriteCond %{HTTP_HOST} !^111.com$  //定义rewrite的条件,主机名(域名)不是www.123.com满足条件
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行 ,301永久重定向,302临时重定向,L表示last。
</IfModule>
</VirtualHost> 

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf  配置vhosts:

e696851ddc1a15e3ae6ee4252b5cc5ab425.jpg

 vim /usr/local/apache2.4/conf/httpd.conf  打开重定向模块:

13b74be95bb5ea7d414b9bd3571fd8b7d7d.jpg

检查,重启:

4fb3f45b97c66c2cc9b5b9e3fe663103faa.jpg

curl测试:

主站测试

1e5385a29d7a392734dcc5e9b886950d155.jpg

2111.com.cn测试

ab33633e9e1d143abbd52136d8add0c10a8.jpg

bccc0cd841a16f3f3cc1e7cd6ea3afc83bd.jpg

e4e1fb6f72477442904208fde6ec5bdbaf6.jpg

ab5603a6ab8cde106ee34a3f505908928aa.jpg

浏览器测试:

e5c144f12b1dcafe950945180c7f726a99f.jpg

d0abdb9493c8be66a7ba5322a146d2021df.jpg

Apache访问日志

访问日志记录用户的每一个请求
 vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat 

1bb31a7caf3f5773f6089773bcbc3fe03c3.jpg

User-Agent:用户代理   Referer:是第一次打开的页面网址

默认日志

0f96aa19c02890b6c35697189f07fdf081a.jpg
 把虚拟主机配置文件改成如下: 

deb4722bf3614f6c2c8cef48378929dd4f8.jpg

bcc05f25a70ec8fd4bdafcd5e421b0c3dca.jpg

检查,刷新,curl访问,页面访问:

3b4b57cd60b819b6b3f29c7bb0ce3fc58e2.jpg

然后查看日志:

951e93218a444a5d883c26d6435b2fc1223.jpg

测试2:

把我们的网址写入博客,在通过博客点进去

a9cbe354a3ebaaa5b21188b77c7c7d5d2b4.jpg

15b87860b9cfa0611c719ab70218208223c.jpg

273ac2c9c92496c9b0065787bb88b694219.jpg

然后查看日志:

从猿课我们能看到Referer成功了!

ec0f6dbae8150d7c5c36b876b37f048a022.jpg

访问日志不记录指定类型的文件

 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 
 把虚拟主机配置文件改成如下:

 <VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias 123.com
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img 
    CustomLog "logs/123.com-access_log" combined env=!img
</VirtualHost>

a47607db3cbcbf50de8935957f4b01793a9.jpg

 重新加载配置文件 -t, graceful
上传图片到111.com/ 目录下,并测试:

ddacb170d2a96d7f8bbb4a9345c7baba584.jpg

66cef28fa54297ddb361ff5740e62c50267.jpg
 tail /usr/local/apache2.4/logs/111.com-access_log 

如下图所示,我们的图片记录没有显示在日志里面:

访问志不记录指定类型的47b2e6e931be13c18fc04c15f0a4d5b4fcc.jpg

访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 
 把虚拟主机配置文件改成如下: 

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias 123.com
   SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img 
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>

520333eeb64a25261ae28ff6ff4cf786488.jpg 

注:86400 为一天时间,单位秒

重新加载配置文件 -t, graceful

测试-浏览器访问:

0c379db295befd5755c1be294854c7cee68.jpg
 ls /usr/local/apache2.4/logs   检查是否出现新的切割日志文件

9ade6d88783764567209ed1e02df6f30f2a.jpg

28387b31af70cb636804dd03e1b7c7c4b45.jpg

注:以后每天凌晨就会出现一个新的日志 (我们就可以做任务计划,把时间久远的日志删掉)

配置静态元素过期时间

9a6142b0cc40503f823537e183155cde7dc.jpg

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了,但是多了会增加我们的内存负荷,所以我们需要给它们定义过期时间,到了时间自动删除,这样就能节省我们的内存空间
配置如下:

<IfModule mod_expires.c>
    ExpiresActive on  //打开该功能的开关
    ExpiresByType image/gif  "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    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>

 需要在主配文件打开expires模块:

vim /usr/local/apache2.4/conf/httpd.conf

7db6f94b9482c7143b55cb3d8b3d1455e9a.jpg

be577c0df55ebea808bf26053b1fbde0ac8.jpg
浏览器测试:

ctrl+F5 强制刷新,清空缓存:

8fcb45d64aa1d396afb91f14cd5b9a98c1f.jpg
 

curl测试:

266b650f189345066c81204123705d6c644.jpg

配置防盗链

通过限制referer来实现防盗链的功能
配置文件增加如下内容:

   <Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://111.com" local_ref
        SetEnvIfNoCase Referer "http://aaa.com" local_ref
        SetEnvIfNoCase Referer "^$" local_ref
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>
    </Directory>

e23b0aedfa735fbed81fdd69e819f703929.jpg 

curl测试:

30d7c0c9884c1326517d2a2975b22070d10.jpg

浏览器测试:

067eb52cf76fed177cf02a459e21469a8ea.jpg

更改白名单测试:

5495c4c2b45b5da400dbab275556878e850.jpg

acb45f4606cf5817219f804f596fc132169.jpg

a9c56d9614031968b20b4f602d63464697f.jpg

测试孔referer:

03e65b11b2b7acce77f5b9f3b667bce2267.jpg

测试:

489e83ec1792adc72eee095413422c8cbf7.jpg

114a1111f78caac72c01257080504f57c9c.jpg

访问控制 – Directory

核心配置文件内容

 <Directory /data/wwwroot/111.com/admin/>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Directory>

648bba672fa48d6b905d91c3212f201849f.jpg

 curl测试状态码为403则被限制访问了:

4b1ea576628ef8fea39b1f3eb5ef803b834.jpg

访问控制 – FilesMatch

 核心配置文件内容

<Directory /data/wwwroot/111.com>
    <FilesMatch  "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

测试:

274042397fdd4287c7a0e8777c7bd6bdcc4.jpg

访问控制 – 禁止php解析

核心配置文件内容

   <Directory /data/wwwroot/www.123.com/upload>
        php_admin_flag engine off
    </Directory>

 curl测试时直接返回了php源代码,并未解析

dd74b93224b9f164171f5d99ba08ec0c2c3.jpg

进一步限制,不允许php访问:

b3771dca37819075ba1d0d8a7fa8177ec63.jpg

curl测试:

4ca55eb2342d548056484d53d8ad567e2a2.jpg

访问控制 – user_agent

user_agent可以理解为浏览器标识
 核心配置文件内容:

  <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>

测试:

 ada7a26877bc892d9d1072835feae39f6b6.jpg

curl -A "cc cc" 指定user_agent

3a3a65096973a63e3dcf7bebc9342f926e3.jpg

b630e88b0c250709b5947064e87612a2ca6.jpg

curl常用选项:-I显示http头文件信息 -x指定ip:port  -A指定user_agent(浏览器标识)

 

 

转载于:https://my.oschina.net/ccLlinux/blog/1868103

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值