11.1 LAMP架构介绍

第十一章 LAMP架构
Q:httpd和php为什么需要组合在一起,不能分开部署在不同的节点使用网络来进行数据协同吗?
A:因为我们使用的方式是,php作为httpd的一个模块存在的。 他们两者必须要在一起,才能实现效果。当然,如果你把php做成以fastcgi的形式,这样httpd可以在另外的机器上调用它,这样用就跟lnmp类似了。 


11.2 MYSQL/Maria DB 介绍

环境搭建要搭建3编以上。

第十一章 LAMP架构


11.3 MYSQL 安装(上)

11.4 MYSQL 安装(中)
11.5 MYSQL 安装(下)
课程用到安装包地址:r.aminglinux.com 下载用到的包。

《 安装mysql》

1)进入下载目录,并下载包
cd /usr/local/src/  约定以后所有的安装包都安装在这里
wget  
(64位二进制免编译包)。
2)解压,并挪动修改目录名字
tar zxvf /usr/local/src/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 
mv mysql-5.6.36-linux-glibc2.5-x86_64  /usr/local/mysql 
3) 进入解压后的目录创建用户和存放数据的目录 
cd /usr/local/mysql 
useradd -s /sbin/nologin mysql 
mkdir -p /data/mysql 
4)初始化安装一下
chown -R mysql:mysql  /data/mysql 
chowd -R 755  /usr/local/mysql/data
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 
echo $? 查安装对不
缺少一个dumper的模块,由关键字搜索相关包,实际上如图,安装。
<yum list |grep perl |grep -i dumper>

第十一章 LAMP架构

5)拷贝模板配置文件并修改名字和配置
cp support-files/my-default.cnf  /etc/my.cnf  默认是放在这个下面的这个文件cnf

第十一章 LAMP架构

 
  查看文件是由哪个安装的

第十一章 LAMP架构

6)拷贝启动脚本修改名字/修改地址和权限

cp support-files/mysql.server  /etc/init.d/mysqld
vim /etc/init.d/mysqld   #修改basedir 和 datadir
chmod 755 /etc/init.d/mysqld 

第十一章 LAMP架构

7)将mysql加入系统服务列表里开机启动
chkconfig --add mysqld 
chkconfig --list 查看系统服务

第十一章 LAMP架构

也可以用命令启动服务

chkconfig mysqld on  
service mysqld start 启动mysql
service mysqld stop 停掉mysql
ps aux | grep mysql 查看mysql进程

第十一章 LAMP架构

也可以用命令行启动

/usr/local/mysql/bin/mysqld_safe  --defaults-file=/etc/my.cnf --user=mysql  --datadir=/data/mysql & 

指定配置文件 my.cnf的存放路径,并放到后台启动

第十一章 LAMP架构

没有 放到后台 ?????

killall mysqld 杀掉 mysql 会等待mysql数据写完才杀掉 不要用kill -9强制杀掉
第十一章 LAMP架构

实验时出错如下:

第十一章 LAMP架构

 发现是  my.cnf  配置写成了  /etc/mysql

第十一章 LAMP架构

 -------------------------------------------------------------------------------------

11.6 Maria DB 安装

《 安装maria DB》

1)进入下载目录,并下载包
cd /usr/local/src/  约定以后所有的安装包都安装在这里
wget   (64位二进制免编译包)。
2)解压,并挪动修改目录名字
tar zxvf /usr/local/src/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 
mv mariadb-10.2.6-linux-glibc_214-x86_64  /usr/local/mariadb
3) 进入解压后的目录创建用户和存放数据的目录 
cd /usr/local/mariadb
4) 同样使用mysql用户,并用初始化创建 /data/mariadb文件
./scripts/mysql_install_db --user=mysql --datadir=/data/mariadb
确认/data/mariadb 生成了

第十一章 LAMP架构

5)拷贝模板配置文件并修改名字和配置

ls -l /usr/local/mariadb/support-files 查看配置文件模板存放处,有很多个缓存大小不同的配置文件
cp support-files/my-small.cnf  /usr/local/mariadb/my.cnf  放在另外一处防止与mysql冲突
vim /usr/local/mariadb/my.cnf  编辑配置文件 暂不修改
6)拷贝模板启动脚本
cp support-files/mysql.server  /etc/init.d/mariadb

