LAMP环境搭建与配置

  • 安装LAMP,基础配置解析PHP

1. 安装MySQL
(1)下载mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
#cd /usr/local/src //软件包都放在这里,方便管理
下载源码包:mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
#wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz //在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)
(2)解压
#tar zxf //解压源码包
(3)安装配置
#useradd -s /sbin/nologin mysql //建立MySQL用户
#mkdir -p /data/mysql //创建data文件,MySQL文件在其中
#chown -R mysql:mysql /data/mysql //更改权限
#[ -d /usr/local/mysql ] && mv /usr/local/mysql /usr/local/mysql_old // 有&&命令时,前面命令 执行后面命令才会执行
#mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql_old
#cd /usr/local/mysql
#./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
//–user表示定义数据库的以哪个用户的身份运行
//–datadir表示定义数据库的安装目录
#yum install -y perl perl-devel autoconf //如果出现报错,需要安装软件包
#cp support-files/my-default.cnf /etc/my.cnf
#vi /etc/my.cnf //修改配置文件

#These are commonly set ,remove the #and set as required basedir = /usr/local/mysql //basedir表示MySQL包所在路径 datadir = /data/mysql/ //表示定义存放数据的位置 port = 3306 //port表示定义MySQL服务监听的端口号 server_id = 130 //表示该MySQL服务的ID号 socket = /tmp/mysql.sock //定义MySQL服务监听的套接字地址

#cp support-files/mysql.server /etc/init.d/mysql //复制启动脚本文件
#chmod 755 /etc/init.d/mysql
//修改启动脚本文件的属性
#vi /etc/init.d/mysql
basedir=/usr/local/mysql
datadir=/data/mysql
//修改启动脚本,定义basedir和datadir
#chkconfig --add mysql
//把mysql服务加到系统服务列表中
#chkconfig mysql on
//开机就启动
#service mysql start
//启动服务
(4)安装成功
#ps -ef |grep mysqld
#yum install net-tools
#netstat -ltunp |grep 3306
LAMP环境搭建与配置

2. 安装Apache
(1)下载httpd-2.4.46.tar.gz、apr-1.6.5.tar和apr-util-1.6.1.tar

cd /usr/local/src/

#wget https://mirrors.cnnic.cn/apache/httpd/httpd-2.4.46.tar.gz
#wget http://mirrors.hust.edu.cn/apache/apr/apr-1.6.5.tar.gz
#wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
(2)解压
#tar -zxvf httpd-2.4.46.tar.gz
#tar -zxvf apr-1.6.5.tar
#tar -zxvf apr-util-1.6.1.tar
(3)安装和配置
#cd /usr/local/src/apr-1.6.5
#./configure --prefix=/usr/local/apr
如果报错“configure: error: no acceptable C compiler found in $PATH”,则安装软件包 #yum install -y gcc 如果报错“rm: cannot remove 'libtoolT': No such file or directory” #vi configure 将RM='$RM'改为RM='$RM -f'

再次执行
#./configure --prefix=/usr/local/apr
继续编译
#make &&make install
#cd /usr/local/src/apr-util-1.6.1.
#yum install expat-devel
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#make &&make install
继续操作
#cd /usr/local/src/httpd-2.4.46
#yum install -y pcre pcre-devel//为避免配置时出错提前安装库文件
#./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
//–perefix指定安装目录
//–enable-so表示启用DSO
//–enable -mods- shared表示以共享形式安装模块
#make && make install
如果报错“collect2: error: ld returned 1 exit status make[2]: *** [htpasswd] Error 1” 解决方案: #cd /usr/local/src/ #cp -r apr-1.6.5 /usr/local/src/httpd-2.4.46/srclib/apr #cp -r apr-util-1.6.1 /usr/local/src/httpd-2.4.46/srclib/apr-util 如果还是不行,重新执行configure命令,添加一个编译参数:--with-included-apr
再执行
#make && make install
继续操作
#/usr/local/apache2.4/bin/apachectl -M
//查看配置文件有哪些文件
//share字样的动态共享模块,static以静态形式存在
(4)安装成功

