Lamp环境搭建与配置
知识介绍
L:linux
A:apache
M:mysql
P:php
三个角色可以在同一台机器也可以分开(Apache和PHP要在一起)
工作模式:
PHP是以模块的形式与Apache结合在一起,Apache通过PHP模块到MySQL上取数据,PHP模块拿到数据后再传给Apache,Apache在传输给用户。(这是一个动态请求)
一.MySQL数据库
知识拓展:
了解MySQL,常见的关系型数据库。mariadb是MySQL的一个分支,MySQL分为社区版本,企业版本,通用版本,开发版本,发行候选版本,开放测试版本,内部测试版本
安装MySQL
MySQL的常用安装包:rpm,源码包,二进制免编译包。
1.下载二进制免编译包
下载二进制免编译包mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz ,存放到/usr/local/src目录下(此目录用于存放各种安装包文件)
2.解压免编译包
解压二进制免编译包
[root@wslinux src]# tar -xzvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
将解压完成的数据移动到/usr/local目录下,在/usr/local目录下创建mysql目录用于存放mysql的安装信息
[root@wslinux src]# mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql
注: /usr/local/mysql/目录mysql的安装脚本文件,配置,配置内容都存放在此目录下
3.创建mysql用户
创建一个mysql用户
[root@wslinux mysql]# useradd -s /sbin/nologin mysql
初始数据库
创建一个用于存放数据的目录
[root@wslinux mysql]# mkdir -p /data/mysql
给用户组和用户的权限
[root@wslinux mysql]# chown -R mysql:mysql /data/mysql // 将组和用户都设为mysql
[root@wslinux mysql]# ls -la /data/mysql/
总用量 0
drwxr-xr-x. 2 mysql mysql 6 11月 18 00:14 .
drwxr-xr-x. 3 root root 18 11月 18 00:14 ..
执行脚本
[root@wslinux mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
l --user:指定数据库所属
l --datadir:指定数据库安装位置(放到大空间分区上)
注:系统未带安装工具所以需要安装yum intstall -y perl-Module-Install
安装完成后可以使用echo$?来监测是否成功
若是缺哪些包可以通过yum list查找相关的包
修改mysql配置文件
拷贝文件
[root@wslinux mysql]# cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
注:直接拷贝脚本安装包文件里的配置文件(support-files/my-default.cnf)
因为CentOS7安装完成后会有默认的配置文件(/etc/my.cnf)直接覆盖即可
修改配置文件
[root@wslinux mysql]# vim /etc/my.cnf
...
basedir = /usr/local/mysql //mysql的安装目录
datadir = /data/mysql //存放数据的目录
port = 3306 //mysql的默认端口
server_id = 22 //因为没用到所以,将其写为IP的后三位
socket = /tmp/mysql.sock
...
修改启动脚本
拷贝启动脚本(support-files/mysql.server)拷贝到/etc/init.d/mysqld
修改文件内容
[root@wslinux mysql]# vim /etc/init.d/mysqld
...
basedir=/usr/local/mysql //数据库安装目录
datadir=/data/mysql //数据库位置
...
把启动脚本加入到系统服务项并设置为开机自启
[root@wslinux mysql]# chkconfig --add mysqld
[root@wslinux mysql]# chkconfig mysqld on
尝试启动mysql
[root@wslinux mysql]# service mysqld start //启动mysql
Starting MySQL.Logging to '/data/mysql/wslinux.err'.
....... SUCCESS!
查看mysql是否运行
查看进程
[root@wslinux mysql]# ps -ef |grep mysqld //查看进程
查看端口(安装net-tools)
[root@wslinux mysql]# netstat -ltunp |grep 3306 //查看端口
二.安装Apache
Apache是一个基金会的名称,httpd是我们需要使用的安装包
安装httpd时需要安装apr和apr-util。这两个是一个通用函数库,可以使httpd不关心底层操作系统平台,方便移植
下载安装包
安装httpd-2.4.39.tar.gz,apr-util-1.6.1.tar.gz,apr-1.6.5.tar.gz 这三个安装包
安装安装包
[root@wslinux src]# tar -xzvf apr-1.6.5.tar.gz
[root@wslinux src]# tar -xzvf apr-util-1.6.1.tar.gz
[root@wslinux src]# tar -xzvf httpd-2.4.39.tar.gz
编译脚本
编译apr
[root@wslinux src]# cd apr-1.6.5
[root@wslinux apr-1.6.5]# ./configure --prefix=/usr/local/apr //编译过程报错问题在下面,解决后进行下一步
[root@wslinux apr-1.6.5]# make && make install
问题一
无法编译
需要下载编译工具yum install -y gcc gcc-c++
问题二
缺少libtoolT库,需要安装库文件
[root@wslinux apr-1.6.5]# yum install -y libtool*
安装完成后可以再次编译查看有无报错
[root@wslinux apr-1.6.5]# ./configure --prefix=/usr/local/apr
会提示警告,可以忽略
安装apr-util
[root@wslinux src]# cd apr-util-1.6.1
[root@wslinux apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr //指定安装路径,--with依赖apr安装文件
[root@wslinux apr-util-1.6.1]# make && make install //安装会报错问题如下
问题一
缺少expat.h文件,下载
[root@wslinux apr-util-1.6.1]# yum install -y expat-devel
安装完成后再进行一次make && make install
安装httpd
[root@wslinux src]# cd httpd-2.4.39
[root@wslinux httpd-2.4.39]# ./configure \ //反斜杠可以使一行命令写为多行
> --prefix=/usr/local/apache2.4\
> --with-apr=/usr/local/apr\
> --with-apr-util=/usr/local/apr-util \
> --enable-so \ //表示支持动态拓展的模块,就是一个文件,以.so为后缀的文件
> --enable-mods-shared=most //支持大多数的动态的shared拓展模块
下载过程中会报错,参考问题一
[root@wslinux httpd-2.4.39]# echo $? //完成后可以查看返回值来确定是否成功
0
[root@wslinux httpd-2.4.39]# make -j4 && make install //-j4是多线程安装
//安装过程会报错参考问题二
问题一
缺少pcre-config库(正则表达式的驱动库)
[root@wslinux httpd-2.4.39]# yum install -y pcre-devel
安装完成后重新编译
问题二
识别不了libaprutil文件(出现这种情况有两种可能,一为有文件但是,无法识别;二为没有这个文件)
指定目录未成功
进入目录中的srclib目录中
查看是否有Makefile文件
[root@wslinux httpd-2.4.39]# ls
[root@wslinux httpd-2.4.39]# cd srclib/ //此目录存放编译时依赖的东西
[root@wslinux srclib]# ls
Makefile Makefile.in
将apr和apr-util拷贝到这个目录下来(不要带版本号)
[root@wslinux src]# cp -r apr-1.6.5 httpd-2.4.39/srclib/apr
[root@wslinux src]# cp -r apr-util-1.6.1 httpd-2.4.39/srclib/apr-util
切换到目录下查看make文件,刷新make
[root@wslinux src]# cd httpd-2.4.39
[root@wslinux httpd-2.4.39]# ls
[root@wslinux httpd-2.4.39]# make clean
查看确认是否有apr
重新执行./configure
[root@wslinux httpd-2.4.39]# ./configure --prefix=/usr/local/apache2.4 --enable-so --with-pcre --with-included-apr --enable-modules=most --enable-mpms-share=all --with-mpm=prefork
l --prefix=/usr/local/apache2.4:指定安装目录
l --enable-so:增加
l --with-pcre:依赖正则表达式pcre库
l --with-included-apr:为可迁移性安装apr
l --enable-modules=most:支持动态扩展
l --enable-mpms-share=all:支持其他的安装类型
l --with-mpm=prefork:依赖mpm
编译完成后重新安装
[root@wslinux httpd-2.4.39]# make -j4 && make install
确认是否成功
[root@wslinux httpd-2.4.39]# echo $?
0
成功后切换目录
[root@wslinux local]# cd apache2.4/
[root@wslinux apache2.4]# ls
bin cgi-bin error icons lib man modules
build conf htdocs include logs manual
l bin目录存放可执行文件apxs,httpd,apachectl
l conf 目录比较关键,自定义配置需求是修改该文件
l error报错日志
l htdocs存放默认网页的位置
l log 日志文件
查看Apache加载的模块
[root@wslinux apache2.4]# /usr/local/apache2.4/bin/httpd -M
三.安装PHP
下载PHP安装包
选择安装版本5.6/7.1两种安装版本
解压安装包
[root@wslinux src]# tar -zxvf php-5.6.30.tar.gz
进行编译
[root@wslinux php-5.6.30]# cd php-5.6.30
[root@wslinux php-5.6.30]#./configure --prefix=/usr/local/php //安装PHP的目录
--with-apxs2=/usr/local/apache2.4/bin/apxs //指定apxs工具的目录,作用:自动将扩展模块放到modules目录下,自动在配置文件加上LoadModule
--with-config-file-path=/usr/local/php/etc //配置config-file-path目录,是PHP配置文件的目录
--with-mysql=/usr/local/mysql
--with-pdo-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config
//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 //安装PHP时所需要的模块
--enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif //支持的功能
完整编译代码:
[root@wslinux 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 //结果会报错,参考问题一
问题一:
缺少依赖的组文件
编译时所需要的模块都需要安装(不止libxml2),所需的组件有 libxml2-devel,bzip2,bzip2-devel,libpng,libpng-devel,openssl,openssl-devel,freetype,freetype-devel,opel-release。
代码参考:
[root@wslinux php-5.6.30]# yum install -y libxml2-devel bzip2 bzip2-devel libpng libpng-devel openssl openssl-devel freetype freetype-devel opel-release libjpeg* epel* libmcrypt*
安装完成后再进行一次编译
[root@wslinux 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
完成后测试是否成功
[root@wslinux php-5.6.30]# echo $?
0
安装编译包
[root@wslinux php-5.6.30]# make -j4 && make install
安装成功后可以测试一下返回值查看是否成功
[root@wslinux php-5.6.30]# echo $?
0
查看模块是否加载
[root@wslinux php-5.6.30]# /usr/local/apache2.4/bin/httpd -M
拷贝配置文件
[root@wslinux local]# cd /usr/local/src/php-5.6.30 //切换到PHP下
[root@wslinux php-5.6.30]# cp php.ini-production /usr/local/php/etc/php.ini //拷贝php.ini-pro文件到目录下
[root@wslinux php-5.6.30]# cd /usr/local/php/etc/
[root@wslinux etc]# ls
pear.conf php.ini //对PHP的操作是针对此文件
四. http解析PHP
修改Apache主配置文件/usr/local/apache2.4/conf/httpd.conf
[root@wslinux etc]# cd /usr/local/apache2.4/conf/
[root@wslinux conf]# ls
extra httpd.conf httpd.conf.bak magic mime.types original
[root@wslinux conf]# vim httpd.conf //修改httpd主配置文件
...
#ServerName www.example.com:80 //开放servername注释段,删除#
...
<Directory />
AllowOverride none
Require all denied-->>granted //修改denied为granted,允许这个请求
</Directory>
...
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php //增加此文件
#
...
<IfModule dir_module>
DirectoryIndex index.html index.php //添加索引跳转
</IfModule> //修改完成后保存退出
[root@wslinux conf]# /usr/local/apache2.4/bin/apachectl -t //测试配置文件段是否出错
Syntax OK
[root@wslinux conf]# ps -ef |grep http //查看httpd进程ID
[root@wslinux conf]# kill -9 92268
[root@wslinux conf]# kill -9 92269
... //杀掉httpd进程
[root@wslinux conf]# /usr/local/apache2.4/bin/apachectl start //启动httpd进程
[root@wslinux conf]# ps -ef |grep http //查看进程是否启动
使用curl命令测试是否启动
[root@wslinux conf]# curl localhost
<html><body><h1>It works!</h1></body></html>
curl命令查看的网页即是此文件
[root@wslinux conf]# cd ..
[root@wslinux apache2.4]# cd htdocs/
[root@wslinux htdocs]# ls
index.html
[root@wslinux htdocs]# cat index.html
<html><body><h1>It works!</h1></body></html>
通过windows浏览器查看网页
注:通过浏览器查看网页需要在本机修改host文件C:\WINDOWS\System32\drivers\etc\host
在host文件中添加虚拟机ip地址,同时虚拟机需要关闭防火墙
[root@wslinux apache2.4]# systemctl stop firewalld
[root@wslinux apache2.4]# setenforce 0
创建一个php文件
[root@wslinux htdocs]# vim test.php
<?php
echo"php解析";
?>
注:注意php的语法
测试能否解析PHP文件
[root@wslinux htdocs]# curl localhost/test.php //需要指定php文件
php解析[root@wslinux htdocs]#
通过网页访问php
五. httpd的默认虚拟主机
知识拓展
httpd一个服务下跑多个网站同时在服务器上运行,每个域名都是一个虚拟主机
概念:域名(主机名),DNS,解析域名,hosts
任何一个域名解析到这台机器都可以访问的虚拟主机就是默认虚拟主机
修改主配置文件
[root@wslinux conf]# vim httpd.conf
...
#Include conf/extra/httpd-vhosts.conf //去掉#注释项
...
修改虚拟主机配置文件
[root@wslinux extra]# cp httpd-vhosts.conf httpd-vhosts.conf-bak //对vhost.conf备份
[root@wslinux extra]# vim httpd-vhosts.conf //编辑文件
...
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com" --->> wshuo.com //任意名称
ServerName dummy-host.example.com --->> wshuo.com //任意域名
ServerAlias www.dummy-host.example.com --->> www.wshuo.com www.suor.com //任意别名,可以是多个
ErrorLog "logs/dummy-host.example.com-error_log" --->> wshuo.com //需要跟域名一致
CustomLog "logs/dummy-host.example.com-access_log" common --->> wshuo.com //需要跟域名一致
</VirtualHost>
...
l ServerAdmin:网站(用户)的地址
l DocumentRoot:根目录
l ServerName:域名
l ServerAlias:别名
l ErrorLog:日志
l CustomLog:日志
修改内容如下
配置网站内容
[root@wslinux extra]# cd /usr/local/apache2.4/ //切换至Apache下
[root@wslinux apache2.4]# mkdir docs //创建一个docs网站
[root@wslinux apache2.4]# ls
bin build cgi-bin conf docs error htdocs icons include lib logs man manual modules
[root@wslinux apache2.4]# cd docs
[root@wslinux docs]# mkdir wshuo.com
[root@wslinux docs]# mkdir 111.com
[root@wslinux docs]# vim wshuo.com/index.html //直接修改网站内容 //默认网站的主页
[root@wslinux docs]# /usr/local/apache2.4/bin/apachectl -t //测试是否成功
Syntax OK
[root@wslinux docs]# /usr/local/apache2.4/bin/apachectl graceful //重新加载服务
验证配置是否成功
[root@wslinux docs]# curl -xlocalhost:80 www.wshuo.com
wshuo.com
[root@wslinux docs]# curl -xlocalhost:80 www.abc.com
wshuo.com
[root@wslinux docs]# curl -xlocalhost:80 111.com
111.com
编辑一个php文件
[root@wslinux 111.com]# vim index.php
<?php
echo "111.com";
?>
[root@wslinux 111.com]# curl -xlocalhost:80 111.com/index.php
111.com[root@wslinux 111.com]#
六. 用户认证
在浏览器打开网站之前弹出对话框要求输入用户名和密码登录后才能访问网站
安全性高。
配置用户认证
[root@wslinux 111.com]# cd /usr/local/apache2.4/conf/extra/
[root@wslinux extra]# vim httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/wshuo.com"
ServerName wshuo.com
ServerAlias www.wshuo.com www.suor.com www.abc.com
<Directory /usr/local/apache2.4/docs/wshuo.com> //指定认证目录
AllowOverride AuthConfig //打开认证开关
AuthName "wshuo.com user auth" //自定义认证的名字
AuthType Basic //认证类型,一般为Basic
AuthUserFile /usr/local/apache2.4/docs/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部用户
</Directory>
ErrorLog "logs/wshuo.com-error_log"
CustomLog "logs/wshuo.com-access_log" common
</VirtualHost>
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t //检查配置是否出错
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful //重新加载服务
生成密码文件
[root@wslinux extra]# /usr/local/apache2.4/bin/htpasswd -cm /usr/local/apache2.4/docs/.htpasswd suor
New password: 000000
Re-type new password: 000000
Adding password for user suor
l -c:创建一个用户
l -m:创建一个用户密码
测试配置是否成功
[root@wslinux extra]# curl -xlocalhost:80 wshuo.com -I //会报错
[root@wslinux extra]# curl -xlocalhost:80 -u suor:000000 wshuo.com -I //需要使用-u指定用户密码
访问网址
注:访问网址时会出错,需要修改hosts文件,将域名添加到host里
输入账号密码显示访问成功
针对单个文件做用户认证
[root@wslinux extra]# vim httpd-vhosts.conf
....
<FilesMatch admin.php> //针对单个文件使用FilesMatch
AllowOverride AuthConfig
AuthName "wshuo.com user auth"
AuthType Basic
AuthUserFile /usr/local/apache2.4/docs/.htpasswd
require valid-user
</FilesMatch>
....
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t //测试是否成功
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful //重启该服务
创建一个admin.php文件
[root@wslinux extra]# cd /usr/local/apache2.4/docs/wshuo.com/
[root@wslinux wshuo.com]# ls
index.html
[root@wslinux wshuo.com]# vim admin.php
<?php
echo "wshuo.com- -admin.php";
?>
七. 域名跳转
域名重定向,更换服务器,维护老用户
修改配置文件
[root@wslinux src]# cd /usr/local/apache2.4/conf/extra/
[root@wslinux extra]# vim httpd-vhosts.conf
...
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.wshuo.com"
ServerName www.wshuo.com
ServerAlias wshuo.com
<IfModule mod_rewrite.c> //支持模块
RewriteEngine on //开启模块功能
RewriteCond %{HTTP_HOST} !^wshuo.com$ //定义条件,主机名
RewriteRule ^/(.*)$ http://wshuo.com/$1 [R=301,L] //定义规则,当满足条件时,规则执行
</IfModule>
...
测试是否成功
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t //测试
AH00112: Warning: DocumentRoot [/usr/local/apache2.4/docs/www.wshuo.com] does not exist
Syntax OK //没有创建该网站需要创建
[root@wslinux extra]# mkdir -p /usr/local/apache2.4/docs/www.wshuo.com //创建网站
[root@wslinux extra]# cd /usr/local/apache2.4/docs/www.wshuo.com //切换到该目录
[root@wslinux www.wshuo.com]# vim index.html //创建内容
www.wshuo.com
[root@wslinux www.wshuo.com]# vim wshuo.php //创建php文件
<?php
echo "www.wshuo.com/ws.php";
?>
[root@wslinux www.wshuo.com]# /usr/local/apache2.4/bin/apachectl -t //测试
Syntax OK
[root@wslinux www.wshuo.com]# /usr/local/apache2.4/bin/apachectl graceful //重启
测试有无rewirte模块,若无需要添加
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite 查看有无该模块
[root@wslinux conf]# vim httpd.conf
...
#LoadModule rewrite_module modules/mod_rewrite.so //解开注释
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
rewrite_module (shared)
测试是否成功
Location:表示跳转的网站
状态码:
301永久跳转
401 未授权,需要身份验证
200 正常访问
404 无此网页
403 拒绝访问,设置granted
八. 访问日志
查看日志
[root@wslinux extra]# cd /usr/local/apache2.4/logs/
[root@wslinux logs]# ls
111.com-access_log access_log httpd.pid wshuo.com-error_log
111.com-error_log error_log wshuo.com-access_log
[root@wslinux logs]# cat wshuo.com-access_log
l HEAD是因为执行curl命令时加了-I参数
l GET 是不增加I可以在日志后显示大小
切换目录至主配置文件
[root@wslinux conf]# pwd
/usr/local/apache2.4/conf
[root@wslinux conf]# vim httpd.conf
变量:
l h:host来源IP
l l:login的用户
l u:使用的用户
l t:time时间
l r:表示行为
l s:状态码
l b:bit字节大小
l "%{User-Agent}i :客户端的用户代理,表示用户访问网站时需要东西来访问,通过浏览器访问浏览器就是Agent,通过curl命令curl就是Agent
l "%{Referer}i:访问网站进入网站的主页首页,点击第二个网页时的第一个网络地址
修改日志显示方式
[root@wslinux conf]# vim extra/httpd-vhosts.conf
...
ErrorLog "logs/wshuo.com-error_log"
CustomLog "logs/wshuo.com-access_log" common --> combined //将common改为combined即可
...
可以通过curl命令和浏览器分别查看然后观察日志变化
[root@wslinux logs]# cat wshuo.com-access_log
九. 访问日志不记录静态文件
配置文件内容
[root@wslinux extra]# vim 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/wshuo.com-access_log" combined env=!img
...
注:上述配置文件表示不记录以上述结尾的内容。
十. 访问日志的切割
日志一直记录迟早要占满磁盘,所以有必要让他自动切割并删除老旧日志文件
修改虚拟主机配置文件
[root@wslinux extra]# vim httpd-vhosts.conf
...
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/www.wshuo.com-access_%Y%m%d.log 86400" combined env=!img-request //httpd自带日志切割工具 -l指定时间格式 logs目录 切割名
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
时间格式:PDT CST中国格式时间 UTC美国格式时间
十一. 配置静态元素过期时间
浏览器访问静态文件时会把静态文件缓存到本地电脑里
[root@wslinux extra]# vim httpd-vhosts.conf
...
<IfModule mod_expires.c>
ExpiresActive on //开启服务
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/ipeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hours"
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>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
注:””内用来定义时间
问题一
无法使用,需要查看主配置文件查找是否有exprie模块加载
[root@wslinux conf]# vim httpd.conf
...
#LoadModule expires_module modules/mod_expires.so //查找关键字expires 解开注释
...
[root@wslinux conf]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux conf]# /usr/local/apache2.4/bin/apachectl graceful
十二. 配置防盗链
通过限制referer来实现防盗链功能
配置文件
[root@wslinux extra]# vim httpd-vhosts.conf
...
<Directory /usr/local/apache2.4/docs/www.wshuo.com> //定义目录等同于DocumentRoot
SetEnvIfNoCase Referer "http://www.wshuo.com" local_ref
SetEnvIfNoCase Referer "http://wshuo.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>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
注:SetEnvIfNoCase表示判断
SetEnvIfNoCase Referer设置一个白名单
filesmatch表示以上类型不设置白名单
Order表示定义一个顺序
Allow–>>Deny allow再前表示先允许后拒绝,deny在前表示先拒绝后允许
filesmatch内容表示以上占点格式是允许的,除这些外是不允许的
使用其他网站访问不能访问(提示403)
[root@wslinux extra]# curl -e "http://www.douxue.com/123.php" -xlocalhost:80 www.wshuo.com/images/linux.png -I
使用白名单访问是可以访问的(提示200)
[root@wslinux extra]# curl -e "http://www.wshuo.com/123.php" -xlocalhost:80 www.wshuo.com/images/linux.png -I
[root@wslinux extra]# curl -xlocalhost:80 www.wshuo.com/images/linux.png -I
十三. 访问控制白名单IP
修改配置文件
[root@wslinux extra]# vim httpd-vhosts.conf
...
<Directory /usr/local/apache2.4/docs/www.wshuo.com/admin>
Order deny,allow //谁在前先执行谁
Deny from all
Allow from 192.168.200.22
</Directory>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
测试
[root@wslinux www.wshuo.com]# pwd
/usr/local/apache2.4/docs/www.wshuo.com
[root@wslinux www.wshuo.com]# mkdir admin
[root@wslinux www.wshuo.com]# cp wshuo.php admin
[root@wslinux www.wshuo.com]# curl -x192.168.200.22:80 www.wshuo.com/admin/wshuo.php -I
HTTP/1.1 403 Forbidden //发现不可访问
Date: Sun, 22 Nov 2020 04:11:51 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
[root@wslinux www.wshuo.com]# curl -x127.0.0.1:80 www.wshuo.com/admin/wshuo.php -I
HTTP/1.1 200 OK //发现访问正常
Date: Sun, 22 Nov 2020 04:12:29 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
访问控制
[root@wslinux extra]# vim httpd-vhosts.conf
...
<Directory /usr/local/apache2.4/docs/www.wshuo.com>
<FilesMatch admin.php(.*)> //新增
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
测试
[root@wslinux extra]# cp /usr/local/apache2.4/docs/www.wshuo.com/wshuo.php /usr/local/apache2.4/docs/www.wshuo.com/admin.php
[root@wslinux extra]# curl -x127.0.0.1:80 www.wshuo.com/admin.php -I
[root@wslinux extra]# curl -x127.0.0.1:80 www.wshuo.com/admin.php?1233 -I //仍然可以访问成功
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/admin.php -I //无法访问
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/admin.php?1233 -I //无法访问
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/admin/wshuo.php -I
注:这种配置的好处在于可以针对性的安装需求来做
十四. 访问控制禁止解析PHP
配置文件内容
针对单个目录禁止解析php
[root@wslinux extra]# vim httpd-vhosts.conf
..
<Directory /usr/local/apache2.4/docs/www.wshuo.com/upload>
php_admin_flag engine off //关掉解析开关
</Directory>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
[root@wslinux extra]# mkdir /usr/local/apache2.4/docs/www.wshuo.com/upload
[root@wslinux extra]# cp /usr/local/apache2.4/docs/www.wshuo.com/wshuo.php /usr/local/apache2.4/docs/www.wshuo.com/upload
访问目录
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/upload/wshuo.php
<?php
echo "www.wshuo.com/ws.php";
?>
针对单个文件禁止解析php
[root@wslinux extra]# vim httpd-vhosts.conf
...
<Directory /usr/local/apache2.4/docs/www.wshuo.com/upload>
php_admin_flag engine off
<FilesMatch (.*)\.php(.*)>
Order allow,deny
Deny from all
</FilesMatch>
</Directory>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
测试
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/upload/wshuo.php
在网页上测试
允许本机访问
[root@wslinux extra]# vim httpd-vhosts.conf
...
<Directory /usr/local/apache2.4/docs/www.wshuo.com/upload>
php_admin_flag engine off
<FilesMatch (.*)\.php(.*)>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
测试
[root@wslinux extra]# curl -x127.0.0.1:80 www.wshuo.com/upload/wshuo.php -I //本机
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/upload/wshuo.php //其他
本机
其他
十五. 访问控制-user_agent
user_agent可以理解为浏览器标识,限制user_agent来防止CC攻击
配置文件内容
禁止curl访问,允许网页访问
[root@wslinux extra]# vim httpd-vhosts.conf
...
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
测试能否访问
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/upload/wshuo.php
浏览器可以访问
禁止网页访问,允许curl访问
[root@wslinux extra]# vim httpd-vhosts.conf
...
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*Mozilla.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
...
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux extra]# /usr/local/apache2.4/bin/apachectl graceful
测试
[root@wslinux extra]# curl -x192.168.200.22:80 www.wshuo.com/upload/wshuo.php
www.wshuo.com/ws.php
浏览器不能被访问
-A使用:自定义使用一个usr_agent
[root@wslinux extra]# curl -A "ws" -x192.168.200.22:80 www.wshuo.com/upload/wshuo.php
www.wshuo.com/ws.php
十六. PHP基础配置
查看php配置文件位置
[root@wslinux extra]# /usr/local/php/bin/php -i|grep -i "loaded configuration file"
Loaded Configuration File => /usr/local/php/etc/php.ini
问题一
若查找不成功出现指向none提示证明没有拷贝
[root@wslinux php-5.6.30]# cp php.ini-production /usr/local/php/etc/
[root@wslinux php-5.6.30]# mv /usr/local/php/etc/php.ini-production /usr/local/php/etc/php.ini //需要改名
使用函数(phpinfo)查看php配置
[root@wslinux php-5.6.30]# vim /usr/local/apache2.4/docs/www.wshuo.com/wshuo.php
<?php
phpinfo();
?>
访问http://www.wshuo.com/wshuo.php来查看配置文件
去除使用/usr/local/php/bin/php -i|grep -i "loaded configuration file"时提示的警告
[root@wslinux php-5.6.30]# vim /usr/local/php/etc/php.ini
...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone = Asia/Shanghai //修改此行PHP的注释符是“;”去掉分号并设置时区
修改成功后报错会消失
disable_functions 禁用这些方法
[root@wslinux php-5.6.30]# vim /usr/local/php/etc/php.ini
...
disable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,s
ystem,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,in
i_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_s
ocket_server,popen,proc_open,proc_close,phpinfo //默认为空,需要添加
...
十七. 日志相关配置
配置日志
[root@wslinux php-5.6.30]# vim /usr/local/php/etc/php.ini
disable_functions中添加phpinfo
在浏览器查看网站会提示报错
需要将报错信息隐藏
[root@wslinux local]# vim php/etc/php.ini
...
display_errors = On -->> Off //将on改为off即可
...
配置错误日志
[root@wslinux local]# vim php/etc/php.ini
...
log_errors = On //将开关打开
...
;error_log = /tmp/php_errors.log //默认日志存放位置路径
...
; Common Values:
; E_ALL (Show all errors, warnings and notices including coding standards.)
; E_ALL & ~E_NOTICE (Show all errors, except for notices)
; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL //设置用户等级
...
[root@wslinux local]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux local]# /usr/local/apache2.4/bin/apachectl graceful
查看文件所属组
[root@wslinux local]# ll /tmp/php_errors.log
-rw-r--r--. 1 daemon daemon 815 11月 22 18:05 /tmp/php_errors.log
注:daemon是指Apache
查看进程
[root@wslinux local]# ps aux |grep httpd
问题一
当日志出不来的时候可以创建一个php log
[root@wslinux local]# touch /tmp/phperrors.log; chmod 777 /tmp/phperror.log
网页上的警告文件存放在/tmp/php_errors.log
问题二
网页无法访问,查看日志提示报错可以发现php函数语法出错需要修改
[root@wslinux local]# cat /tmp/php_errors.log
...
[22-Nov-2020 18:17:48 Asia/Shanghai] PHP Fatal error: Call to undefined function pinfo() in /usr/local/apache2.4/docs/www.wshuo.com/wshuo.php on line 2
十八. 配置open_basedir
open_basedir(安全选项) 用来定义将网站限定在某一目录做隔离防止其他网站目录被黑
[root@wslinux local]# vim php/etc/php.ini
...
; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
; http://php.net/open-basedir
;open_basedir = /usr/local/apache2.4/docs/www.wshuo.com/admin:/tmp //允许访问该网站内容
[root@wslinux local]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux local]# /usr/local/apache2.4/bin/apachectl graceful
设置完成可以查看网页
admin可以查看
upload不能查看
状态码为500表示不能访问
缺点:当禁用一个目录时其所下所有网站都将被禁用所以对虚拟主机进行配置
十九. 虚拟主机配置open_basedir
修改配置文件
[root@wslinux conf]# vim extra/httpd-vhosts.conf
...
php_admin_value open_basedir "/usr/local/apache2.4/docs/www.wshuo.com/upload:/tmp/" //需要指定想要开放的目录和站点
...
[root@wslinux conf]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux conf]# /usr/local/apache2.4/bin/apachectl graceful
测试
使用curl命令访问upload
[root@wslinux conf]# curl -xlocalhost:80 www.wshuo.com/upload/wshuo.php
www.wshuo.com/ws.php
使用curl命令访问其他目录
[root@wslinux conf]# curl -xlocalhost:80 www.wshuo.com/admin/wshuo.php -I
HTTP/1.0 500 Internal Server Error //报错状态码500 不能被访问
Date: Sun, 22 Nov 2020 10:47:11 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Connection: close
Content-Type: text/html; charset=UTF-8
使用网页访问其他目录
二十.PHP动态扩展模块安装
下载解压redis安装包 (redis-2.2.5.tgz)
[root@wslinux conf]# cd /usr/local/src/
[root@wslinux src]# tar -zxvf redis-2.2.5.tgz
[root@wslinux src]# cd redis-2.2.5
生成./configure文件
[root@wslinux redis-2.2.5]# /usr/local/php/bin/phpize //需要先执行此文件
执行./configure文件
[root@wslinux redis-2.2.5]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@wslinux redis-2.2.5]# echo $?
0
[root@wslinux redis-2.2.5]# make
[root@wslinux redis-2.2.5]# make install
查看生成目录
[root@wslinux redis-2.2.5]# /usr/local/php/bin/php -i | grep extension_dir
extension_dir => /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226 => /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226
sqlite3.extension_dir => no value => no value
查看有无模块
[root@wslinux redis-2.2.5]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
opcache.so redis.so
修改配置文件
[root@wslinux redis-2.2.5]# vim /usr/local/php/etc/php.ini
...
extension = redis.so //在配置文件结尾增加此行
[root@wslinux redis-2.2.5]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@wslinux redis-2.2.5]# /usr/local/apache2.4/bin/apachectl graceful
[root@wslinux redis-2.2.5]# /usr/local/php/bin/php -m |grep redis
redis