vim  /etc/init.d/mariadb

更改如下:
basedir=/usr/local/mariadb
datadir=/data/mariadb
conf=$basedir/my.cnf

第十一章 LAMP架构

7)启动

ps aux | grep mysql 确保mysql进程没启动,他们监听的端口一样;
/etc/init.d/mariadb start 启动

如下有个错误 :--datadir= /data/mysql,,,因为配置文件没有配置,默认使用了mysql的,上面田间

第十一章 LAMP架构

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

增加:datadir= /data/mariadb 指定datadir,若装了mysql不指定会影响 只在启动脚本里定义是不行的。

第十一章 LAMP架构

修改后重新启动 /etc/init.d/mariadb restart

第十一章 LAMP架构


11.6 Apache 安装(上)

《apache 安装》

apache 2.4版本和2.2版本所使用的apr和apr-util版本不一致,所有用手动编译apr和apr-util
1)下载下面3个包并解压
cd /usr/local/src/  约定以后所有的安装包都安装在这里
wget   
wget   
wget    
tar zvxf httpd-2.4.29.tar.gz  
tar zvxf apr-1.6.3.tar.gz
tar jxvf apr-util-1.6.1.tar.bz2

缺少bzip2包

yum install -y bzip2

第十一章 LAMP架构

2) 安装apr --- 安装apr-util 

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

cd /usr/local/src/apr-util-1.6.1 

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 
make && make install 
查看生成的目录

第十一章 LAMP架构

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 

--enable-so:支持动态扩展模块

--enable-mods-shared=most  :支持大部分模块

yum install -y zlib*

然后再进入/usr/local/httpd-2.4.3这个目录执行下面的语句:

./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --with-pcre=/usr/local/pcre/bin/pcre-config --with-zlib-1.2.3=/usr/local/zlib-1.2.3 --enable-so

出现了错误 如下:

第十一章 LAMP架构

看命令历史 以下错误

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

./configure --prefix=/usr/local/apache2.4\
--with-apr=/usr/local/apr\
--with-apr-util=/usr/local/apr-util\
--enable-so\
--enable-mods-shared=most   这里 --之间没有空格 指令。

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

第十一章 LAMP架构

yum list |grep pcre 查相关包

yum install -y pcre-devel.x86_64 安装pcre库包
cd /usr/local/apache2.4 进入安装好的apache2.4
/usr/local/apache2.4/bin/apachectl -M 查看加载了哪些模块
/usr/local/apache2.4/bin/apachectl start 启动
ps aux |grep httpd 查看进程

第十一章 LAMP架构

11.10 安装 PHP5 (上)

11.11 安装 PHP5 (中)

《安装PHP5》

1) 下载并解压
cd /usr/local/src/  约定以后所有的安装包都安装在这里
wget 
tar zxf php-5.6.30.tar.gz
cd php-5.6.30 
2)编译
./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-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   --disable-ipv6 

make && make install 

cp php.ini-production /usr/local/php/etc/php.int 配置文件
/usr/local/php/etc/php.int -i |less 查看php的信息

编译中需要安装多个yum包

1次出错:

第十一章 LAMP架构

yum list |grep libxml2 查相关yum包

yum install -y libxml2-devel.x86_64 一般装相关devel库
2次又出错:

第十一章 LAMP架构

yum install -y libjpeg-devel 安装

3次又出错:

第十一章 LAMP架构

yum install -y libpng-devel 安装

4次又出错:

第十一章 LAMP架构

mcrypt 在epel中, 若没装过可能需要先安装 yum install -y epel-release 

yum list |grep -i mcrypt
yum install - libmcrypt-devel.x86_64

第十一章 LAMP架构


11.12 安装 PHP5 (下)

ls /usr/local/php/
ls /usr/local/php/bin 核心二进制文件
du -sh /usr/local/php/bin/php
du -sh /usr/local/apache2.4/modules/libphp5.so

第十一章 LAMP架构

/usr/local/php/bin/php -m 查看加载了哪些模块

第十一章 LAMP架构

php 是作为apache的一个扩展模块存在的,不需启动

vim /usr/local/apache2.4/conf/httpd.conf apache的配置文件

第十一章 LAMP架构


11.13 安装 PHP7

1)下载并解压

wget 
tar jxvf php-7.1.6.tar.bz2

