lamp

LAMP环境搭建与配置

 

 

 

 

 

 

 

 

 

 

 

 

 

 

安装MySQL

(1) 下载安装包

 寻找安装包 可以去MySQL官网去下载 。

查看自己的Linux时多少位的 。

# uname -i

   下载源码包:

  #cd /usr/local/src     //建议以后所有安装包 都放到此目录下

#wget http://mirrors.sohu.com/mysql/MYSQL-5.6.35-linux-glibc2.5-x86_64.tar.gz     //若该地址失效到官网寻找一个新的下载

(2) 初始化

#Tar zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz  //解压

#[ -d /usr/local/mysql ] && mv /usr/local/mysql  /usr/local/mysql_old

#mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql   //挪动位置

#useradd -s /sbin/nologin  mysql   //建立MYSQL用户,因为启动需要该用户

#cd /usr/local/mysql

#mkdir  -p  /data/mysql   //daradir ,数据库文件会放到这里面

# chown -R mysql:mysql /data/mysql   //更改权限,不更改后续操就会出问题

#.scripts/mysql_install_db --usr=mysql --datadir=/data/mysql

 

&& 表示当前面命令执行成功时,才会执行后面的

--usr表示定义数据库的以哪个用户身份在运行

--datadir 表示定义数据库的安装目录(建议放到大空间的分区上)

执行最后一条命令时,有个错误信息FATAL ERROR: please install the following Perl modules before executing ./scripts/mysq. install db: Data::Dumper" ,这是因为缺少包perl-Module- Install,使用命令yum install -y perl-Module- Install安装它。

重新安装执行一次最后一条命令 并且会在/data/myssql下面生成几个文件和目录,说明执行正确:或者在执行玩最后一条命令,马上执行 echo &

看是否为零

 

 

配置MySQL

复制配置文件  

#cp support-files/my-default.cnf /etc/my.cnf

Cp :是否覆盖/etc/my.cnf ? y

 

 

修改配置文件成如下:

 

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQLStart at 70% of total RAM for dedicated server, else 10%.

innodb_ _buffer_ pool_ _size = 128M

 

 

# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

log. Bin=aminglinux

 

# These are commonly set, remove the # and set as required,

Basedir=/usr/local/mysql

Datadir=/data/mysql

port = 3306

server_ id=128

Socket=/tmp/mysql. Sock

 

# Remove leading # to set options mainly useful for reporting servers .

# Remove leading # to set options mainly useful for reporting servers .

# Adjust sizes as needed, experiment to find the optimal values .

join_ _buffer. _size = 128M

sort_ buffer_ size=2M

read_ rnd_ _buffer_ size = 2M

sql_ mode=NO_ _ENGINE_ SUBSTITUTION, STRICT_ TRANS_ _TABLES

 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

 

 

datadir是定义的存放数据的地方 一般情况,错误日志也会记录在这个目录下面。

port定义MYSQL服务器监听端口,如果不定义默认就是3306

Server_id 定义该MYSQL服务ID号,这个参数用在做主从配置的时候。

Socketd定义MYSQL服务监听的套接字地址

 

 

 

复制启动该脚本文件并修改其属性,

# cp support-files/mysql.server /etc/init.d/mysql

#chmod 755 /etc/init.d/mysql

修改启动脚本

#vim /etc/init.d/mysql

需要修改的地方有  datadir=/data/mysql(前面初始化数据库定义的目录)。把启动脚本加入系统服务项,设定开机启动并启动MYSQL

# chkconfig --add mysql  //mysql服务加入到系统服务列表中

#chkconfig mysql on      //开机启动

 

# service mysql start   //启动mysql服务

如果启动不了 /data/mysql目录下查看错误日志,这个日志名通常是主机名.err,检查MYSQL是否启动的命令为

#ps aux |grep mysql   //结果应该大于2

# netstat -lnp|grep 3306  //看看有没有监听3306

 

 

 

安装apache

 