3. 安装PHP
(1)下载 php-5.6.30.tar
(2)解压
#cd /usr/local/src
#tar -zxvf php-5.6.30.tar.gz
# yum install -y libxml2-devel openssl openssl-devel bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel epel-release libmcrypt-devel libjpeg-turbo libjpeg-turbo-devel #yum install -y libmcrypt-devel //为防止配置时出错提前安装库文件

#cd php-5.6.30
#yum install bzip2-devel.x86_64 -y
#./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
#make && make install
//编译安装
4. httpd解析PHP
(1)#vim /usr/local/apache2.4/conf/httpd.conf
编辑httpd的主配置文件。
(2)搜索ServerName,把ServerName www.example.com:80前#去掉;
(3)<Directory / >
AllowOverride none
Require all denied
< /Directory>
改成:
<Directory / >
AllowOverride none
Require all granted
< /Directory> //目的允许所有请求访问
(4)搜索AddType application/x-gzip .gz .tgz,在下面添加一行 AddType application/x-httpd-php .php;
(5)< IfModule dir_module>
DirectoryIndex index.html
< /IfModule>
改成:
< IfModule dir_module>
DirectoryIndex index.html index.php
< /IfModule>
(4)测试安装
① 测试配置文件是否正确
#/usr/local/apache2.4/bin/apachectl -t
//检验配置文件是否正确LAMP环境搭建与配置
#/usr/local/apache2.4/bin/apachectl start
//启动httpd命令
#netstat -lnp |grep httpd
//查看是否启动
#curl localhost
LAMP环境搭建与配置

//使用curl命令简单测试,显示了就是成功
② 测试是否正确解析PHP
#vim /usr/local/apache2.4/htdocs/1.php

<? echo “php解析正确” ?>
  //编写一个测试脚本

#curl localhost/1.php
php解析正确
//如显示此信息则PHP解析正确
(5)安装成功

  • 任务2 Apache配置

1. 默认虚拟主机

(1)虚拟主机
虚拟主机(共享主机,又称虚拟服务器)是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。
(2)配置

#vi /usr/local/apache2.4/conf/httpd.conf
//编辑httpd.conf搜索httpd-vhosts,去掉#号
Include conf/extra/httpd-vhosts.conf
#vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/abc.com”
ServerName abc.com
ServerAlias www.abc.com aaa.com
ErrorLog “logs/abc.com-error_log”
CustomLog “logs/abc.com-access_log” common

<VirtualHost *:80>
DocumentRoot “/usr/local/apache2.4/docs/111.com”
ServerName 111.com
ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” common

其中
//ServerAdmin指定管理员邮箱,
//DocumentRoot为该虚拟主机站点的根目录,
//ServaerName为网站的域名
//ServerAlias为网站的第二域名
//ErrorLog为站点的错误日志
//CustomLog为站点的访问日志
#cd /usr/local/apache2.4/
#mkdir docs
#cd docs
#mkdir abc.com
#vi abc.com/index.html
abc.com
#mkdir 111.com
#vi 111.com/index.html
111.com
#/usr/local/apache2.4/bin/apachectl -t //检查配置文件是否有错误
#/usr/local/apache2.4/bin/apachectl graceful //graceful用于修改了配置文件后进行重新读取配置文件。
(3)配置验证
#curl -xlocalhost:80 www.abc.com
abc.com
#curl -xlocalhost:80 www.aaa.com
abc.com
#curl -xlocalhost:80 111.com
111.com
(4)验证成功
2. 用户认证
(1)介绍
用户认证用来对某些目录中的网页进行访问控制,当用户访问这些页面的时候需要输入用户名和密码进行认证

(2)配置
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/abc.com”
ServerName abc.com
ServerAlias www.abc.com aaa.com
<Directory /usr/local/apache2.4/docs/abc.com>
AllowOverride AuthConfig
AuthName “abc.com user auth”
AuthType Basic
AuthUserFile /usr/local/apache2.4/docs/.htpasswd
require valid-user

ErrorLog “logs/abc.com-error_log”
CustomLog “logs/abc.com-access_log” common

其中

// 指定认证的目录
AllowOverride AuthConfig
// 这个相当于打开认证的开关
AuthName “testdomain.com user auth”
//自定义认证的名字,作用不大
AuthType Basic
//认证的类型,一般为Basic
AuthUserFile /data/.htpasswd
//指定密码文件所在位置
require valid-user
// 指定需要认证的用户为全部可用用户