cd php-7.1.6

2)编译 不同处
./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 

同一台机器上可以安装两个php还是要指定好,只能使能一个

du -sh /usr/local/apache2.4/modules/libphp7.so 加载的模块

vim /usr/local/apache2.4/conf/httpd.conf 修改配置文件注释掉php5或php7 只能使能一个

第十一章 LAMP架构


11.14 Apache和php结合(上)

11.15 Apache和php结合(下)

配置httpd支持php:

vim /usr/local/apache2.4/conf/httpd.conf 需要修改4处找到:
1)ServerName 将注释取消掉,没有了上面那个没有定义Servername的警告提示了

第十一章 LAMP架构

/usr/local/apache2.4/bin/apachectl restart 重新启动

第十一章 LAMP架构

2)增加一行规则配置,否则不能访问自己IP192.168.188.128
打开windows上的telnet的客户端:windows ---个性化--主页--应用--程序和功能--启用或关闭windows功能--打开 Telnet 客户端--确定,,,否则不能使用telnet命令。
iptables -nvL 看不到80端口,未打开
iptables -I INPUT -p tcp --dport 80 -j ACCEPT 增加一条规则 打开80端口防火墙
It works !实际上是访问了 ls /usr/local/apache2.4/htdocs/ 下的index.html
ps aux |grep httpd 确保apche已启动

第十一章 LAMP架构

windows 里输入telnet 192.168.188.128 80 ,通了 ctrl +] 退出,,然后输入quit 退出telnet

第十一章 LAMP架构

3) 有时候浏览器会出现403,修改

vim /usr/local/apache2.4/conf/httpd.conf 找到:
更改为 Require all granted 保存退出
/usr/local/apache2.4/bin/apachectl -t 检查配置文件语法是否正确 (重要)
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置文件

第十一章 LAMP架构

4)增加php的支持---解析php
找到:
AddType application/x-gzip .gz .tgz
在该行下面添加:
AddType application/x-httpd-php .php

第十一章 LAMP架构

5)增加索引页, 打开网址不用输入 index.php

找到:
DirectoryIndex index.html
将该行改为:
DirectoryIndex index.html index.htm index.php

    ![](https://s1.51cto.com/images/blog/201803/04/e13088a11644134aad43af375c0fd467.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

6)测试解析php

vim /usr/local/apache2.4/htdocs/1.php
写入:
<?php
echo "php解析正常";
phpinfo();
?>
保存后,继续测试:
curl localhost/1.php

第十一章 LAMP架构

第十一章 LAMP架构

若 php不能解析会显示 源代码。

1.必须加载了php5的模块文件,

2.配置文件必须加载php5模块,
3.配置文件需加载AddType application/x-httpd-php .php 注意 .前面有个空格
4.配置文件需加载 DirectoryIndex index.html index.htm index.php


11.16 Apache默认虚拟主机(上)

查看windows上的hosts文件,,,修改将hosts里ip和域名指定起来

C:\Windows\System32\drivers\etc
更改一下 hosts的权限,用记事本打开编辑 增加 192.168.188.128 www.abc.com www.123.com

第十一章 LAMP架构

第十一章 LAMP架构

1)增加虚拟主机 

vim /usr/local/apache2.4/conf/httpd.conf 找到:取消注释

Virtual hosts 虚拟主机

Include conf/extra/httpd-vhosts.conf

2)修改虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
修改为如下:
最上面那个为默认虚拟主机,当发现没有配置时会访问最上面那个。

第十一章 LAMP架构

3)创建对应目录 及php文件
mkdir /data/wwwroot/
mkdir /data/wwwroot/abc.com
vim /data/wwwroot/abc.com/index.php
增加
<?php
echo"abc.com";
?>
mkdir /data/wwwroot/111.com
vim /data/wwwroot/111.com/index.php
增加
<?php
echo"111.com";
?>

11.17 Apache默认虚拟主机(下)

curl 命令:
curl -x
ping www.abc.com 没有绑定hosts, 会访问到外网

第十一章 LAMP架构

curl -x192.168.188.128:80 www.123.com

curl -x192.168.188.128:80 www.abc.com
curl -x192.168.188.128:80 asdfag
curl -x192.168.188.128:80 www.example.com
curl -x192.168.188.128:80 111.com

第十一章 LAMP架构

