image.pngimage.png

一、安装LAMP,基础配置解析PHP

1.Linux的网络配置

1. 打开VMware 虚拟网络编辑器 选择相应的网络
NAT或host-only
2. 打开Windows对应的虚拟网卡
vmnet1(host-only) 和 vmnet8(NAT)
3. 配置虚拟网络编辑器对应的ip段
192.168.100.0
4. 进入Linux,打开终端,修改配置文件

  1. vim /etc /sysconfig /network-scripts/ifcfg-ens33
  2. **修改内容如下**:
  3. BOOTPROTO=static ###
  4. ONBOOT=yes ###
  5. IPADDR=192.168.100.10 ###
  6. NETMASK="255.255.255.0" # centos7可以不配
  7. GATEWAY=192.168.100.2 ###
  8. DNS1=8.8.8.8 ###
  9. DNS2=114.114.114.114 # 可以不配置

5. 重启网络
systemctl restart network
克隆如果网络启动不了:
查看

  1. systemctl status network,如果是control process exit这个错误,需要关闭网络管理工具
  2. systemctl stop NetworkManager //临时关闭 即时生效
  3. systemctl disable NetworkManager //永久关闭 重启以后才生效,要不然光设置此项没效果

6. 关闭Linux的防火墙

  1. systemctl stop firewalld //临时修改
  2. systemctl disable firewalld //永久修改

7 . 关闭selinux

  1. getenforce //查看
  2. setenforce 0 //临时修改
  3. vim /etc/selinux/config //永久修改
  4. SELINUX=disabled

8 . 修改主机名 为lamp
一次性修改主机名 : hostnamectl set-hostname lamp
su – 生效
image.png
image.pngimage.png//主机网卡的配置与VMware的虚拟主机在同一网段即可

2.安装MySQL

(1)下载MySQL安装包

  1. cd /usr/local/src/ //进入到此目录下载软件包
  2. wget http://mirrors.sohu.com/mysql/MySQL-5.6/ mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
  3. //使用wget命令下载MySQL软件包

(2)解压下载好的软件包

  1. tar -xzvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz

(3)安装和配置MySQL

  1. mkdir /usr/local/mysql //创建一个MySQL的目录
  2. mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql/ //把解压好的MySQL文件移动到创建的目录下
  3. cd /usr/local/mysql
  4. useradd -s /sbin/nologin mysql //为此创建一个用户
  5. mkdir -p /data/mysql ; chown -R mysql:mysql /data/mysql //创建datadir并且更改权限
  6. ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql //--user表示定义数据库的以哪个用户的身份运 --datadir表示定义数据库的安装目录
  7. yum install -y perl-Mdoule-Install //如果无法运行可以安装Perl脚本再试一遍
  8. cp support-file/my-default.cnf /etc/my.cnf
  9. vim /etc/ myt.cnf //修改配置文件
  10. #cp support-files/mysql.server /etc/init.d/mysql //复制启动脚本文件
  11. #Vim /etc/init.d/mysql //修改启动脚本

image.png
image.png

(4)文件配置完成,安装成功

  1. #service mysqld start //启动MySQL 如果反馈为success则启动成功

image.png

3.安装Apache

(1)下载文件:

①apr-1.6.5
②httpd-2.4.48.tar.gz
③apr-util-1.6.1.tar.gz apr-1.6.5
可以使用wget命令进行下载:

  1. wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.48.tar.gz
  2. wget http://mirrors.hust.edu.cn/apache/apr/apr-1.6.5.tar.gz
  3. wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.6.5.tar.gz

(2)解压下载好的文件:

  1. tar -xzvf httpd-2.4.48.tar.gz
  2. tar -xzvf apr-util-1.6.1.tar.gz
  3. tar -xzvf apr-1.6.5