#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
#/usr/local/apache2.4/bin/htpasswd -cm /usr/local/apache2.4/docs/.htpasswd ytl
//htpasswd为创建用户的工具,-c为create
//-m为指定密码加密的方式为MD5
.htpasswd为密码文件
ytl为创建的用户
//第二次不用加,否则密码文件会重置
#curl -xlocalhost:80 -u ytl:1 abc.com -I
3)配置验证
(配置完可在Windows*问地址www.abc.com)
文件在C:\Windows\System32\drivers\etc\hosts
打开文件在最后一行输入:
#你的IP www.abc.com
接下来
#systemctl stop firewalld //关闭防火墙
#setenforce 0//设置selinux为Permissive(宽容模式,不会实际限制 domain/type 的存取)
然后,去浏览器访问www.abc.com会有弹窗出现。
(4)验证成功
3. 域名跳转
(1)介绍
当我们变更网站域名或者申多个域名指向一个网站的时候,这个时候我们就会用到域名跳转。
(2)配置
设置不是以111.com开头的网站都跳转到111.com上。
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
< VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
< IfModule mod_rewrite.c>//- 需要mod_ _rewrite模块
RewriteEngine on// 打开rewrite功能
RewriteCond %{HTTP_HOST} !^111.com / / 定 义 r e w r i t e 的 条 件 , 当 主 机 名 不 是 111. c o m 时 满 足 条 件 R e w r i t e R u l e / ( . ∗ ) //定义rewrite的条件,当主机名不是111.com时满足条件 RewriteRule ^/(.*) //定义rewrite的条件,当主机名不是111.com时满足条件RewriteRule/(.∗) http://111.com/$1 [R=301,L]//定义rewrite规则,RewriteRule后面分为三个部分,第一部分为当前网址
//第二部分为要跳转的网址,第三部分是选项,需要括号括起来。
< /IfModule>
ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” common
< /VirtualHost>
创建文件
#cd /usr/local/apache2.4/docs
#mkdir www.111.com
#cd www.111.com/
#vim index.html
www.111.com
#vim 123.php

<?php echo "www.111.com/123.php" ?>

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

要实现跳转,需要rewrite模块的支持,所以查看是否安装该模块。如果没有则还需要一些配置:

/usr/local/apache2.4/bin/apachectl -M |grep rewrite

如果不存在修改配置文件
#vi /usr/local/apache2.4/conf/httpd.conf
去掉LoadModule rewrite_module modules/mod_rewrite.so的注释
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
#/usr/local/apache2.4/bin/apachectl -M |grep rewrite

(3)配置验证
#curl -xlocalhost:80 2111.com.cn -I
//可以看见状态码301,跳转的网址是111.com
(4)验证成功a’pa
显示如下,成功跳转LAMP环境搭建与配置4. 访问日志
(1)介绍
访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题。
(2)配置
#vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” common
(3)配置验证
#curl -xlocalhost:80 2111.com.cn -I
#tail /usr/local/apache2.4/logs/111-access_log
(4)验证成功

日志格式的介绍,可以参考 #vi /usr/local/apache2.4/conf/httpd.conf LogFormat "%h %l %u %t \"%r\" %>s %b" common 其中,%h是来源IP,%l是远端登录名, %u是远程用户名, %t是时间,%r是请求的第一行, %>s指的是最后请求的状态, %b以CLF格式显示的除HTTP头以外传送的字节数
5. 访问日志不记录静态文件
项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。
(1)配置
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” common

上传图片文件到image中
#cd /usr/local/apache2.4/docs/www.111.com/
#mkdir image
#ll image/linux.jpg
检查配置信息
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
#curl -xlocalhost:80 www.111.com/image/linux.jpg -I

LAMP环境搭建与配置