当curl访问时,会查虚拟主机配置文件,若有定义则访问虚拟主机的定义,若没有定义都会访问默认的虚拟主机配置域名。

方法1,编辑hosts文件,绑定一下

vi /etc/hosts 
方法2, curl -x192.168.188.128:80 abc.com 
只要解析到域名都访问到默认虚拟主机
结论:
1.打开虚拟主机配置文件后,虚拟主机生效,主配置文件里配置的DocumentRoot和ServerName失效;
2.虚拟主机配置文件打开后,里面可以配置很多个Virtual hosts ,每一个Virtual hosts 都有对应的DocumentRoot和ServerName,第一个为默认的虚拟主机,无论任何访问解析到这个IP上都会访问默认虚拟主机。


11.18 Apache 用户认证

打开网站时只有输入用户名字和密码才能进入,比方说 管理员登陆,

第十一章 LAMP架构

一 域名认证

1)修改虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

第十一章 LAMP架构

2)

/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming
用md5类型加密创建密码文件,并创建用户aming,输入密码 123456
/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan
只增加用户和密码

第十一章 LAMP架构

3)检查无误并重新加载

/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
curl -x127.0.0.1:80 111.com
curl -x127.0.0.1:80 -uaming:123456 111.com -I

第十一章 LAMP架构

4)

在windows下hosts里增加111.com
192.168.188.128 www.abc.com www.123.com 111.com
输入用户和密码后正常访问

第十一章 LAMP架构

二 对某个文件的访问设置验证

1)修改虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<FilesMatch 123.php >

第十一章 LAMP架构

2)重新加载,并增加123.php文件

/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
vim /data/wwwroot/111.com/123.php
编辑并增加:
<?php
echo"123.php";
?>
3)测试访问
curl -x127.0.0.1:80 111.com
curl -x127.0.0.1:80 111.com/123.php -I
curl -x127.0.0.1:80 -uaming:123456 111.com/123.php -I

第十一章 LAMP架构


11.19 域名跳转(上)

11.20 域名跳转(下)

第十一章 LAMP架构

状态码301-- 永久重定向

1)修改虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
增加如下:
<VirtualHost :80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName111.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
        RewriteEngine on 
        RewriteCond %{HTTP_HOST} !^111.com$  
        RewriteRule ^/(.
)$  [R=301,L] 
</IfModule>
</VirtualHost>
以111.com开头和结尾的

2)windows下hosts增加 www.example.com

192.168.188.128 www.abc.com www.123.com 111.com www.example.com
3)查apache是否加载了 rewrite模块,并加装
/usr/local/apache2.4/bin/apachectl -M |grep rewrite 查一下是否有rewrite模块,
vim /usr/local/apache2.4/conf/httpd.conf
编辑配置文件,修改将注释取消:
LoadModule rewrite_module modules/mod_rewrite.so

第十一章 LAMP架构

再查一下是否加载了模块,可以看到又了模块:
/usr/local/apache2.4/bin/apachectl -M |grep rewrite
/usr/local/apache2.4/bin/apachectl graceful
4)测试:
curl -x127.0.0.1:80 www.example.com/123.php -I
www.example.com/123.php 跳转到了 111.com

第十一章 LAMP架构

在浏览器中输入 www.example.com/123.php ,显示的时111.com/123.php

第十一章 LAMP架构

11.21 apache 访问日志

•访问日志记录用户的每一个请求
ls /usr/local/apache2.4/logs/ 日志目录

第十一章 LAMP架构

《定义日志记录格式》

(1)查看格式
vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common 默认的
(2)修改虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
修改:
    CustomLog "logs/111.com-access_log" combined
(3) 重新加载配置文件 -t,graceful
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
(4)测试访问
curl -x127.0.0.1:80 -I 123.com
tail /usr/local/apache2.4/logs/111.com-access_log
用浏览器访问一次 www.example.com/123.php :
tail /usr/local/apache2.4/logs/111.com-access_log

第十一章 LAMP架构


11.22 访问日志不记录静态文本

第十一章 LAMP架构

 (1)修改虚拟主机配置文件,添加定义的环境,符合条件的不记录日志。
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
   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/111.com-access_log" combined env=!img

第十一章 LAMP架构

 (2)检查,重新加载 配置文件,访问并查看日志