#cd /usr/local/src.

#wget   http://mirrors.cnnic/apache/httpd/httpd-2.4-25.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

 

解压下载好的源压缩包

#tar zxvf httpd-2.4.25.tar.gz

#tar zxvf apr-1.5.2.tar.gz

#tar zxvf apr-util-1.5.4.tar.gz

  安装apr以及apr-util

#cd /usr/local/src/apr-1.5.2

#./configure --prefix=/usr/local/apr

#make && make install

# cd /usr/local/src/apr-util-1.5.4

#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

#make && make install

安装apr-util时出现如下的错误

 

 

解决方法  

Yum install -y expat-devel

安装完apr以及apr-util 继续安装httpd 配置编译参数

#cd /usr/local/src/httpd-2.4.25

#./configure \   //这里反斜杠表示是转移字符,加上可以把命令写成多行

--prefix=/usr/local/apache2.4

--with-apr=/usr/local/apr

--with-apr-util=/usr/local/apr-util

--enable-so

--enable-mods-shared=most

 

--prefix 指定安装目录

--enable-so 表示启用DSO  DSO意思是,把某些功能模块(一个功能模块就是一个so文件,这些文件在编译完httpd后会看到)的形式展现出来

 

提前安装pcre-devel

#yum install -y pcre pcre-devel

编译和安装

#make

#make install

 

查看httpd的目录结构以及modules目录下面的模块

#/usr/local/apache2.4/bin/apachectl -M

 

 

安装PHP

首先下载PHP

#cd /usr/local/src

#wget http://cn2.php.net/distributions/php-5.6.30.tar.gz   //如果失败 r.aminglinux.com 下载最新版本

# 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-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

 

 

 

错误1

 

 

 

解决方法

#yum install -y libxml2-devel

 

 

 

 

错误2

 

 

解决方法

#yum install -y openssl openssl-devel

错误3

 

解决方法

#yum install -y bzip2 bzip2-devel

错误4

 

解决方法

#yum install -y libpng libpng-devel

错误5

 

解决方法

#yum install -y freetype freetype-devel

 

错误6

 

解决方法

#yum install -y epel-release

#yum install -y libmcrypt-devel

Centos 默认的yum源没有libmcrypt-devel这个包,所以只能借助epel yum扩展源

然后编译安装

#make

#make install

 

 

最后复制配置文件

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

 

配置httpd支持PHP

httpd的主配置文件为/usr/local/apache2.4/conf/httpd.conf , 编辑这个文件

  

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

 搜索ServerName 把ServerName www.example.com:80 前面的井号删除

找到如下内容:

 

 

 

 

 

改写如下 <Directory/>

     AllowOverride none

     Require all granted

</Directory>

修改它的目的是,允许所有请求,如果不设置改行,则我们访问时候会报403,在搜索下一行

AddType application/x-gzip .gz .tgz

 

在该行下面添加

AddType application/x-httpd-php .php

 

找到下面这一段

 

修改为

 

 

 

 

 

 

 

 

测试LAMP是否成功

 

1测试配置文件是否正确

 

启动httpd之前需要先检验配置文件是否正确

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

如果有错误,请继续修改配置文件httpd.conf

如果正确则会显示Syntax OK .

启动httpd命令如下:

# /usr/local/apache2.4/bin/apachectl start

查看是否启动

#netstart -lnp |grep httpd

 

另外,还可以用curl命令进行简单测试

# Curl localhost

 

测试是否正确解析PHP

首先编译一个测试脚本,

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

<?php

Echo “php解析正常”

?>

保存脚本后测试

#Curl localhost/1.php

   解析正常

 显示以上信息表示PHP解析正确

 

 

 

 

HTTP配置

 

默认虚拟主机

 

编辑配置文件 httpd.conf

#vim /usr/local/apache2.4/conf/httpd.conf  //搜索关键词httpd.vhost ,找到这行把井号删除

保存主配置文件,然后编译虚拟机配置文件:

# vim /usr/local/apache2.4/conf/extra/hpptd-vhsts.conf

//这个配置文件就是主配置文件了,后面操作都是在这个里面完成的

<VirtualHost *:80>

ServerAdmin admin@aminglinux.com

DocumentRoot  /data/wwwroot/aming.com

ServerName aming.com

ServerAlias www.aming.com

Errorlog /logs/aming.com-error_log

CustomLog  logs/aming.com-access_log common

</VirtualHost>

<VirtualHost *:80>

DocumentRoot /data/wwwroot/www.123.com

ServerName  www.123.com

</VirtualHost>

 

 

# 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/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 aming.com

  Aming.com

#curl -x127.0.0.1:80 www.123.com

123.com

#curl -x127.0.0.1:80 www.abc.com

Aming.com

 

 

用户认证

 

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

 

 

 

 

<VirtualHost *:80>

DocumentRoot  /data/wwwroot/www.123.com

ServerName www.123.com

<Directory /data/wwwroot/www.123.com> //指定认证目录

AllowOverride AuthConfig //这个相当于打开认证的开关

AuthName 123.com user auth //自定义认证名字 ,作用不

AuthType Basic  //认证的类型,一般为Basic

AuthUserFile /data/.htpasswd //指定密码文件所在位置

Require valid-user //指定需要认证的用户为全部可用用户

</Directory>

</VirtualHost>

 

配置文件完成,但还需要创建密码文件。

#/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming

 

// htpasswd命令为创建用户的工具, -ccreate -m指定密码加密方式为MD5

// /data/.htpasswd为密码文件,aming为要创建的用户,第一次执行该命令需要加-c

 

// 第二次创建新用户时,就不用加-c

否则/data/.htpasswd文件就会被重置,之前的用户被清空

 

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

//验证没有问题后才能重启或者重新加载

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

配置完成后需要到宿主机上去修改一下hosts文件,类似linux上的/etc/hosts www.123.com域名指向你的这台linux机器 这样才能通过浏览器访问到www.123.com

 

#192.168.195.135 www.123.com

//左边的ip地址为你的linux IP

 

保存hosts文件后,就可以用浏览器进行访问 www.123.com

输入用户和密码将会进入www.123.com 。上面操作是针对整个站点做的认证,其实也可以针对某个目录或者某个文件进行认证,比如要对www.123.com/admin目录进行认证,只需要修改一个地方,把<Directory  /data/wwwroot/www.123.com>改为<Directory  /data/wwwroot/www.123.com/admin>。如果是一个文件,比如www.123.com/admin.php

<VirtualHost *:80>

DocumentRoot  /data/wwwroot/www.123.com

ServerName www.123.com

   <FilesMatch admin.php>

AllowOverride AuthConfig

AuthType Basic

AuthName 123.com user auth

AuthUserFile /data/.htpasswd

require valid-user

</FileMatch>

</VirtualHost>

但这样会有一个问题 ,网址中带有admin.php的链接都会弹出认证窗口

 

 

配置域名跳转

#<VirtualHost *:80>

# DocumentRoot "/data/wwwroot/www.123.com"

# ServerName www.123.com

 #ServerAlias 123.com

 #<IfModule mod_rewrite.c> //需要mod_rewrite模块支持

 #     RewriteEngine on //打开rewrite

 #     RewriteCond %{HTTP_HOST} !^www.123.com$

//定义rewrite的条件,当主机名(域名)不是www.123.com时满足条件

 #     RewriteRule ^/(.*)$ http://123.com/$1 [R=301,L]

//定义rewrite规则,当满足上面条件时,这条规矩才会执行

# </IfModule>

#</VirtualHost>

 

 

 

# /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 graceful -M |grep -i rewrit

配置完后,进行测试,在这里用curl就可以看到效果

#curl -x127.0.0.1:80 -I 123.com

 

 

 

 

 

配置访问日志

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

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

 

 