(3)安装和配置

  1. cd /usr/local/src/apr-1.6.5
  2. ./configure --prefix=/usr/local/apr //等待文件编译完成(如果出现错误的话,缺少什么库就是用yum安装什么库)
  3. make && make install
  4. cd /usr/local/src/apr-util-1.6.1
  5. ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr //继续编译文件
  6. make &&make install
  7. cd /usr/local/src/http-2.4.39
  8. ./configure \ //这里的反斜杠是脱义字符,加上它我们可以把一行命令写成多行 --#prefix=/usr/local/apache2.4 \ --with-apr=/usr/local/apr \ --with-apr-util=/usr/local/apr-util \ --enable-so \ --enable-mods-shared=most //继续编译
  9. make && make install
  10. cp -r apr-1.6.5 httpd-2.4.48/srclib/apr //拷贝apr安装文件
  11. cp -r apr-util-1.6.1 httpd-2.4.48/srclib/apr-util //拷贝apr-util安装文件
  12. cd /usr/local
  13. du -sh apache2.4/ //可以查看apache的安装
  14. /usr/local/apache2.4/bin/httpd -M //查看加载的模块

image.pngimage.png//可以看到已经安装成功
//编译文件期间如果出现没有可使用的库可以直接使用 yum install -y 进行安装

4.安装PHP

(1)下载相关文件

  1. 使用wget下载PHP5
  2. wget http://cn2.php.net/distributions/php-5.6.30.tar.gz

// /usr/local/src下执行

(2)解压文件

  1. tar -zxvf php-5.6.30.tar.gz

// /usr/local/src下执行

(3)安装与配置PHP

  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
  7. yum install -y libmcrypt-devel

//提前安装PHP的库文件

  1. ./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
  2. make && make install

// 编译PHP文件/usr/local/src/php-5.6.30下执行

5.httpd解析PHP

(1)编辑配置文件

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

//编辑httpd的主配置文件
image.png
// 搜索ServerName,把ServerName www.example.com:80去掉注释符#
image.png
// Require all denied改为Require all granted 允许请求访问
image.png
// 搜索AddType application/x-gzip .gz .tgz,在下面添加一行 AddType application/x-httpd-php .php;image.png
// 在配置文件后加index.php

(2)测试安装

①测试配置文件

  1. /usr/local/apache2.4/bin/apachectl -t // 检验配置文件是否正确:Syntax OK
  2. /usr/local/apache2.4/bin/apachectl start // 启动httpd命令
  3. netstat -lnp |grep httpd // 查看是否启动

② 测试是否正确解析PHP

  1. vim /usr/local/apache2.4/htdocs/test.php
  2. <?
  3. echo php解析正确”
  4. ?>

image.png
//编写一个测试脚本

  1. curl localhost/test.php

php解析正确
//如显示此信息则PHP解析正确

(3)安装成功

curl localhost
image.png

二、Apache配置

1.默认虚拟主机