/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
curl -x127.0.0.1:80 -I 111.com/adsfafa.jpg1
tail /usr/local/apache2.4/logs/111.com-access_log
curl -x127.0.0.1:80 -I 111.com/adsfafa.jpg

第十一章 LAMP架构

adsfafa.jpg1记录了,但是adsfafa.jpg没有记录

11.23 访问日志切割

第十一章 LAMP架构

(1)修改虚拟主机配置文件,更改配置,日志按日期归档。
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img 指定工具,按日期命名记录,记录间隔是一天即86400秒
(2)访问一下,查看日志
curl -x127.0.0.1:80 -I 111.com/123.php
ls /usr/local/apache2.4/logs/ 访问日志目录

第十一章 LAMP架构


11.24 配置静态元素过期时间

第十一章 LAMP架构

(1)修改虚拟主机配置文件,更改配置,增加图片访问后多久失效

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<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>

第十一章 LAMP架构

(2) 查expires是否加载了 expires模块,并加装

/usr/local/apache2.4/bin/apachectl -M |grep expires
vim /usr/local/apache2.4/conf/httpd.conf
编辑配置文件,修改将注释取消:
LoadModule rewrite_module modules/mod_expires.so

第十一章 LAMP架构

再查一下是否加载了模块,可以看到又了模块:

/usr/local/apache2.4/bin/apachectl -M |grep expires查一下是否有expires模块,
/usr/local/apache2.4/bin/apachectl graceful
3)测试:
在cd /data/wwwroot/111.com/ 下传入一个png文件,访问一下
curl -x127.0.0.1:80 111.com/xshell.png -I

第十一章 LAMP架构


11.25 配置防盗链

第十一章 LAMP架构

(1)修改虚拟主机配置文件,更改配置定义白名单和内容

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "" local_ref
        SetEnvIfNoCase Referer "" local_ref #白名单站点
        SetEnvIfNoCase Referer "^$" local_ref #不是跳转过来的为空,空refer可以访问
        <filesmatch ".(txt|doc|mp3|zip|rar|jpg|gif)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>
    </Directory>
 (2)检查,重新加载 
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful 
(3)
curl -x127.0.0.1:80 -I 111.com/xshell.png


11.26 访问控制-Directory

第十一章 LAMP架构

(1)修改虚拟主机配置文件,增加配置,只有内部人可以访问,其它一律拒绝
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<Directory /data/wwwroot/111.com/admin/>
        Order deny,allow #顺序,先拒绝再允许
        Deny from all 
        Allow from 127.0.0.1
</Directory>
(2)检查 更新
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful 
(3)测试
curl -x127.0.0.1:80 -I 111.com/admin/index.php 
curl -x192.168.188.128:80 -I 111.com/admin/index.php

第十一章 LAMP架构

11.27 访问控制-FilesMatch

第十一章 LAMP架构

(1)修改虚拟主机配置文件,增加配置

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<Directory /data/wwwroot/111.com>
    <FilesMatch  "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

第十一章 LAMP架构

(2)检查 更新

/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful 
(3) 
mkdir admin
cp index.php admin/
curl -x127.0.0.1:80 -I 111.com/admin/index.php 
curl -x192.168.188.128:80 -I '111.com/admin.php?sadfaskgnaglnaiogiw' -I


11.28 限定某个目标禁止解析php

第十一章 LAMP架构

(1)修改虚拟主机配置文件,增加配置updata目录蹦解析php

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<Directory /data/wwwroot/111.com/upload> #updata目录蹦解析php
  php_admin_flag engine off
</Directory>
(2)检查 更新
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful 
(3)
mkdir upload
cp 123.php upload/
curl -x127.0.0.1:80 ''

第十一章 LAMP架构


11.29 限定user_agent

第十一章 LAMP架构

(1)修改虚拟主机配置文件,增加配置
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
   <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .curl. [NC,OR] #OR或者,NC忽略大小写
        RewriteCond %{HTTP_USER_AGENT}  .baidu.com. [NC] #
        RewriteRule  .*  -  [F] #Forbidden 拒绝403
    </IfModule>

第十一章 LAMP架构

    (2)检查 更新

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful 
(3)测试
curl -x127.0.0.1:80 '' 
curl -A "aminglinux aminglinux" -x127.0.0.1:80 '' -A 指定useragent