%h为访问网站ip%l为远程登录名,这个字段上基本为-%u为用户名,当使用用户认证时,这个字段为认证的用户名;%t为时间;%r为请求的动作(比如curl -I时九尾HEADE);%s为请求的状态码,写成%>s为最后的状态码;%b为传输数据大小;%{Referer}ireferer信息(请求本地上一次的地址就为referer);%{User-Agent}i为浏览器标识

 

 

#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //123.com虚拟主机改写如下

#<VirtualHost *:80>

# DocumentRoot "/data/wwwroot/www.123.com"

# ServerName www.123.com

 #ServerAlias 123.com

 #<IfModule mod_rewrite.c>

 #     RewriteEngine on

 #     RewriteCond %{HTTP_HOST} !^www.123.com$

 #     RewriteRule ^/(.*)$ http://123.com/$1 [R=301,L]

# </IfModule>

# CustomLog "logs/123.com-access_log" combined

 

#</VirtualHost>

 

 

# /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

发现生成日志并且有相关日志

限制图片js css 等静态文件写入到日志中,防止日志文件过大

 

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

 

 

#<VirtualHost *:80>

# DocumentRoot "/data/wwwroot/www.123.com"

# ServerName www.123.com

# ServerAlias 123.com

#<IfModule mod_rewrite.c>

 #  RewriteEngine on

 #     RewriteCond %{HTTP_HOST} !^www.123.com$

 #     RewriteRule ^/(.*)$ http://123.com/$1 [R=301,L]

#</IfModule>

#SetEnvIf Request_URI ".*\.gif$" image-request

#SetEnvIf Request_URI ".*\.jpg$" image-request

#SetEnvIf Request_URI ".*\.png$" image-request

#SetEnvIf Request_URI ".*\.bmp$" image-request

#SetEnvIf Request_URI ".*\.swf$" image-request

#SetEnvIf Request_URI ".*\.js$" image-request

#SetEnvIf Request_URI ".*\.css$" image-request

 

#CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined env=!image-request

</VirtualHost>

 

先定义了一个image-request环境变量,把gifjpgpngbmp. swfjsCss等格式的文件全部归

类到image- request里,后面的env=!image-request有用到- -"!", 这相当于取反了,意思是把image . request以外的类型文件记录到日志里。

 

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

 

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

#curl -x127.0.0.1:80 /logs/   //再次访问 才会生成新的日志

# ls /usr/local/apache2.4/logs

#touch /data/wwwroot/www.123.com/aming.jpg

#touch /data/wwwroot/www.123.com/aming.txt

# curl -x127.0.0.1:80 www.123.com/aming.jpg

# curl -x127.0.0.1:80 www.123.com/aming.txt

# cat /usr/local/apache2.4/logs/132.com-access_20170318.log  //查看日志

 

配置静态元素过期时间

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

 

#<VirtualHost *:80>

#    DocumentRoot "/data/wwwroot/www.123.com"

#    ServerName www.123.com

#    ServerAlias 123.com

#    <IfModule mod_rewrite.c>

#        RewriteEngine on

#        RewriteCond %{HTTP_HOST} !^www.123.com$

#        RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]

#    </IfModule>

#SetEnvIf Request_URI ".*\.gif$" image-request

#SetEnvIf Request_URI ".*\.jpg$" image-request

#SetEnvIf Request_URI ".*\.png$" image-request

#SetEnvIf Request_URI ".*\.bmp$" image-request

#SetEnvIf Request_URI ".*\.swf$" image-request

#SetEnvIf Request_URI ".*\.js$" image-request

#SetEnvIf Request_URI ".*\.css$" image-request

#CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined env=!image-request

# <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>

#</VirtualHost>

 

这部分配置用到了mod, _expires模块, 相关配置内容并不难理解,通过字面也可以大致猜到其含义。这里gif. jpeg. png格式的文件过期时长为1天,cssjsflash格式的文件过期时长为2小时,其他文件过期时长为0,也就是不缓存。保存配置文件,检查配置是否有问题,没问题重新加载服务:

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

 

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