查看日志
#tail -f /usr/local/apache2.4/logs/111.com-access_log
打开网页访问111.com/image/linux.jpg
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost :80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
SetEnvIf Request_URI ".
.gifKaTeX parse error: Can't use function '\.' in math mode at position 45: …Request_URI ".*\̲.̲jpg" image-request
SetEnvIf Request_URI “..pngKaTeX parse error: Can't use function '\.' in math mode at position 45: …Request_URI ".*\̲.̲bmp" image-request
SetEnvIf Request_URI ".
.swfKaTeX parse error: Can't use function '\.' in math mode at position 45: …Request_URI ".*\̲.̲js” image- request
SetEnvIf Request_URI “..cssKaTeX parse error: Expected 'EOF', got '#' at position 282: …正确,没有错误重新加载服务: #̲/usr/local/apac…" image-request
SetEnvIf Request_URI ".
.jpgKaTeX parse error: Can't use function '\.' in math mode at position 45: …Request_URI ".*\̲.̲png” image-request
SetEnvIf Request_URI “..bmpKaTeX parse error: Can't use function '\.' in math mode at position 45: …Request_URI ".*\̲.̲swf" image-request
SetEnvIf Request_URI ".
.jsKaTeX parse error: Can't use function '\.' in math mode at position 46: …Request_URI ".*\̲.̲css” image- request
ErrorLog “logs/111.com-error_log”
CustomLog “|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.1og 86400” combined env=!image-request

rotatelogs为apache的日志切割工具,-l表示以当前系统时间进行切割,logs/123.com-access_%Y%m%d.1og定义了日志的切割名称,86400以天为单位,换算成秒就是86400。
保存配置后,测试配置文件是否正确,没有错误重新加载服务:
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
(2)配置验证
#curl -xlocalhost:80 www.111.com -I
LAMP环境搭建与配置
(3)验证成功
#ll /usr/local/apache2.4/logs/
LAMP环境搭建与配置
7. 静态元素过期时间
(1)介绍
那到底能缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的图片才对。这就涉及一个静态文件缓存时长的问题,也叫作“缓存过期时间”。在httpd的配置文件中,我们是可以控制这个时间的。
(2)配置
在httpd上我们可以控制文件过期时间,配置如下:
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
< VirtualHost *:80 >
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
< 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 >
ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” combined
< /VirtualHost>
//这里gif,jpeg, png格式的文件过期时长为1天,css. js. flash格式的文件过期时长为2小时
保存配置后,测试配置文件是否正确,没有错误重新加载服务:
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
(3)配置验证
检查httpd是否加载expires模块:
#/usr/local/apache2.4/bin/apachectl -M |grep -i expires
//没有输出则说明当前httpd并不支持expires模块,所以需要修改配置文件
#vim /usr/local/apache2.4/conf/httpd.conf
//搜索关键词expires,找到这一行
#LoadModule expires_ module modules/mod_ expires .so
//把前面#删掉
#/usr/local/apache2.4/bin/apachectl graceful
//重新加载服务
#/usr/local/apache2.4/bin/apachectl -M|grep -i expires
expires_module(share)
//有这行输出说明正确加载expires模块
下面进行测试:
上传linux.jpeg文件
#curl -xlocalhost:80 www.111.com/image/linux.jpeg -I
//max-age=86400说明将缓存86400秒,max-age=0说明没有该类型缓存文件
(4)验证成功
LAMP环境搭建与配置

