MySQL安装


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

 把下载的包保存在这个目录里: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

第三步,把解压的这个目录移动到usr、local下并改名为mysql:

 mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

第四步,进入到这个目录下:

 cd /usr/local/mysql

第五步,创建一个mysql用户:

 useradd mysql

第六步,创建一个目录:这个目录是为了存放mysql的数据

 mkdir /data/  

第七步,初始化一下让它生成/data/mysql这个目录:

 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

[root@aaa-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper

缺少软件包需要安装,我们先模糊搜索一下,如果不清楚哪个是可以把他们都装上,都试试。

[root@aaa-01 mysql]# yum list |grep perl |grep -i Dumper
perl-Data-Dumper.x86_64                  2.145-3.el7                   base   安装这个  
perl-Data-Dumper-Concise.noarch          2.020-6.el7                   epel     
perl-Data-Dumper-Names.noarch            0.03-17.el7                   epel     
perl-XML-Dumper.noarch                   0.81-17.el7                   base

安装:yum install -y perl-Data-Dumper

怎检验错误,两种方法:要不运行echo $?

[root@aaa-01 mysql]# echo $?
0

要不看是不是有两个OK

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_02

第七步,拷贝配置文件,配置文件在ls /support-files/my-default.cnf里边(模板配置文件)

 把它拷贝到/etc/下,改名叫my.cnf(mysqld的配置文件就叫my.cnf固定放在etc下)

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

第八步,拷贝启动脚本

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

第九步,编辑配置文件

 vi /etc/init.d/mysqld

定义basedir和datadir 在配置文件最下边

basedir=/usr/local/mysql
datadir=/data//mysql

 笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_03

第十步,添加到系统服务中去,让他开机启动:

 chkconfig --add mysqld  查看一下:chkconfig --list

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_04

第十一步,启动服务:service mysqld start 或者用:/etc/init.d/mysqld start

[root@aaa-01 mysql]# service mysqld start
Starting MySQL.Logging to '/data//mysql/aaa-01.err'.
. SUCCESS!

查看进程:ps aux |grep mysql

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_05

查看监听端口:netstat -lntp(默认监听3306端口)

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_06

停掉服务命令:service mysqld stop


 也可以用命令行的方法启动:

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_07

但是用平时的命令停不了需要:停掉服务命令:killall mysqld

如果碰到mysqld的进程杀不死你等了一分钟还没有杀死ps还会有进程那证明他数据量很大正在慢慢写入到磁盘里去这事你不能用kill -9杀死这个进程这样可能会导致你丢失数据或者损坏你的表



mariadb安装

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

 把安装包拷贝到usr/local目录下来: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=/usr/local/mariadb

    datadir=/data/mariadb

    conf=$basedir/my.cnf  以及启动参数

 笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_08

 最后在启动脚本定义:搜 /start 大概在300行,定义一下,加上下边的的内容:定义的是配置文件所在的路径,目的是不和mysql产生冲突,假如说你的机器上只安装了mariadb就不需要自定义--defaults这个参数

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_09

 启动它:/etc/init.d/mariadb start

 启动它之前先看看有没有mysqld服务在运行ps aux |grep mysqld,因为他俩监听的是一个端口,先把它关掉。

 查看是否启动成功:ps aux |grep mariadb

 查看监听端口:netstat -lntp 是不是3306

maridb的配置文件:/usr/local/mariadb/my.cnf



Apache安装

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

 Apache官网www.apache.org

第一步,下载这三个包:

下载到这个目录下:cd /usr/local/src

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)

第二步,解压这三个包:

 tar zxvf httpd-2.4.27.tar.gz

 tar zxvf apr-util-1.5.4.tar.gz

 tar zxvf apr-1.5.2.tar.gz

第三步,安装apr:

 1.先进到apr-1.5.2目录下:cd /usr/local/src/apr-1.5.2

 2.安装apr:./configure --prefix=/usr/local/apr

 3.make && make install

 他下边会有四个目录:ls /usr/local/apr

安装apr-util:

 1.进到目录下:cd /usr/local/src/apr-util-1.5.4

 2.安装:./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

 3.make && make install

编译httpd:

 1.进到目录下:cd /usr/local/src/httpd-2.4.27

 2.安装:./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most

 3.make && make install

 ls /usr/local/apache2.4/modules 模块目录,每个模块都代表着一个功能

 /usr/local/apache2.4/bin/httpd -M //查看阿帕奇加载的模块

命令行启动apache:/usr/local/apache2.4/bin/apachectl start

查看有没有启动:ps aux |grep hpptd