(1)虚拟主机的配置

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf // 编辑虚拟主机配置文件
  2. ExpiresByType image/png "access plus 24 hours"
  3. ExpiresByType text/css "now plus 2 hour"
  4. ExpiresByType application/x-javascript "now plus 2 hours"
  5. ExpiresByType application/javascript "now plus 2 hours"
  6. ExpiresByType application/x-shockwave-flash "now plus 2 hours"
  7. ExpiresDefault "now plus 0 min"
  8. </IfModule>
  9. <IfModule mod_rewrite.c>
  10. RewriteEngine on
  11. RewriteCond %{HTTP_HOST} !^111.com$
  12. RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
  13. </IfModule>
  14. <Directory /usr/local/apache2.4/docs/abc.com>
  15. AllowOverride AuthConfig
  16. AuthName "abc.com user auth"
  17. AuthType Basic
  18. AuthUserFile /usr/local/apache2.4/docs/.htpasswd
  19. require valid-user
  20. </Directory>
  21. SetEnvIf Request_URI ".*\.gif$" img
  22. SetEnvIf Request_URI ".*\.jpg$" img
  23. SetEnvIf Request_URI ".*\.png$" img
  24. SetEnvIf Request_URI ".*\.bmp$" img
  25. SetEnvIf Request_URI ".*\.swf$" img
  26. SetEnvIf Request_URI ".*\.js$" img
  27. SetEnvIf Request_URI ".*\.css$" img
  28. CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/www.111.com-access_%Y%m%d.log 86400" combined env=!img
  29. ErrorLog "logs/111.com-error_log"
  30. CustomLog "logs/abc.com-access_log" common
  31. </VirtualHost>
  32. <VirtualHost *:80>
  33. DocumentRoot "/usr/local/apache2.4/docs/abc.com"
  34. ServerName abc.com
  35. ServerAlias www.abc.com
  36. ErrorLog "logs/abc.com-error_log"
  37. CustomLog "logs/abc.com-access_log" common
  38. </VirtualHost>
  39. </local/apache2.4/conf/extra/httpd-vhosts.conf" 96L, 3666C 96,0-1 Bot
  40. # ExpiresByType image/jpeg "access plus 24 hours"
  41. # ExpiresByType image/png "access plus 24 hours"
  42. # ExpiresByType text/css "now plus 2 hour"
  43. # ExpiresByType application/x-javascript "now plus 2 hours"
  44. # ExpiresByType application/javascript "now plus 2 hours"
  45. # ExpiresByType application/x-shockwave-flash "now plus 2 hours"
  46. # ExpiresDefault "now plus 0 min"
  47. # </IfModule>
  48. # <IfModule mod_rewrite.c>
  49. # RewriteEngine on
  50. # RewriteCond %{HTTP_HOST} !^111.com$
  51. # RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
  52. # </IfModule>
  53. # <Directory /usr/local/apache2.4/docs/abc.com>
  54. # AllowOverride AuthConfig
  55. # AuthName "abc.com user auth"
  56. # AuthType Basic
  57. # AuthUserFile /usr/local/apache2.4/docs/.htpasswd
  58. # require valid-user
  59. # </Directory>
  60. # SetEnvIf Request_URI ".*\.gif$" img
  61. # SetEnvIf Request_URI ".*\.jpg$" img
  62. # SetEnvIf Request_URI ".*\.png$" img
  63. # SetEnvIf Request_URI ".*\.bmp$" img
  64. # SetEnvIf Request_URI ".*\.swf$" img
  65. # SetEnvIf Request_URI ".*\.js$" img
  66. # SetEnvIf Request_URI ".*\.css$" img
  67. CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/www.111.com-access_%Y%m%d.log 86400" combined env=!img
  68. ErrorLog "logs/111.com-error_log"
  69. # CustomLog "logs/abc.com-access_log" common
  70. </VirtualHost>
  71. <VirtualHost *:80>
  72. DocumentRoot "/usr/local/apache2.4/docs/abc.com"
  73. ServerName abc.com
  74. ServerAlias www.abc.com
  75. ErrorLog "logs/abc.com-error_log"
  76. CustomLog "logs/abc.com-access_log" common
  77. </VirtualHost>

(2)配置验证

  1. curl -x192.168.100.10:80 111.com
  2. curl -x192.168.100.10:80 www.abc.com

image.png // 图为验证成功

2.用户认证

(1)用户认证的配置

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd test // htpasswd为创建用户的工具,-ccreat // -m为指定密码加密的方式为MD5 // data/.htpasswd为密码文件,// aming为创建的用户。第一次执行需加-c
  3. /usr/local/apache2.4/bin/apachectl -t
  4. :Syntax OK // 验证配置文件
  5. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

编辑本地的hosts
image.png// 添加图中文字到本地hosts

  1. curl -x127.0.0.1:80 www.123.com //状态码为401
  2. curl -x127.0.0.1:80 -uytl:passwd www.123.com //状态码为200

3.域名跳转

(1)配置相关文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成要实现跳转,需要rewrite模块的支持,所以查看是否安装该模块。如果没有则还需要一些配置:
  2. /usr/lkocal/apache2.4/bin/apachectl -M |grep -i rewrite // 如果没有输出则需要继续编辑
  3. vim /usr/local/apache2.4/conf/httpd.conf