第十一章 LAMP架构

ls /usr/local/apache2.4/logs/ 访问日志目录
cat /usr/local/apache2.4/logs/111.com-access_20180307.log 查看日志 curl被限制,而模拟的没有

第十一章 LAMP架构


11.30 PHP相关配置(上)

11.31 PHP相关配置 (下)

第十一章 LAMP架构

方法一: 查看php配置文件位置(有时候不准)

/usr/local/php/bin/php -i|grep -i "loaded configuration file"

方法二:web查看

(1)新建一个php文件,编辑一个php文件,
cd /data/wwwroot/111.com/
vim index.php
增加 
<?php
phpinfo();
?>
浏览器打开 111.com/index.php , 没有配置文件

第十一章 LAMP架构

(2)进入源码包目录,拷贝一份配置文件 ,并刷新配置

cp /usr/local/src/php-7.1.6/php.ini-development /usr/local/php7/etc/php.ini
/usr/local/apache2.4/bin/apachectl graceful 
刷新浏览器,已经有了配置文件

第十一章 LAMP架构

(3)定义时区

vim /usr/local/php7/etc/php.ini 编辑配置文件
找到并增加 date.timezone=Asia/Shanghai

(4)增加限制安全函数

vim /usr/local/php7/etc/php.ini 编辑配置文件
找到并增加如下代码,保存并更新配置
disable_functions= 
eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo

/usr/local/apache2.4/bin/apachectl graceful 

第十一章 LAMP架构

刷新浏览器,提示phpinfo函数被禁止了

第十一章 LAMP架构

(5)日志相关

error_log, log_errors, display_errors, error_reporting php的错误日志

----display_errors 显示错误

第十一章 LAMP架构

修改为off,报错时不提示,,变成了白页什么都不显示,但是不太好。

---- 错误日志目录
error_log=/tmp/php_errors.log #定义错误输出路径 还需要定义级别

第十一章 LAMP架构

------error_reporting 定义级别

error_reporting =E_ALL & ~E_NOTIC (生产中常用,)

第十一章 LAMP架构

curl -A "aaa" -x127.0.0.1:80 

第十一章 LAMP架构

-----open_basedir 安全选项 A站点被黑,B站点不会被黑 

open_basedir =/data/wwwroot/111.com:/tmp/ 有权限的站点目录

比如允许设为如下:

第十一章 LAMP架构

测试如下 不能打开

第十一章 LAMP架构

浏览器也不能打开

第十一章 LAMP架构

----虚拟主机配置文件,不同的主机配置不同的站点目录,把php限定在指定 目录下,不让其它目录读写文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
其中一个虚拟主机增加
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

第十一章 LAMP架构

另一个虚拟主机增加
php_admin_value open_basedir "/data/wwwroot/abc.com:/tmp/"

第十一章 LAMP架构

(最后将禁止的phpinfo()函数取消掉,以后实验方便用)


11.32 PHP 动态模块安装

第十一章 LAMP架构

1)《PHP动态扩展模块安装》

/usr/local/php7/bin/php -m //查看模块
下面安装一个redis的模块
cd /usr/local/src/
wget 
mv develop phpredis-develop.zip // 改名字
unzip phpredis-develop.zip //解压
cd phpredis-develop
/usr/local/php7/bin/phpize //生成configure文件

第十一章 LAMP架构

yum install -y autoconf 安装包

/usr/local/php7/bin/phpize 在生成
./configure --with-php-config=/usr/local/php7/bin/php-config
make && make install

第十一章 LAMP架构

ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/ 我们要的模块

/usr/local/php7/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
vim /usr/local/php7/etc/php.ini  //增加一行配置(可以放到文件最后一行)
extension = redis.so 

第十一章 LAMP架构

2)从源码包里有的包安装源码包

cd /usr/local/src/php-7.1.6/ext/ 进入php7源码包ext下,中含有很多的模块
/usr/local/php7/bin/php -m |grep zip 查看发现没有安装zip模块
cd zip/ 进入目录 执行后编译,即可直接安装一个源码包
/usr/local/php7/bin/phpize 
./configure --with-php-config=/usr/local/php7/bin/php-config
make && make install
ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/

第十一章 LAMP架构

/usr/local/php7/bin/php -m |grep zip 已经安装了zip模块