查看端口号:netstat -lntp(httpd默认监听80端口)


安装PHP5

 PHP官网www.php.net

 当前主流版本为5.6/7.1

必须先安装阿帕奇,因为编译PHP的时候他会用到阿帕奇的一个工具(--with-apxs2)

第一步,进到src目录下: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

usr/local/php/bin/php -m  #查看php加载的模板都有哪些

第六步,拷贝:cp php.ini-production  /usr/local/php/etc/php.ini



安装PHP7

 安装方法跟PHP5一样!!!

 cd /usr/local/src/ 

 wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2

 tar jvxf 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

PHP5跟PHP7不想用哪个就把它注释掉,编辑配置文件:搜索php5.so

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

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_10

usr/local/apache2.4/bin/apachectl -m   ##查看阿帕奇加载了几个PHP



配置http支持PHP

编辑一下httpd主配置文件/usr/local/apache2.4/conf/httpd.conf

vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方

第一步,搜索ServerName 把这个服务打开,前边的井号去掉

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_11 

去掉之后他就不会在提示下面的错误信息了

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_12      

第二步,增加一行配置,搜索:Require all denied 改成:Require all granted


每次写完配置文件都要执行一下这两步!!

检查配置文件语法是否正确,加上-t选项
 /usr/local/apache2.4/bin/apachectl -t
重新加载配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_13


第三步,搜AddType加上下边这条命令:

AddType application/x-httpd-php .php  加他的目的是为了能让php能解析

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_14


第四步,增加索引页,搜索Index,加上下边语句:

DirectoryIndex index.html index.php

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_15


第五步,写一个脚本看看阿帕奇能不能解析PHP:

vi /usr/local/apache2.4/htdocs/1.php
<?php
phpinfo();
?>

写完在浏览器上访问一下IP加1.php:192.168.232.132/1.php  只要能出下边的页面就证明能解析

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_16

如果不能解析那么你就检查一下Apache配置文件:

第一项,看看php5有没有加载:

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

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_17

如果没有加载php5,你就要看看他有没有这个模块,有没有这个文件:

ls /usr/local/apache2.4/modules/libphp5.so

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_18

如果有文件也没有显示,查看配置文件里边有没有加载php5:

vim /usr/local/apache2.4/conf/httpd.conf    搜索libphp5.so

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_19

在查看配置文件里有没有加AddType这一行搜索AddType

AddType application/x-httpd-php .php

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_20


/usr/local/apache2.4/bin/apachectl -t //测试语法

/usr/local/apache2.4/bin/apachectl start //启动服务

netstat -lntp 

curl localhost


vim /usr/local/apache2.4/htodcs/test.php //增加如下内容

<?php
echo 123;
?>


curl localhost/test.php



http的默认虚拟主机

 一台服务器可以访问多个网站,每个网站都是一个虚拟主机

任何一个域名解析到这个主机台机器,都可以访问的虚拟主机就是默认虚拟主机

 概念:域名(主机名)、DNS、解析域名、hosts

window下边的hosts在C:\Windows\System32\drivers\etc路径下,可以定义一个域名指向到一个IP,例如

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_21

定义完在windows上边ping一下它确实指向了定义的IP上,如果不指定他会指向到一个公网IP上

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_22


 配置虚拟主机

编辑配置文件:vim /usr/local/apache2.4/conf/httpd.conf 搜索httpd-vhost,去掉#

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf//改为如下

<VirtualHost *:80>
    ServerAdmin admin@aminglinux.com            #这个是要定义邮箱,要不要无所谓可以删掉
    DocumentRoot "/data/wwwroot/abc.com"        #这个定义网站的根目录在哪里,比如在/data/wwwroot/abc.com
    ServerName abc.com                  #网站域名(只允许写一个)  
    ServerAlias www.abc.com www.123.com     #网站别名,比如abc可以访问123也可以访问,可以写多个域名
    ErrorLog "logs/abc.com-error_log"        #错误日志
    CustomLog "logs/abc.com-access_log" common  #访问日志
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.111.com
    ServerAlias www.exaple.com
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common

更改完配置文件创建对应的目录:

mkdir /data/wwwroot/

mkdir /data/wwwroot/abc.com

mkdir /data/wwwroot/111.com

然后在对应的站点根目录下创建一个比如说:index.php

vim /data/wwwroot/abc.com/index.php   给abc.com里边定义如下

<?php
echo "abc.com";

vim /data/wwwroot/111.com/index.php   给111.com里边定义如下

<?php
echo "111.com"
</VirtualHost>

最后检查、重启

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