//检查httpd是否加载expires模块

#/usr/local/apachee2.4/bin/apachectl graceful -M |grep -i expires

//没有任何输出,说明当前httpd并不支持expires模块,所以速妖修改配置文件,打开模块

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

//搜索expries关键词,找到

#LoadModule expires_ module modules/mod_ expires . so删掉前面#

 

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

#/usr/local/apachee2.4/bin/apachectl graceful -M |grep -i expires

expires_ module (shared) //有这行输出,说明已经正确加载expires模块

 

#curl -x127.0.0.1:80 -I www.123.com/aming.jpg

 

 

 

#curl -x127.0.0.1:80 -I www.123.com/aming.txt

 

 

 

 

 

 

 

配置防盗链

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

 

 #<VirtualHost *:80>

#    DocumentRoot "/data/wwwroot/www.123.com

#    ServerName www.123.com

#    ServerAlias 123.com

#    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined

# <Directory /data/wwwroot/www.123.com>

#    SetEnvIfNoCase Referer "http://www.123.com" local_ref

#    SetEnvIfNoCase Referer "http://123.com " local_ref

#    SetEnvIfNoCase Referer "^$" local_ref

# <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">

#     Order Allow,Deny

#     Allow from env=local_ref

# </filesmatch>

# </Directory>

#</VirtualHost>

 

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

 

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

# curl -x127.0.0.1:80 -I -e  “http:// www.123.com/123.txt  ”http://www.123.com/aming.jpg

 

# curl -x127.0.0.1:80  -I  -e  “http://www.1234.com/1.txt” http://www.123.com/aming.jpg

 

# curl -x127.0.0.1:80  -I  -e  “http://www.1234.com/1.txt” http://www.123.com/index.html

 

 

 

 

 

 

 

 

访问控制

这样做的目的为了防止别有用心的人拿到后台权限,并获得内部数据

限制ip访问,编译配置文件:

 

 

#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //改成如下内容

# <VirtualHost *:80>

#    DocumentRoot "/data/wwwroot/www.123.com

#    ServerName www.123.com

#    ServerAlias 123.com

#    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined

#   <Directory /data/wwwroot/www.123.com/admin/>

#      Order deny,allow

#      Deny from all

#      Allow from 127.0.0.1

#   </Directory>

#</VirtualHost>

 

使用<Directory>来指定限制访问的目录,order定义顺序,哪个在前面就先匹配哪个规则。

 

 

 

 

#mkdir -p  /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_20191220.log

// 清空当天的访问日志

 

#curl -x192.168.195.135 -I www.123.com/admin/index.html

 

 

 

 

#cat /usr/local/apache2.4/logs/123.com-access_20191220.log

 

 

 

 

浏览器访问提示 Forbidden,其实就是403.再来看日子就会看到对应的ip

# tail -1 /usr/local/apache2.4/logs/123.com-access_20191220.log

 

也可以单独针对某个文件来做限制:

<Directory /data/wwwroot/www.123.com>

<Filesmatch  “admin.php(.*)”>

   Order deny,allow

Deny from all

   Allow from 127.0.0.1

</Filesmatch>

</Directory>

 

 

为了避免让黑客拿到服务器权限,我们需要把能上传文件的目录直接禁止解析PHP代码(不用担心会影响网站访问,若这种目录也需要解析PHP,那说明程序员不合格)配置如下

 

#<VirtualHost *:80>

#         DocumentRoot "/data/wwwroot/www.123.com

#        ServerName www.123.com

#        ServerAlias 123.com

#        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined

#    <Directory /data/wwwroot/www.123.com/upload>

#       php_admin_flag engine off

#    </Directory>

#</virtualHost>

 

 

# /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/1.php

 

 

这说明1.php是不能正常解析的

 

多台电脑同时访问一个网站会耗尽服务器资源,从而使之不能正常工作。我们可以通过限制user_agent发挥防攻击作用。

