第十一章 LAMP架构
11.1 LAMP架构介绍
Q:httpd和php为什么需要组合在一起,不能分开部署在不同的节点使用网络来进行数据协同吗?
A:因为我们使用的方式是,php作为httpd的一个模块存在的。 他们两者必须要在一起,才能实现效果。当然,如果你把php做成以fastcgi的形式,这样httpd可以在另外的机器上调用它,这样用就跟lnmp类似了。
11.2 MYSQL/Maria DB 介绍
环境搭建要搭建3编以上。
11.3 MYSQL 安装(上)
11.4 MYSQL 安装(中)
11.5 MYSQL 安装(下)
课程用到安装包地址:r.aminglinux.com 下载用到的包。
《 安装mysql》
1)进入下载目录,并下载包
cd /usr/local/src/ 约定以后所有的安装包都安装在这里
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
(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>
5)拷贝模板配置文件并修改名字和配置
cp support-files/my-default.cnf /etc/my.cnf 默认是放在这个下面的这个文件cnf
<rpm -qf /etc/my.cnf> 查看文件是由哪个安装的
6)拷贝启动脚本修改名字/修改地址和权限
cp support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld #修改basedir 和 datadir
chmod 755 /etc/init.d/mysqld
7)将mysql加入系统服务列表里开机启动
chkconfig --add mysqld
chkconfig --list 查看系统服务
也可以用命令启动服务
chkconfig mysqld on
service mysqld start 启动mysql
service mysqld stop 停掉mysql
ps aux | grep mysql 查看mysql进程
也可以用命令行启动
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &
指定配置文件 my.cnf的存放路径,并放到后台启动
没有 放到后台 ?????
killall mysqld 杀掉 mysql 会等待mysql数据写完才杀掉 不要用kill -9强制杀掉
实验时出错如下:
发现是 my.cnf 配置写成了 /etc/mysql
-------------------------------------------------------------------------------------
11.6 Maria DB 安装
《 安装maria DB》
1)进入下载目录,并下载包
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 (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 生成了
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
7)启动
ps aux | grep mysql 确保mysql进程没启动,他们监听的端口一样;
/etc/init.d/mariadb start 启动
如下有个错误 :--datadir= /data/mysql,,,因为配置文件没有配置,默认使用了mysql的,上面田间
vim /usr/local/mariadb/my.cnf 编辑配置文件
增加:datadir= /data/mariadb 指定datadir,若装了mysql不指定会影响 只在启动脚本里定义是不行的。
修改后重新启动 /etc/init.d/mariadb restart
11.6 Apache 安装(上)
《apache 安装》
apache 2.4版本和2.2版本所使用的apr和apr-util版本不一致,所有用手动编译apr和apr-util
1)下载下面3个包并解压
cd /usr/local/src/ 约定以后所有的安装包都安装在这里
wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.29.tar.gz
wget http://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz
wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.bz2
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
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
查看生成的目录
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 :支持大部分模块
出现了错误 如下:
看命令历史 以下错误
======================
./configure --prefix=/usr/local/apache2.4\
--with-apr=/usr/local/apr\
--with-apr-util=/usr/local/apr-util\
--enable-so\
--enable-mods-shared=most 这里 --之间没有空格 指令。
=======================
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 查看进程
11.10 安装 PHP5 (上)
11.11 安装 PHP5 (中)
《安装PHP5》
1) 下载并解压
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
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次出错:
yum list |grep libxml2 查相关yum包
yum install -y libxml2-devel.x86_64 一般装相关devel库
2次又出错:
yum install -y libjpeg-devel 安装
3次又出错:
yum install -y libpng-devel 安装
4次又出错:
mcrypt 在epel中, 若没装过可能需要先安装 yum install -y epel-release
yum list |grep -i mcrypt
yum install - libmcrypt-devel.x86_64
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
/usr/local/php/bin/php -m 查看加载了哪些模块
php 是作为apache的一个扩展模块存在的,不需启动
vim /usr/local/apache2.4/conf/httpd.conf apache的配置文件
11.13 安装 PHP7
1)下载并解压
wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
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 只能使能一个
11.14 Apache和php结合(上)
11.15 Apache和php结合(下)
配置httpd支持php:
vim /usr/local/apache2.4/conf/httpd.conf 需要修改4处找到:
1)ServerName 将注释取消掉,没有了上面那个没有定义Servername的警告提示了
/usr/local/apache2.4/bin/apachectl restart 重新启动
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已启动
windows 里输入telnet 192.168.188.128 80 ,通了 ctrl +] 退出,,然后输入quit 退出telnet
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 重新加载配置文件
4)增加php的支持---解析php
找到:
AddType application/x-gzip .gz .tgz
在该行下面添加:
AddType application/x-httpd-php .php
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
若 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
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
修改为如下:
最上面那个为默认虚拟主机,当发现没有配置时会访问最上面那个。
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, 会访问到外网
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
当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 用户认证
打开网站时只有输入用户名字和密码才能进入,比方说 管理员登陆,
一 域名认证
1)修改虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
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
只增加用户和密码
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
4)
在windows下hosts里增加111.com
192.168.188.128 www.abc.com www.123.com 111.com
输入用户和密码后正常访问
二 对某个文件的访问设置验证
1)修改虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<FilesMatch 123.php >
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
11.19 域名跳转(上)
11.20 域名跳转(下)
状态码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 ^/(.)$ http://111.com/$1 [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
再查一下是否加载了模块,可以看到又了模块:
/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
在浏览器中输入 www.example.com/123.php ,显示的时111.com/123.php
11.21 apache 访问日志
•访问日志记录用户的每一个请求
ls /usr/local/apache2.4/logs/ 日志目录
《定义日志记录格式》
(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
11.22 访问日志不记录静态文本
(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
(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
adsfafa.jpg1记录了,但是adsfafa.jpg没有记录
11.23 访问日志切割
(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/ 访问日志目录
11.24 配置静态元素过期时间
(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>
(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
再查一下是否加载了模块,可以看到又了模块:
/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
11.25 配置防盗链
(1)修改虚拟主机配置文件,更改配置定义白名单和内容
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com>
SetEnvIfNoCase Referer "http://111.com" local_ref
SetEnvIfNoCase Referer "http://111.com" 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
(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
11.27 访问控制-FilesMatch
(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>
(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
(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 'http://111.com/upload/123.php'
11.29 限定user_agent
(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>
(2)检查 更新
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
(3)测试
curl -x127.0.0.1:80 'http://111.com/123.php'
curl -A "aminglinux aminglinux" -x127.0.0.1:80 'http://111.com/123.php' -A 指定useragent
ls /usr/local/apache2.4/logs/ 访问日志目录
cat /usr/local/apache2.4/logs/111.com-access_20180307.log 查看日志 curl被限制,而模拟的没有
11.30 PHP相关配置(上)
11.31 PHP相关配置 (下)
方法一: 查看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 , 没有配置文件
(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
刷新浏览器,已经有了配置文件
(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
刷新浏览器,提示phpinfo函数被禁止了
(5)日志相关
error_log, log_errors, display_errors, error_reporting php的错误日志
----display_errors 显示错误
修改为off,报错时不提示,,变成了白页什么都不显示,但是不太好。
---- 错误日志目录
error_log=/tmp/php_errors.log #定义错误输出路径 还需要定义级别
------error_reporting 定义级别
error_reporting =E_ALL & ~E_NOTIC (生产中常用,)
curl -A "aaa" -x127.0.0.1:80 http://111.com/index.php
-----open_basedir 安全选项 A站点被黑,B站点不会被黑
open_basedir =/data/wwwroot/111.com:/tmp/ 有权限的站点目录
比如允许设为如下:
测试如下 不能打开
浏览器也不能打开
----虚拟主机配置文件,不同的主机配置不同的站点目录,把php限定在指定 目录下,不让其它目录读写文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
其中一个虚拟主机增加
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"
另一个虚拟主机增加
php_admin_value open_basedir "/data/wwwroot/abc.com:/tmp/"
(最后将禁止的phpinfo()函数取消掉,以后实验方便用)
11.32 PHP 动态模块安装
1)《PHP动态扩展模块安装》
/usr/local/php7/bin/php -m //查看模块
下面安装一个redis的模块
cd /usr/local/src/
wget https://codeload.github.com/phpredis/phpredis/zip/develop
mv develop phpredis-develop.zip // 改名字
unzip phpredis-develop.zip //解压
cd phpredis-develop
/usr/local/php7/bin/phpize //生成configure文件
yum install -y autoconf 安装包
/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/ 我们要的模块
/usr/local/php7/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
vim /usr/local/php7/etc/php.ini //增加一行配置(可以放到文件最后一行)
extension = redis.so
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/
/usr/local/php7/bin/php -m |grep zip 已经安装了zip模块
转载于:https://blog.51cto.com/iammalt/2073387