image.png
// 搜索rewrite,把前面#去掉

  1. /usr/local/apache2.4/bin/apachectl -t
  2. /usr/local/apache2.4/bin/apachectl graceful

(2)验证配置

  1. /usr/local/apache2.4/bin/apachectl -M |grep -i rewrite
  2. Rewrite_module(share)

image.png
//有这行输出,说明正常加载rewrite模块

  1. curl -x192.168.100.10:80 111.com
  2. www.111.com
  3. curl -x192.168.100.10:80 888.com
  4. www.111.com

image.png
// 域名跳转成功

4.访问日志

(1)配置文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/apachectl -t
  3. :Syntax OK // 验证配置文件
  4. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

  1. tail /usr/local/apache2.4/logs/111.com-access_log

image.png

5.访问日志不记录静态文件

(1)配置文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/apachectl -t
  3. :Syntax OK // 验证配置文件
  4. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

  1. curl -x192.168.100.10:80 -I 111.com
  2. ls /usr/local/apache2.4/logs/

image.png

6.访问日志切割

(1)配置文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/apachectl -t
  3. :Syntax OK // 验证配置文件
  4. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

123.com-access~~日志中只有aming.txt的请求日志,但没有aming.jpg的
image.png

7.静态元素过期时间

(1)配置文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/apachectl -t
  3. :Syntax OK // 验证配置文件
  4. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

  1. /usr/local/apache2.4/bin/apachectl -M |grep -i expires //没有输出则说明当前httpd并不支持expires模块,所以需要修改配置文件

image.png

  1. vim /usr/local/apache2.4/conf/httpd.conf //搜索关键词expires,找到这一行
  2. LoadModule expires_ module modules/mod_ expires .so //把前面#删掉

image.png

  1. /usr/local/apache2.4/bin/apachectl graceful
  2. /usr/local/apache2.4/bin/apachectl -M|grep -i expires
  3. expires_moduleshare // 有这行输出说明正确加载expires模块
  4. curl -x192.168.100.10:80 -I www.111.com/linux.jpg // max-age=86400说明将缓存86400秒,max-age=0说明没有该类型缓存文件

8.配置防盗链

(1)配置文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/apachectl -t
  3. Syntax OK // 验证配置文件
  4. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

  1. curl -x192.168.100.10:80 -I -e http://www.testdomain.com/testdomain.txt http://testdomain.com/aming.jpg
  2. 状态码200
  3. curl -x192.168.100.10:80 -I -e http://www.1234.com/1.txt http://testdomain.com/aming.jpg
  4. 状态码403
  5. curl -x192.168.100.10:80 -I -ehttp://www.testdomain.com/123.txt http://www.123.com/index.html
  6. 状态码200

9.访问控制

(1)目录配置

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/apachectl -t
  3. Syntax OK // 验证配置文件
  4. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

  1. mkdir /data/wwwroot/testdomain.com/admin //创建admin目录,模拟网站后台
  2. echo admin" > /data/wwwroot/testdomain.com/admin/index.html
  3. > /usr/local/apache2. 4/1ogs/123.com-access_20170319.1og / // 验证成功

10.访问控制-禁止解析PHP

(1)配置文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  2. /usr/local/apache2.4/bin/apachectl -t
  3. Syntax OK // 验证配置文件
  4. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

  1. curl -x192.168.100.10:80 111.com /upload/1.php

image.png

11.访问控制-user_agent

(1)配置文件

  1. vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf
  2. <IfModule mod_ rewrite.c>
  3. RewriteEngine on
  4. RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
  5. RewriteCond %{HTTP_USER_AGENT} .*baidu.com.*[NC]
  6. RewriteRule .* - [F]
  7. </IfModule>
  8. // 配置文件的内容在上次的默认主机配置中已经全部配置完成
  9. /usr/local/apache2.4/bin/apachectl -t
  10. Syntax OK // 验证配置文件
  11. /usr/local/apache2.4/bin/apachectl graceful // 再次启动Apache