修改user_agent

#vim  /usr/local/apache2.4/conf/extra/httpd-vhosts.conf   //编辑虚拟主机配置文件

//内容改为如下

 

 

#<VirtualHost *:80>

#        DocumentRoot "/data/wwwroot/www.123.com"

#        ServerName www.123.com

#        ServerAlias 123.com

#        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400"combined

#        <IfModule mod_rewrite.c>

#               RewriteEngine on

#               RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]

#                RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]

#                RewriteRule .* - [F]

#        </IfModule>

#</VirtualHost>

 

 

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

 

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

 

# curl -I -x127.0.0.1:80 www.123.com/ipload/1.php

 

 

 

 

 

#curl -A “123123” -I -x127.0.0.1:80 www.123.com/upload/1.php

 

 

 

 

 

 

 

Curl -A 选项指定user_agent  第一个请求,user_agentcurl/7.29”匹配了第一个条件,所以会403;杜尔哥请求,user_agent以自定义的“123123”没有匹配任何条件,所以状态码为200

 

 

 

PHP配置

 

 

#/usr/local/php/bin/php -i |grep -i “loaded configuration file”

 

Php.iniPHP的配置文件,可以看出其/usr/local/php/bin/php ,第一行的warning为警告信息,可以忽略,取消这个警告需要编辑php.ini

Date.timezone= Asia/Shanghai

#/usr/local/php/bin/php -i |grep -i “loaded configuration file”

 

 

 

配置 error_log

# vim /usr/local/php/etc/php.ini

修改文件如下

Log_errors = on

Error_log= /var/log/php/php_errors.log

Error_reporting = E_ALL & ~E_NOTICE

Display_errors =off

 

 

 

#make /var/log/php

#chmod 777 /var/log/php  // 需要保证PHP的错误日志所在目录存在,并且权限为可写

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

# vim /data/wwwroot/www.123.com/test.php //写入如下内容,故意把结尾去掉;丢掉

# curl -A “123” -I  -x127.0.0.1:80 www.123.com/test.php

 

出现了状态码500,这说明了我们访问的页面存在错误的,此时需要查看PHP错误日志来判断错误信息

 

 

# cat /var/log/php/php_errors.log

 

 

 

配置open_basedir

 

# vim /usr/local/php/etc/php.ini

Open_basedir = /tmp:/data/wwwroot/www.123.com

# /usr/local/apache2.4/htdocs/1.php  /data/wwwroot/aming.com/

 

 

#curl -x127.0.0.1:80 -I aming.com/1.php

 

 

 

 

 

 

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

<VirtualHost *:80>

        DocumentRoot "/data/wwwroot/www.123.com"

        ServerName www.123.com

        ServerAlias 123.com

        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400"combined

        php_admin_value open_basedir "/data/wwwroot/www.123.com"

</VirtualHost>

 

 

 

 

 

PHP动态扩展模块安装

 

 

# /usr/local/php/bin/php -m

 

 

 

 

 

 

# cd /usr/local/src/

#wget  https://codeload.github.com/phpredis/phpredis/zip/develop

wget http://pecl.php.net/get/redis-2.2.5.tgz

 # mv develop phpredis-develop.zip

# unzip !$

# cd phpredis-develop/

# /usr/local/php/bin/phpize   //目的时生成configure

 

 

#yum install -y autoconf

# /usr/local/php/bin/phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config

#make

#make install

//make install 的时候会把编译好的redis.so放到这个迷路下面,这个目录也是扩展模块存放目录

# /usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以再php.ini中自定义该路径

 

# ls  /usr/local/php/lib/php/extensions/no-debug-zts-20131226

# vim /usr/local/php/etc/php.ini

extension= redis.so

# /usr/local/php/bin/php -m |grep redis  //查看是否加载了redis模块

posted @ 2019-12-27 16:01  由衷呆滞  阅读(589)  评论(0)    收藏  举报