测试虚拟主机

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 

 curl -x127.0.0.1:80 aming.com //这样会去访问aming.com/index.html 

 curl -x127.0.0.1:80 www.123.com //访问www.123.com

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

 所谓虚拟主机就是:任何一个域名解析到这个ip上他都会去访问这个默认虚拟主机



httpd的用户认证

假如说访问123.com的时候有个需求,你能让你直接访问,需要输入用户名密码,验证通过之后呢才能访问,这样做的目的是为了增加安全性

在第二个上更改因为第一个是默认虚拟主机

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_23

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

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_24

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

生成他的密码文件,-c创建密码文件,-m指定密码加密类型,比如说用户叫aming输入两次密码

/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming

假如说你想在创建一个用户比如zhangsan,那就不需要-c创建密码文件了,因为刚才已经创建了,直接-m加用户名就可以/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan

可以查看到生成的密码cat / /data/.htpasswd

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_25

 重新加载配置-t , graceful

检查配置文件语法是否正确,加上-t选项
 /usr/local/apache2.4/bin/apachectl -t
重新加载配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

测试

现在虚拟机上用命令测试 

不指定用户密码:curl -x127.0.0.1:80 www.111.com //状态码为401,401表示需要用户验证

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_26

 指定用户密码:curl -x127.0.0.1:80 -uaming:passwd www.111.com //状态码为200 

格式为:-u指定用户:用户密码 解释:下边的例子用户是aming密码是lishiming

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_27


在电脑浏览器上测试

先在Windows上绑定hosts,window下边的hosts在C:\Windows\System32\drivers\etc路径下

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_28

绑定完浏览器输入111.com,输入用户密码就可以访问到了

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_29



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

比如说访问123.php时再认证

    <FilesMatch admin.php>

        AllowOverride AuthConfig

        AuthName "123.com user auth"

        AuthType Basic

        AuthUserFile /data/.htpasswd

        require valid-user

    </FilesMatch>

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_30

 重新加载配置-t , 检测graceful

检查配置文件语法是否正确,加上-t选项
 /usr/local/apache2.4/bin/apachectl -t
重新加载配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

测试

编写一个123.php脚本vim /data/wwwroot/111.com/123.php 写入:

<?php
echo "123.php";

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_31

在虚拟机上:curl -x127.0.0.1:80 www.111.com  -I 你发现不用输入密码也可以访问到了

而访问123.com时则是401:curl -x127.0.0.1:80 111.com/123.php -I

输入用户名密码就可以访问到:curl -x127.0.0.1:80 -uaming:lishiming 111.com/123.php



域名跳转

需求,把123.com域名跳转到www.123.com,配置如下:

<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
        RewriteEngine on  //打开rewrite引擎功能,打开了下边的功能才会生效
        RewriteCond %{HTTP_HOST} !^www.111.com$  //定义rewrite的条件(什么时候才跳转),当主机名(域名)不是www.111.com时满足条件,他就会跳转
        RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L] //定义rewrite规则,除去域名之外的链接或者其他的也跳转到111.com,当满足上面的条件时,这条规则才会执行,R权重301表示永久重定向,L跳转一次
</IfModule>

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_32

可以再这增加一个测试域名

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_33

 重新加载配置-t , 检测graceful

检查配置文件语法是否正确,加上-t选项
 /usr/local/apache2.4/bin/apachectl -t
重新加载配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

测试

1.先检查阿帕奇有没有加载rewrite模块:

/usr/local/apache2/bin/apachectl -M|grep -i rewrite

2.若无该模块,需要编辑配置文件,搜索:rewrite,删除前面的#

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

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_34

检查配置文件语法是否正确,加上-t选项
 /usr/local/apache2.4/bin/apachectl -t
重新加载配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

3.在查看有没有模板:/usr/local/apache2/bin/apachectl -M|grep -i rewrite

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_35

curl -x127.0.0.1:80 2111.com //状态码为301,你发现他自动跳转到了111.com

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_36



httpd访问日志

访问日志记录用户的每一个请求

可以更改格式:

 vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat 

它提供了两个日志的格式,默认使用的是第二种common

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

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

 把虚拟主机配置文件改成如下: 把默认的common格式改成combined

 <VirtualHost *:80>

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

    ServerName www.123.com

    ServerAlias 123.com

    CustomLog "logs/123.com-access_log" combined

</VirtualHost>

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

 在访问:curl -x127.0.0.1:80 -I 123.com 

 查看日志:tail /usr/local/apache2.4/logs/123.com-access_log 



访问日志不记录静态文件