(2)验证配置

  1. curl -I -x192.168.100.10:80 111.com/upload/1.php
  2. 状态码403
  3. curl -A "123123" I -x192.168.100.10:80 111.com/upload/1.php
  4. 状态码200

三、PHP配置

1.PHP基础配置

查看PHP配置文件得位置

  1. /usr/local/php/bin/php -i |grep -i "loaded configuration file"
  2. vim /usr/local/php/etc/php.ini

搜索disable_functions,编辑如下:

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

定义date.timezone,减少警告

  1. vim /usr/local/php/bin/php

找到date. timezone设置如下:

  1. date.timezone = Asia/Shanghai

2.日志相关配置

配置error_log

  1. vim /usr/local/php/etc/php. ini
  2. // 记录错误日志:搜索log_errors, 改成如下
  3. log_errors=On
  4. // 记录错误日志目录位置:搜索error. log,改为
  5. error_log = /var/log/php/php_errors.log
  6. // 记录错误日志级别:搜索error_reporting 改为
  7. error_reporting = E ALL & ~E_ NOTICE
  8. // 再搜索display_errors,改为
  9. display_errors = Off

配置完php.ini,可以额外配置:

  1. mkdir /var/log/php
  2. chmod 777 /var/log/php
  3. /usr/local/apache2.4/bin/apachectl graceful
  4. vim /data/wwwroot/111.com/test.php
  5. <?php
  6. echo 111
  7. curl -A "123" -I -x192.168.100.10:80 111. com/test .php
  8. 状态码500
  9. cat /var/1og/php/php_errors.log // 显示错误日志

3.配置open_basedir

先在php.ini中设置open_basedir:

  1. vim /usr/local/php/etc/php.ini // 搜索open_basedir,改成如下
  2. open_ basedir = /tmp:/data/wwwroot/testdomain.com //因为限制了PHP只能在/tmp和/data/wwwroot/111.com两个目录下面活动,演示如下:
  3. /usr/1ocal/apache2.4/bin/ apachectl graceful
  4. cp /usr/local/apache2.4/htdocs/1.php /data/wwwroot/111.com/
  5. curl -x127.0.0.1:80 -I 111.com/1.php
  6. 状态码500

4.虚拟主机配置open_basedir

  1. vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
  2. <VirtualHost *:80>
  3. DocumentRoot "/data/wwwroot/testdomain.com"
  4. ServerName www.testdomain.com
  5. ServerAlias testdomain.com
  6. CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined
  7. php_admin_value open_basedir "/data/wwwroot/testdomain.com/:/tmp/"
  8. </VirtualHost>

image.png
// 起作用的是php_admin_value,它定义了php.ini的参数

四、PHP扩展模块安装

  1. /usr/local/php/bin/php -m // 如何查看PHP加载了哪些模块
  2. cd /usr/local/src
  3. wget http://pecl.php.net/get/redis-2.2.5.tgz // 安装一个新的redis
  4. tar -zxvf redis-2.2.5.tgz
  5. mv redis-2.2.5 phpredis-develop
  6. cd phpredis-develop
  7. yum install -y autoconf // 因为有一处错误需要安装
  8. /usr/local/php/bin/phpize // 目的生成configure文件
  9. Configuring for:
  10. PHP Api Version: 20131106
  11. Zend Module Api No: 20131226
  12. Zend Extension Api No: 220131226
  13. ./configure --with-php-config=/usr/local/php/bin/php-config
  14. make
  15. make install
  16. Installing shared extensions: /usr/local/php/lib/ php/extensions/ no-debug- zts - 20131226/ // make install时候编译好的就会放在这个目录里
  17. ls /usr/local/php/lib/php/extensions/no-debug-zts-20~~ // 可以看到rdis.so
  18. vim /usr/local/php/etc/php.ini // 增加一行配置(可以放在文件最后一行)
  19. extension = redis.so
  20. /usr/local/php/bin/php -m |grep redis
  21. redis

image.png
// 查看是否加载了redis模块
登入网站也可以查看加入的redis模块

微信截图_20210721153124.png