8. 配置防盗链
(1)介绍
防盗链,通俗讲,就是不让别人盗用你网站上的资源。这个资源,通常指的是图片、视频、歌曲、文档等。
(2)配置
配置防盗链先编辑主机配置文件:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com>
SetEnvIfNoCase Referer “http://www.111.com” local_ref
SetEnvIfNoCase Referer “http://111.com” local_ref
SetEnvIfNoCase Referer "^KaTeX parse error: Can't use function '\.' in math mode at position 30: … <filesmatch "\̲.̲(txt|doc|mp3|zi…为空referer,
//当直接在浏览器里输入图片地址去访问它时,它的referer就为空。
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
(3)配置验证
#curl -e “http://www.douxue.com/123.php” -xlocalhost:80 www.111.com/image/linux.jpg -I
//状态码为403,其中-e参数表示请求的来源
curl -e “http://www.111.com/123.php” -xlocalhost:80 www.111.com/image/linux.jpg -I
//白名单网页访问,状态码为200
#curl -xlocalhost:80 www.111.com/image/linux.jpg -I
//空referer为白名单网页访问,状态码为200
(4)验证成功

LAMP环境搭建与配置

9. 访问控制-Diretory\FileMatch

(1)介绍
访问控制限制白名单IP,针对文件和目录。
(2)目录配置
先来看看怎么限制IP访问,编辑配置文件:

#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com/admin>
Order deny,allow
Deny from all
Allow from 127.0.0.1

ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” combined

//Directory是用来指定限制访问的目录,order定义控制顺序
验证过程:
#mkdir /usr/local/apache2.4/docs/www.111.com/admin/
//创建admin目录,模拟网站后台
#vi /usr/local/apache2.4/docs/www.111.com/admin/123.php

<?php echo "Hello World!"; ?>

(3)配置验证
#/usr/local/apache2.4/bin/apachectl -t
#/usr/local/apache2.4/bin/apachectl graceful
#curl -x127.0.0.1:80 www.111.com/admin/123.php -I
//状态码为200,可正常访问
#curl -x192.168.63.130:80 www.111.com/admin/123.php -I
//状态码为403,拒绝访问
(4)验证成功
LAMP环境搭建与配置
(5)针对文件配置
编辑配置文件:
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
验证过程如下:
#cd /usr/local/apache2.4/docs/www.111.com/
#vim admin.php

<?php echo "This is admin.php"; ?>

#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful

(6)配置验证
#curl -x192.168.63.130:80 www.111.com/admin.php -I
状态码403被拒绝
#curl -x127.0.0.1:80 www.111.com/admin.php -I
状态码200访问正常
(7)验证成功
LAMP环境搭建与配置
10. 访问控制-禁止解析PHP
(1)简述
对于使用PHP语言编写的网站,有一些目录是有需求上传文件的。如果网站代码有漏洞,让黑客上传了一个用PHP写的木马,由于网站可以执行PHP程序,最终会让黑客拿到服务器权限。
为了避免这种情况发生,我们需要把能上传文件的目录直接禁止解析PHP代码。
(2)配置
配置如下:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com/upload>
php_admin_flag engine off

ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” combined

#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
#cd /usr/local/apache2.4/docs/www.111.com/
#mkdir upload
#vim upload/123.php

<?php echo "www.111.com/123.php"; ?>

(3)配置验证
#curl -x127.0.0.1:80 www.111.com/upload/123.php

<?php echo "www.111.com/123.php"; ?>

允许访问
LAMP环境搭建与配置
< VirtualHost :80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com/upload>
php_admin_flag engine off::
<FilesMatch (.
).php(.*)>
Order allow,deny
Deny from all
< /FilesMatch>
< /Directory>
ErrorLog “logs/111.com-error_log”
CustomLog “logs/111.com-access_log” combined
< /VirtualHost>
(4)验证成功
LAMP环境搭建与配置
11. 访问控制-user_agent
(1)介绍
user_agent是指用户浏览器端的信息。比如你是用IE的还是Firefox浏览器的。有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开PC常规页面。
(2)配置
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
< VirtualHost :80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
< IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .curl. [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .baidu.com. [NC]
RewriteRule .
- [F]
< /IfModule>
ErrorLog “logs/111.com-error_log”
CustomLog “logs/www.111.com-access_log” combined
< /VirtualHost>
//%{HTTP_USER_AGENT}为user_agent的内置变量,NC代表“不区分大小写”,F代表Forbidden,OR表示“或者”,[F]代表forbidden。
验证过程:
#/usr/local/apache2.4/bin/apachectl -t
//Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
(3)配置验证
#curl -x127.0.0.1:80 www.111.com/upload/123.php
//状态码403
(4)验证成功
LAMP环境搭建与配置
LAMP环境搭建与配置
(5)反向测试
修改配置文件
RewriteCond %{HTTP_USER_AGENT} .curl. [NC,OR]
将curl改为Mozilla(浏览器客户端)
RewriteCond %{HTTP_USER_AGENT} .Mozilla. [NC,OR]
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
#curl -x127.0.0.1:80 www.111.com/upload/123.php
LAMP环境搭建与配置

浏览器访问
LAMP环境搭建与配置

(6)指定客户端
修改配置文件,改回curl
RewriteCond %{HTTP_USER_AGENT} .curl. [NC,OR]
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
#curl -A Mozllia -x127.0.0.1:80 www.111.com/upload/123.php
-A参数指定客户端的用户代理标头,即User-Agent
LAMP环境搭建与配置

  • PHP配置

1. PHP基础配置
查看PHP配置文件得位置
#/usr/local/php/bin/php -i |grep -i “loaded configuration file”
#cp /usr/local/src/php-5.6.30/php.ini-production /usr/local/php/etc/php.ini
#/usr/local/php/bin/php -i |grep -i “loaded configuration file”
#cd /usr/local/apache2.4/docs/www.111.com
#vim 123.php

<?php phpinfo(); ?>

打开浏览器
LAMP环境搭建与配置
#vim /usr/local/php/etc/php.ini
搜索disable_functions,编辑如下:
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,1eak,popepassthru,stream_socket_server,popen,proc_open,proc_close
disable_functions表示禁用这些函数。
定义date.timezone,减少警告/
#vim /usr/local/php/etc/php.ini
找到date. timezone设置如下:
date.timezone = Asia/Shanghai
2.日志相关配置
例如,在disable_functions,定义禁用phpinfo函数,
#vim /usr/local/php/etc/php.ini
disable_functions=phpinfo,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,1eak,popepassthru,stream_socket_server,popen,proc_open,proc_close
浏览器访问www.111.com/123.php,显示空白
LAMP环境搭建与配置
配置error_log:
#vim /usr/local/php/etc/php. ini
//记录错误日志:搜索log_errors, 改成如下
log_errors=On
//记录错误日志目录位置:搜索error. log,改为
error_log = /tmp/php_errors.log
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
配置完php.ini,查看日志
#tail -f /tmp/php_errors.log
LAMP环境搭建与配置
3.配置open_basedir
open_basedir将网站限定在指定的目录,做目录的隔离
先在php.ini中设置open_basedir:
#vim /usr/local/php/etc/php.ini
//搜索open_basedir,改成如下
open_basedir = /usr/local/apache2.4/docs/www.111.com/admin:/tmp
因为限制了PHP只能在/tmp和/usr/local/apache2.4/docs/www.111.com/admin两个目录下面活动,演示如下:
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
打开浏览器依次访问http://www.111.com/admin/123.php、http://www.111.com/upload/123.php

LAMP环境搭建与配置

LAMP环境搭建与配置
4. 虚拟主机配置open_basedir
将/usr/local/php/etc/php.ini中open_basedir注释掉,编辑虚拟主机配置open_basedir
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/local/apache2.4/docs/www.111.com”
ServerName www.111.com
ServerAlias 111.com
php_admin_value open_basedir “/usr/local/apache2.4/docs/www.111.com/admin/:tmp/”
ErrorLog “logs/111.com-error_log”
CustomLog “logs/www.111.com-access_log” combined

//起作用的是php_admin_value
刷新配置
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
#curl -x127.0.0.1:80 www.111.com/admin/123.php
Hello World![root@localhost www.111.com]#
[root@localhost www.111.com]#
#curl -x127.0.0.1:80 www.111.com/upload/123.php -I
LAMP环境搭建与配置

  • PHP扩展模块安装
    #/usr/local/php/bin/php -m
    //如何查看PHP加载了哪些模块
    #cd /usr/local/src
    #wget http://pecl.php.net/get/redis-2.2.5.tgz
    //安装一个新的redis
    #tar -zxvf redis-2.2.5.tgz
    #mv redis-2.2.5 phpredis-develop
    #cd phpredis-develop
    #yum install -y autoconf
    //因为有一处错误需要安装
    #/usr/local/php/bin/phpize
    //目的生成configure文件
    Configuring for:
    PHP Api Version: 20131106
    Zend Module Api No: 20131226
    Zend Extension Api No: 220131226
    #./configure --with-php-config=/usr/local/php/bin/php-config
    #make
    #make install
    Installing shared extensions: /usr/local/php/lib/ php/extensions/ no-debug- zts - 20131226/
    //make install时候编译好的就会放在这个目录里
    #ls /usr/local/php/lib/php/extensions/no-debug-zts-20~~
    //可以看到rdis.so
    #vim /usr/local/php/etc/php.ini
    //增加一行配置(可以放在文件最后一行)
    extension = redis.so
    #/usr/local/php/bin/php -m |grep redis
    //查看是否加载了redis模块
    redis
上一篇:源码编译安装LAMP和部署wordpress博客系统


下一篇:知识点 Linux 配置LAMP环境