网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 

 把虚拟主机配置文件改成如下: 

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_37

以什么结尾的标识符

    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 (只要符合这个条件的请求都不会记录到条件里)

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_38

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

测试

mkdir /data/wwwroot/www.123.com/images //创建目录,并在这目录下上传一个图片

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_39

curl -x127.0.0.1:80 -I 123.com/images/123.jpg 

tail /usr/local/apache2.4/logs/123.com-access_log 



访问日志切割

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 

 把虚拟主机配置文件改成如下: 

  <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/111.com-access_%Y%m%d.log 86400" combined env=!img

</VirtualHost>

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

测试

先访问一下:curl -x127.0.0.1:80 111.com/123.php

查看一下生成了新的日志文件:ls /usr/local/apache2.4/logs 

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_40


静态元素过期时间

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了

 增加配置

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_LAMP_41

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

测试

查看一下expaire模块服务是否开启:

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

没开启需要编辑配置文件搜索:expires_module  把前边的#去掉

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

重新加载一下,在查看一下服务:

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

 curl测试,看cache-control: max-age



配置防盗链

通过限制referer来实现防盗链的功能

 配置文件增加如下内容

  <Directory /data/wwwroot/111.com>

        SetEnvIfNoCase Referer "http://aaa.com" local_ref

        SetEnvIfNoCase Referer "http://askapelearn.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>

 curl -e "http://www.aminglinux.com/123.html" 自定义referer



访问控制-Directory

以目录的形式

核心配置文件内容

  <Directory /data/wwwroot/www.111.com/admin/>

        Order deny,allow   以这顺序为主,哪个在前边就先执行哪个

        Deny from all       先拒绝

        Allow from 127.0.0.1  在允许

    </Directory>

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



访问控制-FilesMatch

针对文件或者链接

核心配置文件内容

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

    <FilesMatch  "admin.php(.*)">

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </FilesMatch>

</Directory>



访问控制-禁止php解析

核心配置文件内容

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

        php_admin_flag engine off

        <FilesMatch  (.*)\.php(.*)>

        Order allow,deny

        Deny from all

    </Directory>

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



访问控制-user_agent

user_agent可以理解为浏览器标识

CC是一种访问***,它利用很多个肉鸡访问,是很有规律的访问,这时我们需要用user_agent来控制。

 核心配置文件内容

   <IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR] //NC:表示忽略大小写 OR:或者

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

        RewriteRule  .*  -  [F]

    </IfModule>

 curl -A "123123" 指定user_agent,模拟user_agent



php相关配置

 查看php配置文件位置

 /usr/local/php/bin/php -i|grep -i "loaded configuration file"但是这个不准

模拟一下,在111目录下创建一个phpinfo

编辑:vi index.php

把这个写进去:

<?php

phpinfo(); 

登录网站:111.com/index.php查看它的配置文件,但是他并没有加载,我们需要复制一份:

先进入到他的源码包:cd /usr/local/src/php-7.1.6/

拷贝:cp php.init-development /usr/local/php7/etc/php.ini

刷新配置:/usr/local/apache2.4/bin/apachectl graceful

找到phpinfo所在的路径打开它进行配置

笔记10 LAMP架构(MySQL、mariadb、Apache、PHP5、PHP7、)_架构_42

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

 搜索date.timezone定义时区

 Asia/Shanghai 上海

禁掉一些安全相关的函数

搜索下边这个:默认他是空的,把下边这些安全安全函数粘贴进去 

 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

打开调试错误日志

搜索:display_errors 

把On改成Off 这样他就不会把错误信息输出到浏览器中

配置一个错误日志搜索:log_errors On表示开启,

把日志定义到一个地方,搜索error_log,比如我们放到/tmp/php_errors.log下去,还要定义errors.log的级别,搜索:error_reporting

open_basedir安全选项

 你一台服务器上跑了很多个站点,可能会有一个站点上代码有问题,结果站点被黑了,被人拿到了权  限,然后他会往里***,又跑到另一个站点,但是这时我要加一个open_basedir,他就有可能黑不了,我们可以给它做一个隔离,A网站目录在A目录下B网站在B目录下,这样即使A网站被黑了他也看不到B网站的目录,也不会被牵连进来,

搜索open_basedir

定义格式:/data/wwwroot/111.com:/

如果你这个网站上跑了N多个站点,可以再aoach的虚拟主机里边编辑:

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

加上这个php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"



php动态扩展模块

/usr/local/php/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文件

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

 make && make install

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

 vim /usr/local/php/etc/php.ini  //增加一行配置(可以放到文件最后一行)

extension = redis.so