LAMP架构介绍

LAMP架构介绍

LAMP是Linux+Apache(httpd)+MySQL+PHP的简写,即把Apache、MySQL以及PHP安装在linux系统上,组成一个运行环境来运行PHP脚本语言,通常是网站。比如Google、淘宝、百度、51cto博客、猿课论坛等就是用PHP语言写出来的。
  1. httpd、PHP、MySQL三个角色可以在一台机器、也可以分开,但httpd和PHP要安装在一台机器上,这也是PHP作为Apache的一个模块存在的,它们两必须在一起。
  2. httpd、PHP、MySQL三者如何工作:
    PHP是以模块的形式和Apache结合在一起的。 
    Apache不能直接跟Mysql打交道,只能通过PHP模块去Mysql拿数据,再交给Apache再交给用户。PHP与Mysql之间是动态请求。

MySQL、MariaDB介绍

MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)
  • MySQL官网https://www.mysql.com 最新版本5.7GA/8.0DMR;
  • MySQL5.6变化比较大,5.7性能上有很大提升;
  • Mariadb为MySQL的一个分支,官网https://mariadb.com/最新版本10.2;
  • MariaDB主要由SkySQL公司(现更名为MariaDB公司)维护,SkySQL公司由MySQL原作者带领大部分原班人马创立;
  • Mariadb5.5版本对应MySQL的5.5,10.0对应MySQL5.6;
  • Community 社区版本,Enterprise 企业版,GA(Generally Available)指通用版本,在生产环境中用的,DMR(Development Milestone Release)开发里程碑发布版,RC(Release Candidate)发行候选版本,Beta开放测试版本,Alpha内部测试版本;

MySQL安装

MySQL安装
  • MySQL的几个常用安装包:rpm包、源码包、二进制免编译包
  1. 查看linux系统是多少位:
[root@ma-1 ~] # uname -a
Linux ma-1 3.10 .0 -514. el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
2.下载mysql源码包,把安装包放到指定目录下:
[root@ma-1 ~] # cd /usr/local/src
-- 2017 - 12 - 14 19 : 17 : 14 -- http: / /mirrors.sohu.com/mysql /MySQL-5.6/mysql - 5.6 . 35 -linux-glibc2. 5 -x86_64.tar.gz
正在解析主机 mirrors.sohu.com ( mirrors.sohu.com )... 221.236 . 12.140
正在连接 mirrors.sohu.com ( mirrors.sohu.com ) |221.236.12.140| : 80 ... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 314581668 ( 300 M) [application/octet-stream]
正在保存至: “mysql- 5.6 . 35 -linux-glibc2. 5 -x86_64.tar.gz”

100 %[===============================================================================>] 314 , 581 , 668 1.40 MB/s 用时 3 m 34 s

2017 - 12 - 14 19 : 20 : 49 ( 1.40 MB/s) - 已保存 “mysql- 5.6 . 35 -linux-glibc2. 5 -x86_64.tar.gz” [ 314581668 / 314581668 ])
3.将压缩包解压:
[root@ma-1 src] # tar zxvf mysql-5 .6 .35-linux-glibc2 .5-x86_64 .tar .gz
4.把目录移动到/usr/local/下并改名为mysql:
[root@ma-1 src] # mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
5.进入目录查看:
[root@ma-1 src] # cd /usr/local/mysql
[root@ma-1 mysql] # ls
bin COPYING data docs include lib man mysql-test README scripts share sql-bench support-files
6.创建mysql用户,创建目录/data/,用来存放mysql数据:
[root@ma-1 mysql] # useradd mysql
[root@ma-1 mysql] # mkdir /data/
7.初始化指定用户mysql和路径:
[root@ma-1 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@ma-1 mysql] # yum list |grep perl |grep -i dumper
perl-Data-Dumper.x86_64 2.145 - 3 .el7 base
perl-XML-Dumper.noarch 0 . 81 - 17 .el7 base
[root@ma-1 mysql] # yum install -y perl-Data-Dumper
[root@ma-1 mysql] # echo $? //检验上一次命令是否成功,需要马上测验 0
[root@ma-1 mysql] # ./scripts/mysql_install_db –user=mysql –datadir=/data/mysql //报错解决后再执行
解决办法:
(执行后可能会出现这种情况,是因为缺少了一个模块,需要我们安装:yum install -y perl-Data-Dumper) 
执行完命令后可马上执行命令echo $?查看是否为0,为0说明执行成功。
可能缺少的包:
yum install -y libaio
yum install -y numactl
yum -y install libaio-devel
yum -y install openssl-devel
yum -y install perl perl-devel
安装centos 6.5 可以看下下面这篇文章:
  1. 拷贝配置文件,有两种方法:
方法一:
  • 拷贝配置文件到etc目录下 cp support-files/my-default.cnf /etc/my.cnf
方法二:
  • 更改自带的vim /etc/my.cnf文件,更改成如下配置:
9.复制启动脚本到/etc/init.d目录下并改名mysqld:
[root@ma-1 mysql] # cp support-files/mysql.server /etc/init.d/mysqld
10.编辑启动脚本:
[root@ma-1 mysql] # vi /etc/init.d/mysqld
定义basedir和datadir 
basedir=/usr/local/mysql 
datadir=/data/mysql
11.启动mysql:
  • 看下默认权限是不是755,把服务加入开机启动。
root@ma-1 mysql] # ls -l /etc/init.d/mysqld //默认权限
-rwxr-xr-x 1 root root 10902 12 14 20 : 57 /etc/init.d/mysqld
[root@ma-1 mysql] # chkconfig --add mysqld //添加开机启动
[root@ma-1 mysql] # chkconfig --list //查看已添加开机

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。
如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'
欲查看对特定 target 启用的服务请执行
'systemctl list-dependencies [target]'

mysqld 0 :关 1 :关 2 :开 3 :开 4 :开 5 :开 6 :关
netconsole 0 :关 1 :关 2 :关 3 :关 4 :关 5 :关 6 :关
network 0 :关 1 :关 2 :开 3 :开 4 :开 5 :开 6 :关
  • 手动启动mysql服务命令
[root@ma-1 mysql] # /etc/init.d/mysqld start 或者 service mysqld start
[root@ma-1 mysql] # service mysqld start //服务启动成功
Starting MySQL.Logging to '/data/mysql/ma-1.err' .
..... SUCCESS!
[root@ma-1 mysql] # ps aux |grep mysql //查看进程
root 8081 0 . 0 0 . 1 11760 1588 pts/ 0 S 21 : 23 0 : 00 /bin/sh /usr/ local /mysql/bin/mysqld_safe --datadir= /data/mysql --pid-file= /data/mysql /ma-1.pid
mysql 8216 0.9 44.9 973048 449520 pts/ 0 Sl 21 : 23 0 : 05 /usr/ local /mysql/bin/mysqld --basedir= /usr/local /mysql --datadir=/data /mysql --plugin-dir=/usr /local/mysql /lib/plugin --user=mysql -- log -error= /data/mysql /ma-1.err --pid-file=/data /mysql/ma-1 .pid -- socket = /tmpmysql.sock
root 8258 0.0 0.0 112664 972 pts/ 0 S+ 21 : 32 0 : 00 grep --color=auto mysql
[root@ma-1 mysql] # netstat -lntp //查看监听端口3306
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0 . 0 . 0 . 0 : 22 0 . 0 . 0 . 0 :* LISTEN 827 /sshd
tcp 0 0 127.0 . 0 . 1 : 25 0 . 0 . 0 . 0 :* LISTEN 1102 /master
tcp6 0 0 ::: 3306 :::* LISTEN 8216 /mysqld
tcp6 0 0 ::: 22 :::* LISTEN 827 /sshd
tcp6 0 0 :: 1 : 25 :::* LISTEN 1102 /master
假设:
如果没有启动脚本可以放在/etc/init.d下,那么可以用命令的方式来打开mysql(PS:命令模式打开的mysql要关闭需要用kill命令:killall mysqld,也可以用 kill PID号,但是建议用killall,就如mysql如果用killall,它会先停止当前的读写操作,再把没有完成写入磁盘的数据慢慢写进去,直到写完之后才会把进程杀死。如果遇到mysqld进程杀不死,等了一分钟还杀不死,说明数据量很大,慢慢等,不要强制使用kill -9 。)
命令:
/usr/local/mysql/bin/mysqld_safe --defaults-file= /etc/my .cnf --user=mysql --datadir= /data/my sql &
–defaults-file:指定配置文件所在的路径。
示例如下:
[root@ma-1 mysql]# service mysqld stop  //停止mysql服务
Shutting down MySQL.. SUCCESS!
[root@ma-1 mysql]# ps aux |grep mysql   //查看进程停止
root       8290  0.0  0.0 112664   968 pts/0    S+   21:38   0:00 grep --color=auto mysql
[root@ma-1 mysql]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &   //执行命令启动服务,这里按ctrl+z把命令放到后台执行
[1] 8472
[root@ma-1 mysql]# 171214 21:42:10 mysqld_safe Logging to '/data/mysql/ma-1.err'.171214 21:42:10 mysqld_safe Starting mysqld daemon with databases from /data/mysql

[root@ma-1 mysql]# ps aux |grep mysql  //进程启动
root       8472  0.0  0.1 113256  1584 pts/0    S    21:42   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
mysql      8595  0.3 45.6 973048 456372 pts/0   Sl   21:42   0:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/ma-1.err --pid-file=/data/mysql/ma-1.pid --socket=/tmp/mysql.sock
root       8620  0.0  0.0 112664   968 pts/0    S+   21:46   0:00 grep --color=auto mysql

[root@ma-1 mysql]# yum install psmisc  //安装killall命令
[root@ma-1 mysql]# killall mysqld    //终止以命令方式启动的mysql服务
[root@ma-1 mysql]# ps aux |grep mysql  //查看进程已结束
root       8642  0.0  0.0 112664   972 pts/0    R+   21:54   0:00 grep --color=auto mysql

Apache介绍

Apache是一个基金会的名字,它最早就是httpd起家的,因为httpd使用的人很多,很流行,所以当时就以基金会的名字来命名的web服务软件 ,在早期的时候,名字就叫做Apache,而不是叫httpd,后来在http的2.0版本开始,就改名叫httpd,但是很多人还是习惯叫做Apache
Apache的主流版本,在之前是 1.3版本比较流行,后来出了2.0版本,2.2版本,2.4版本,现在主流版本是 2.4版本

Apache(2.4版本)

2.2版本和2.4版本的区别
安装的方法不同,涉及到一个安依赖软件apr版本不一样
apr和apr-util是一个通用的函数库,它让httpd可以不关心底层的操作系统平台,可以很方便地进行移植(从linux移植到windows)
2.2版本和2.4版本所依赖的apr版本是不同的
而centos系统,默认自带的apr,也就是yum安装的apr和2.4版本是不匹配的,所以无法使用yum安装的apr,所以需要自己去手动编译

Apache2.4版本编译起来麻烦,就是因为需要手动编译 apr 和 apr-util 这两个包

安装过程

  1. 首先切换到/usr/local/src目录下
[ root@ma-1 ~ ] # cd / usr / local / src
[ root@ma-1 src ] #
  1. 下载Apache 2.4源码包、apr、apr-util这三个包
wget http : / / mirrors . cnnic . cn / apache / httpd / httpd -2.4 . 29 . tar . gz
wget http : / / mirrors . cnnic . cn / apache / apr / apr -1.6 . 3 . tar . gz
wget http : / / mirrors . cnnic . cn / apache / apr / apr - util -1.6 . 1 . tar . bz2
  1. 在下载完成后,查看下下载的包
[ root@ma-1 src ] # ls
apr -1.6 . 3 . tar . gz httpd -2.4 . 29 . tar . gz
apr - util -1.6 . 1 . tar . bz2 mariadb -10.2 . 6 - linux - glibc_214 - x86_64 . tar . gz
httpd -2.2 . 34 mysql -5.6 . 35 - linux - glibc2 .5 - x86_64 . tar . gz
httpd -2.2 . 34 . tar . gz
[ root@ma-1 src ] #
  1. 解压下载的包,并查看
[ root@ma-1 src ] # tar zxvf httpd -2.4 . 29 . tar . gz

[ root@ma-1 src ] # tar zxvf apr -1.6 . 3 . tar . gz

[ root@ma-1 src ] # tar xjvf apr - util -1.6 . 1 . tar . bz2

[ root@ma-1 src ] # ls
apr -1.6 . 3 httpd -2.2 . 34 . tar . gz
apr -1.6 . 3 . tar . gz httpd -2.4 . 29
apr - util -1.6 . 1 httpd -2.4 . 29 . tar . gz
apr - util -1.6 . 1 . tar . bz2 mariadb -10.2 . 6 - linux - glibc_214 - x86_64 . tar . gz
httpd -2.2 . 34 mysql -5.6 . 35 - linux - glibc2 .5 - x86_64 . tar . gz
[ root@ma-1 src ] #
  1. 在解压完成后,首先安装apr
  2. 切换到/usr/local/src/apr-1.6.3,并安装apr
[ root@ma-1 src ] # cd apr -1.6 . 3 [ root@ma-1 apr -1.6 . 3 ] # . / configure -- prefix = / usr / local / apr
在安装的时候,有时会出现以下情况
只需要安装gcc包即可——>yum install -y gcc
[ root@ma-1 apr -1.6 . 3 ] # . / configure -- prefix = / usr / local / apr
checking build system type ... x86_64 - pc - linux - gnu
checking host system type ... x86_64 - pc - linux - gnu
checking target system type ... x86_64 - pc - linux - gnu
Configuring APR library
Platform : x86_64 - pc - linux - gnu
checking for working mkdir - p ... yes
APR Version : 1.6 . 3
checking for chosen layout ... apr
checking for gcc ... no
checking for cc ... no
checking for cl . exe ... no
configure : error : in `/usr/local/src/apr-1.6.3':
configure: error: no acceptable C compiler found in $PATH
See ` config . log' for more details
[ root@ma-1 apr -1.6 . 3 ] #


[ root@ma-1 apr -1.6 . 3 ] # yum install - y gcc
  1. 在安装完成后,可以用 echo $? 检查是否安装成功
[ root@ma-1 apr -1.6 . 3 ] # echo $ ? 0 [ root@ma-1 apr -1.6 . 3 ] #
  1. 执行make && make install 命令
[ root@ma-1 apr -1.6 . 3 ] # make && make install
  1. 查看下apr,会看到有四个目录
[ root@ma-1 apr -1.6 . 3 ] # ls / usr / local /apr/
bin build -1 include lib
[ root@ma-1 apr -1.6 . 3 ] #
  1. 安装apr-util-1.6.1,首先切换到/usr/local/src/apr-util-1.6.1目录下
[ root@ma-1 apr -1.6 . 3 ] # cd / usr / local / src / apr - util -1.6 . 1 [ root@ma-1 apr - util -1.6 . 1 ] #
  1. 安装apr-util
[ root@ma-1 apr - util -1.6 . 1 ] # . / configure -- prefix = / usr / local / apr - util -- with - apr = / usr / local / apr
  1. 然后使用echo $?检查是否安装成功
[ root@ma-1 apr - util -1.6 . 1 ] # echo $ ? 0 [ root@ma-1 apr - util -1.6 . 1 ] #
  1. 然后make && make install
[ root@ma-1 apr - util -1.6 . 1 ] # make && make install
问题
但是在执行make && make install,出现以下错误
xml / apr_xml . c : 35 : 19 : 致命错误:expat . h:没有那个文件或目录
#include < expat . h >
^
编译中断。
make [ 1 ] : ** * [ xml / apr_xml . lo ] 错误 1
make [ 1 ] : 离开目录“ / usr / local / src / apr - util -1.6 . 1
make : ** * [ all - recursive ] 错误 1
解决方法
是因为缺少了xml解释器,只需要yum安装 expat-devel 包即可
[ root@ma-1 apr - util -1.6 . 1 ] # yum - y install expat - devel
这时再去执行make && make install 会正常执行
  1. --enable-so \ 表示支持动态扩展模块,Apache和PHP它们都会支持以一个模块的形式存在
PHP是Apache的一个模块,这个模块实际上就是一个文件,就是 .so 后缀名的文件,那他以Apache的一个模块形式存在,所以Apache本身是一个进程,是一个服务,在这个进程里面,通过一些配置文件指定一个模块的路径,那就可以去调用模块。
PHP模块是用来解析PHP的,执行PHP脚本的,所以就可以通过PHP脚本将PHP模块加载到进程里面去,加载到主进程里面去,
当它遇到PHP解析的需求时,它就会去调用这个模块,去执行一些操作
这些模块是一些独立的文件
而且还可以指定有哪些动态扩展的模块,需要加载哪些,这里指定是most
--enable-mods-shared=most
most,就是绝大多数,大多数会用到的模块,都会加载进来
  1. 查看/usr/local/apr-util/目录下,会看到生成三个子目录
[ root@ma-1 apr - util -1.6 . 1 ] # ls / usr / local /apr-util/
bin include lib
[ root@ma-1 apr - util -1.6 . 1 ] #
  1. 安装httpd-2.4.29,首先切换到httpd-2.4.29/
[ root@ma-1 apr - util -1.6 . 1 ] # cd / usr / local / src /httpd-2.4.29/ [ root@ma-1 httpd -2.4 . 29 ] #
  1. 安装httpd-2.4.29
[ root@ma-1 httpd -2.4 . 29 ] # . / configure -- prefix = / usr / local / apache2 .4 -- with - apr = / usr / local / apr -- with - apr - util = / usr / local / apr - util -- enable - so -- enable - mods - shared = most
  • 问题:
这里遇到了错误,如下
configure : error : pcre - config for libpcre not found . PCRE is required and available from http : / / pcre . org /
  • 解决方法:
  • pcre是正则表达式的驱动库,支持正则表达式
  • 可以先yum list |grep pcre 查看,因为是缺少库,所以只需要找带有 devel 或 lib 字符的,所以只需要安装pcre-devel包即可——>yum install -y pcre-devel
[ root@ma-1 httpd -2.4 . 29 ] # yum list | grep pcre
pcre . x86_64 8.32 - 17 . el7 @base
pcre - devel . x86_64 8.32 - 17 . el7 @base
pcre . i686 8.32 - 17 . el7 base
pcre - devel . i686 8.32 - 17 . el7 base
pcre - static . i686 8.32 - 17 . el7 base
pcre - static . x86_64 8.32 - 17 . el7 base
pcre - tools . x86_64 8.32 - 17 . el7 base
pcre2 . i686 10.23 - 2 . el7 base
pcre2 . x86_64 10.23 - 2 . el7 base
pcre2 - devel . i686 10.23 - 2 . el7 base
pcre2 - devel . x86_64 10.23 - 2 . el7 base
pcre2 - static . i686 10.23 - 2 . el7 base
pcre2 - static . x86_64 10.23 - 2 . el7 base
pcre2 - tools . x86_64 10.23 - 2 . el7 base
pcre2 - utf16 . i686 10.23 - 2 . el7 base
pcre2 - utf16 . x86_64 10.23 - 2 . el7 base
pcre2 - utf32 . i686 10.23 - 2 . el7 base
pcre2 - utf32 . x86_64 10.23 - 2 . el7 base
[ root@ma-1 httpd -2.4 . 29 ] #
  • 下载pcre-devel包
[ root@ma-1 httpd -2.4 . 29 ] # yum install - y pcre - devel
  1. 使用echo $?检查是否安装成功,这里会看到成功安装
[ root@ma-1 httpd -2.4 . 29 ] # echo $ ? 0 [ root@ma-1 httpd -2.4 . 29 ] #
  1. 执行make && make install
[ root@ma-1 httpd -2.4 . 29 ] # make && make install
  • 错误:
collect2 : error : ld returned 1 exit status
make [ 2 ] : ** * [ htpasswd ] 错误 1
make [ 2 ] : 离开目录“ / usr / local / src / httpd -2.4 . 29 / support”
make [ 1 ] : ** * [ all - recursive ] 错误 1
make [ 1 ] : 离开目录“ / usr / local / src / httpd -2.4 . 29 / support”
make : ** * [ all - recursive ] 错误 1
  • 解决方法:
    • 删除源码包,重新解压,重新编译安装,重新做一遍即可
      • 进入到/usr/local/src 目录下,删除源码包
  1. 接下来便会完成安装Apache

Apache安装完成后

  1. 在安装完成后,进入到/usr/local/apache2.4/目录下,并 ls 查看有哪些目录
[ root@ma-1 httpd -2.4 . 29 ] # cd / usr / local /apache2.4/ [ root@ma-1 apache2 .4 ] # ls
bin build cgi - bin conf error htdocs icons include logs man manual modules
[ root@ma-1 apache2 .4 ] #
  1. 在以后会接触到的目录就是 bin目录,conf目录,htdocs目录
  • /bin目录下,是可执行文件。也就是说,要启动一个服务,它就是在bin/httpd下面有一个文件或者命令,bin/httpd也是核心的二进制文件
[ root@ma-1 apache2 .4 ] # ls bin / httpd
bin / httpd
[ root@ma-1 apache2 .4 ] # ls - l bin / httpd
- rwxr - xr - x 1 root root 2334331 12 15 00 : 01 bin / httpd
[ root@ma-1 apache2 .4 ] # du - sh bin / httpd
2 . 3M bin / httpd
[ root@ma-1 apache2 .4 ] #
  • conf目录,是配置文件所在目录
[ root@ma-1 apache2 .4 ] # ls conf /
extra httpd . conf magic mime . types original
[ root@ma-1 apache2 .4 ] #
  • htdocs目录,是存放了一个访问页。启动完httpd服务后,去访问网站,默认的网站会放到 htdocs/目录下
[ root@ma-1 apache2 .4 ] # ls htdocs /
index . html
[ root@ma-1 apache2 .4 ] #
  • logs目录,就是日志相关的目录
    • 包含:错误日志,访问日志,
  • man目录,就是一些帮助文档
  • modules扩展模块目录,所有模块都放到了modules目录下
    • 每一个模块都代表着一个功能
[ root@ma-1 apache2 .4 ] # ls modules
httpd . exp mod_dbd . so mod_proxy_http . so
mod_access_compat . so mod_dir . so mod_proxy_scgi . so
mod_actions . so mod_dumpio . so mod_proxy . so
mod_alias . so mod_env . so mod_proxy_wstunnel . so
mod_allowmethods . so mod_expires . so mod_ratelimit . so
mod_auth_basic . so mod_ext_filter . so mod_remoteip . so
mod_auth_digest . so mod_file_cache . so mod_reqtimeout . so
mod_auth_form . so mod_filter . so mod_request . so
mod_authn_anon . so mod_headers . so mod_rewrite . so
mod_authn_core . so mod_include . so mod_sed . so
mod_authn_dbd . so mod_info . so mod_session_cookie . so
mod_authn_dbm . so mod_lbmethod_bybusyness . so mod_session_dbd . so
mod_authn_file . so mod_lbmethod_byrequests . so mod_session . so
mod_authn_socache . so mod_lbmethod_bytraffic . so mod_setenvif . so
mod_authz_core . so mod_lbmethod_heartbeat . so mod_slotmem_shm . so
mod_authz_dbd . so mod_log_config . so mod_socache_dbm . so
mod_authz_dbm . so mod_log_debug . so mod_socache_memcache . so
mod_authz_groupfile . so mod_logio . so mod_socache_shmcb . so
mod_authz_host . so mod_macro . so mod_speling . so
mod_authz_owner . so mod_mime . so mod_status . so
mod_authz_user . so mod_negotiation . so mod_substitute . so
mod_autoindex . so mod_proxy_ajp . so mod_unique_id . so
mod_buffer . so mod_proxy_balancer . so mod_unixd . so
mod_cache_disk . so mod_proxy_connect . so mod_userdir . so
mod_cache . so mod_proxy_express . so mod_version . so
mod_cache_socache . so mod_proxy_fcgi . so mod_vhost_alias . so
mod_cgid . so mod_proxy_fdpass . so mod_watchdog . so
mod_dav_fs . so mod_proxy_ftp . so
mod_dav . so mod_proxy_hcheck . so
[ root@ma-1 apache2 .4 ] # du - sh modules / 6 . 3M modules / [ root@ma-1 apache2 .4 ] #
  1. 查看Apache加载了哪些模块
  • /usr/local/apache2.4/bin/httpd -M //查看加载的模块
    • -M 把所有的模块列出来 等于
  • /usr/local/apache2.4/bin/apachectl -M //查看加载的模块——>这是一个shell文件,它调用了二进制的httpd
[ root@ma-1 apache2 .4 ] # / usr / local / apache2 .4 / bin / httpd - M
AH00557 : httpd : apr_sockaddr_info_get ( ) failed for ma-1
AH00558 : httpd : Could not reliably determine the server 's fully qualified domain name, using 127.0.0.1. Set the ' ServerName' directive globally to suppress this message //这里仅仅是一个提示,提示你要去定义ServerName——>不用去管
Loaded Modules :
core_module ( static )
so_module ( static )
http_module ( static )
mpm_event_module ( static )
authn_file_module ( shared )
authn_core_module ( shared )
authz_host_module ( shared )
authz_groupfile_module ( shared )
authz_user_module ( shared )
authz_core_module ( shared )
access_compat_module ( shared )
auth_basic_module ( shared )
reqtimeout_module ( shared )
filter_module ( shared )
mime_module ( shared )
log_config_module ( shared )
env_module ( shared )
headers_module ( shared )
setenvif_module ( shared )
version_module ( shared )
unixd_module ( shared )
status_module ( shared )
autoindex_module ( shared )
dir_module ( shared )
alias_module ( shared ) [ root@ma-1 apache2 .4 ] #


[ root@ma-1 apache2 .4 ] # / usr / local / apache2 .4 / bin / apachectl - M
AH00558 : httpd : Could not reliably determine the server 's fully qualified domain name, using 192.168.0.104. Set the ' ServerName' directive globally to suppress this message
Loaded Modules :
core_module ( static )
so_module ( static )
http_module ( static )
mpm_event_module ( static )
authn_file_module ( shared )
authn_core_module ( shared )
authz_host_module ( shared )
authz_groupfile_module ( shared )
authz_user_module ( shared )
authz_core_module ( shared )
access_compat_module ( shared )
auth_basic_module ( shared )
reqtimeout_module ( shared )
filter_module ( shared )
mime_module ( shared )
log_config_module ( shared )
env_module ( shared )
headers_module ( shared )
setenvif_module ( shared )
version_module ( shared )
unixd_module ( shared )
status_module ( shared )
autoindex_module ( shared )
dir_module ( shared )
alias_module ( shared ) [ root@ma-1 apache2 .4 ] #
  • 在模块的右侧有小括号,里面是 static 或 shared ,static是静态
  • 静态和动态的区别
    • 静态是直接把模块编译进了主脚本或主二进制文件里面
  • http是一个核心文件,这个文件加载了哪些模块
  • 如果是static,那也就意味这个模块在httpd里面,和它绑定在了一起,它们是一个整体
  • 如果是shared,说明它是一个扩展的模块,这个模块是一个文件,我们可以看到的 .so 文件,文件的目录是在/usr/local/apache2.4/module目录下

启动Apache2.4

  1. 在安装完成Apache2.4后,Apache启动不需要定义启动脚本,也不需要放到/etc/init.d下去,直接使用命令行启动就行
  • /usr/local/apache2.4/bin/apachectl start //命令行启动Apache脚本
    • 启动脚本后,虽然出现提示,但不表示启动失败
      • 若不想要出现提示,只需要编辑配置文件即可
[ root@ma-1 apache2 .4 ] # / usr / local / apache2 .4 / bin / apachectl start
AH00558 : httpd : Could not reliably determine the server 's fully qualified domain name, using 192.168.0.104. Set the ' ServerName' directive globally to suppress this message
[ root@ma-1 apache2 .4 ] #
  1. 查看Apache是否启动,看httpd进程是否存在
[ root@ma-1 apache2 .4 ] # ps aux | grep httpd
root 47977 0.0 0.2 71400 2188 ? Ss 05 : 09 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
daemon 47978 0.0 0.4 360364 4248 ? Sl 05 : 09 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
daemon 47979 0.0 0.4 360364 4248 ? Sl 05 : 09 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
daemon 47980 0.0 0.4 360364 4248 ? Sl 05 : 09 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
root 48071 0.0 0.0 112676 984 pts / 0 R + 05 : 12 0 : 00 grep -- color = auto httpd
[ root@ma-1 apache2 .4 ] #
  1. 查看端口号——>httpd默认监听端口为80,mysqld默认监听端口为3306,25端口是发邮件的,22端口是远程登录的
[root@ma-1 apache2.4]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1498/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1190/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1498/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1503/mysqld         
tcp6       0      0 :::80                   :::*                    LISTEN      47977/httpd         
tcp6       0      0 :::22                   :::*                    LISTEN      1190/sshd           
[root@ma-1 apache2.4]#

配置httpd支持php目录概要

  • httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
  • vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方
    • ServerName
    • Require all denied
    • AddType application/x-httpd-php .php
    • DirectoryIndex index.html index.php /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

编辑httpd的配置文件

  • 在安装好Apache、mysql、httpd,但是还未结合在一起,虽然apche调用了php作为它的模块,但是还不知道是否能解析php,所以现在还是需要编辑Apache的配置文件
  • httpd主配置文件,在/usr/local/apache2.4/conf/httpd.conf下
    • 编辑四个地方
      • 定义ServerName,去除 # 号
        • 在/usr/local/apache2.4/bin/apachectl restart 乍一看是报错信息,其实只是一个警告信息,并不是错误,若想不看到这个提示,可以在 /usr/local/apache2.4/conf/httpd.conf 取消掉
        • 方法:在/usr/local/apache2.4/conf/httpd.conf 中搜索 /ServerName ,然后将 # ServerName www.example.com:80 前的# 去除掉,保存退出即可
      • 把Require all denied 改成
        • 若是不更改,那么访问会是 403

第一处:取消警告信息

  1. 在运行/usr/local/apache2.4/bin/apachectl start 会跳出警告信息
[ root@ ma-1 ~ ] # vim / usr / local / apache2 .4 / conf / httpd . conf //ctrtl+z退出下

[ 1 ] + 已停止 vim / usr / local / apache2 .4 / conf / httpd . conf
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl restart //会看到警告信息
AH00557 : httpd : apr_sockaddr_info_get ( ) failed for hanfeng
AH00558 : httpd : Could not reliably determine the server 's fully qualified domain name, using 127.0.0.1. Set the ' ServerName' directive globally to suppress this message
[ root@ ma-1 ~ ] # fg //回到刚暂停的任务中——>vim /usr/local/apache2.4/conf/httpd.conf

在文件中搜索 / ServerName
然后将 # ServerName www . example . com : 80 前的# 去除掉保存退出即可
  1. 在去除# 号之后,运行apache,会提示79行错误
  • 原因:是因为在最后调用了两个PHP,加载了两个PHP,导致冲突
  • 解决方法:只需要注释掉一个PHP即可
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl restart
httpd not running , trying to start
/ usr / local / apache2 .4 / bin / apachectl : 79 : 2348 段错误 $HTTPD - k $ARGV
[ root@ ma-1 ~ ] #
  1. 在注释掉一个PHP,就会发现不提示警告信息了
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl start
[ root@ ma-1 ~ ] #
  1. 查看httpd进程
[ root@ ma-1 ~ ] # ps aux | grep httpd
root 2453 0.0 0.8 254072 8820 ? Ss 23 : 52 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
daemon 2454 0.0 0.8 540900 8972 ? Sl 23 : 52 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
daemon 2455 0.0 0.8 540900 8972 ? Sl 23 : 52 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
daemon 2456 0.0 0.8 540900 8972 ? Sl 23 : 52 0 : 00 / usr / local / apache2 .4 / bin / httpd - k start
root 2541 0.0 0.0 112676 980 pts / 0 R + 23 : 54 0 : 00 grep -- color = auto httpd
[ root@ ma-1 ~ ] #
  1. 因为在打开了ServerName,就不在提示警告信息了

第二处:更改Require all denied

  1. 首先,我们可以用浏览器访问自己虚拟机的IP,会发现无法访问
  • 则会提示检查代理服务器和防火墙
在遇到这种问题,排查方法 先查看IP是否是通的,用物理机去ping 虚拟机的 IP

  1. 若IP是通的,再去判断80端口是否是通的——>用物理机去ping80端口

  1. 因为windows 并没有打开telnet 客户端,所以会提示并没有这个命令
  2. 打开telnet客户端——>注意:不要打开Telnet服务端,否则会监听23端口,不安全
  • 打开物理机的控制面板
  • 然后选择程序
  • 再选择打开或关闭Windows功能
  • 选择Telnet客户端,并打开
7. 若是可以运行 telnet 命令,那出来的则是一个结果,显示80并不通
  • 因为在linux虚拟机上,并没有打开80端口
  1. 在虚拟机上,使用iptables -nvL 命令,会查看到80端口并没有打开
[ root@ ma-1 ~ ] # iptables - nvL
Chain INPUT ( policy ACCEPT 0 packets , 0 bytes )
pkts bytes target prot opt in out source destination
347 32935 ACCEPT all -- * * 0.0 . 0.0 / 0 0.0 . 0.0 / 0 ctstate RELATED , ESTABLISHED
0 0 ACCEPT all -- lo * 0.0 . 0.0 / 0 0.0 . 0.0 / 0
266 26673 INPUT_direct all -- * * 0.0 . 0.0 / 0 0.0 . 0.0 / 0
266 26673 INPUT_ZONES_SOURCE all -- * * 0.0 . 0.0 / 0 0.0 . 0.0 / 0
266 26673 INPUT_ZONES all -- * * 0.0 . 0.0 / 0 0.0 . 0.0 / 0
0 0 ACCEPT icmp -- * * 0.0 . 0.0 / 0 0.0 . 0.0 / 0
262 26469 REJECT all -- * * 0.0 . 0.0 / 0 0.0 . 0.0 / 0 reject - with icmp - host - prohibited
等等,只截取了一部分,会发现 80 端口并没有打开
  1. 若想要windows机器去访问它,还需要加上一个操作
  • 单独一条命令,临时加上80端口——> iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[ root@ ma-1 ~ ] # iptables - I INPUT - p tcp -- dport 80 - j ACCEPT
[ root@ ma-1 ~ ] #
  1. 这时再用物理机去访问虚拟机IP,则会显示 It works!

  1. 之前不能正常访问,就是由于防火墙的规则,没有加上80端口,不能正常访问
  2. 这时打开windows来查看80端口,这样的界面表示80端口通了

  1. 在物理机中按 ctrl+] 退出来,然后在按 quit 字符退出
  1. 这时删除之前加的那条规则,再来物理机查看虚拟机的80端口,会发现不通了
[ root@ ma-1 ~ ] # iptables - D INPUT - p tcp -- dport 80 - j ACCEPT
[ root@ ma-1 ~ ] #

  1. 这时在把规则添加上,会发现又可以正常访问了
  2. 有时浏览器去访问虚拟机的IP,会显示 403Forbidden 错误界面
  • 这是因为在/usr/local/apache2.4/conf/httpd.conf配置文件中,有一个Require all denied
    • 然后搜索 /denied ,
  1. 打开/usr/local/apache2.4/conf/httpd.conf配置文件
[ root@ ma-1 ~ ] # vim / usr / local / apache2 .4 / conf / httpd . conf

然后搜索 / denied ,会看到
< Directory / >
AllowOverride none
Require all denied
< / Directory >
把 denied 改成 granted
  1. 之前可以在浏览器正常访问虚拟机ip,是因为
[ root@ ma-1 ~ ] # vim / usr / local / apache2 .4 / conf / httpd . conf

是因为DocumentRoot指定了Directory,即如下:
DocumentRoot "/usr/local/apache2.4/htdocs"
< Directory "/usr/local/apache2.4/htdocs" >


还有后面的
Require all granted

若是将这里的Require all granted改成Require all denied ,那肯定无法浏览
  1. 在更改完配置文件,需要重新加载配置
  • /usr/local/apache2.4/bin/apachectl -t //检查你修改的配置文件是否存在错误
    • -t参数,会检查你修改的配置文件是否存在语法错误
      • 若语法不对,则会报错
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl - t
Syntax OK
[ root@ ma-1 ~ ] #
  • 重新加载配置文件
    • graceful 只会重新加载配置文件,而不会重启你的服务
      • 就是说即使你的配置文件有问题,它最多加载不成功,而不会把你的进程杀掉
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl graceful
[ root@ ma-1 ~ ] #
  1. 在配置文件中的,两处位置都应该改成granted,这是为了防止你在打开虚拟主机配置文件的时候,显示403Forbidden(403是它的状态码,正常情况下,状态码都是200)

第三处:因为要支持php,所以要增加一行php相关的配置

  • 如果不增加这一行,那么php就无法解析
[ root@ ma-1 ~ ] # vim / usr / local / apache2 .4 / conf / httpd . conf

搜索 / AddType,然后
AddType application / x - compress . Z
AddType application / x - gzip . gz . tgz

在这两行下面,增加php一行
AddType application / x - httpd - php . php

第四部分,增加一个索引页

  • 索引页作用:在打开一个网站,为什么不输入index.php就可以直接访问呢
[ root@ ma-1 ~ ] # vim / usr / local / apache2 .4 / conf / httpd . conf

搜索 / Index ,找到
< IfModule dir_module >
DirectoryIndex index . html
< / IfModule >

在index . html后加 index . php
显示为
< IfModule dir_module >
DirectoryIndex index . html index . php
< / IfModule >
  • 然后检查配置文件是否有错误
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl - t
Syntax OK
[ root@ ma-1 ~ ] #
  • 然后重新加载配置文件
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl graceful
[ root@ ma-1 ~ ] #

检查Apache是否支持解析php5

  1. 验证
  • 写一个测试php脚本
    • 在访问的时候,访问的是htdocs下的文件
  • phpinfo,可以把php的相关信息打印出来
[ root@ ma-1 ~ ] # vi / usr / local / apache2 .4 / htdocs / 1 . php

在文件中写入

< ? php
phpinfo ( ) ; ? >

然后保存退出
  1. 然后在浏览器访问虚拟机ip地址并添加页面地址(IP/index.php),然后会看到显示出内容——>增加一个文件是不需要重启php的
http : / / 192.168 . 74.129 / 1 . php
  1. 当看到php正常显示,如上图,那说明php支持支持解析
  2. 如果php不支持解析(以上四步骤错误一处),那么刷新页面显示出来的则是源代码(就是 1.php 文件中的代码)
  3. 如果遇到php无法解析,则去检查Apache的配置文件
    1. 第一项,查看是否加载php5模块,使用/usr/local/apache2.4/bin/apachectl -M命令
  • 如果没有加载这个模块,查看这个模块是否存在。使用 ls /usr/local/apache2.4/modules/libphp5.so查看文件是否存在,若是文件都没有,那么肯定不会加载这个模块
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_event_module (static) authn_file_module (shared) authn_core_module (shared) authz_host_module (shared) authz_groupfile_module (shared) authz_user_module (shared) authz_core_module (shared) access_compat_module (shared) auth_basic_module (shared) reqtimeout_module (shared) filter_module (shared) mime_module (shared) log_config_module (shared) env_module (shared) headers_module (shared) setenvif_module (shared) version_module (shared) unixd_module (shared) status_module (shared) autoindex_module (shared) dir_module (shared) alias_module (shared) php5_module (shared) [root@ma-1 ~]# ls /usr/local/apache2.4/modules/libphp5.so /usr/local/apache2.4/modules/libphp5.so
  1. 第二项,如果有文件,则没有显示php模块,那么就要去看apache的配置文件中有没有加载 libphp5 这一行配置,在文件中搜索/libphp5 ,如果没有这一行配置,那么肯定也是无法解析的
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/httpd.conf
在文件中搜索/libphp5,看是否加载了这一行配置 LoadModule php5_module modules/libphp5.so
  1. 第三项,检查配置文件中是否加载了 AddType application/x-httpd-php .php 这一行
  • 在 .php 前面有一行空格,需要注意下!不能遗忘!!!——>使用 /usr/local/apache2.4/bin/apachectl -t 可以检查出配置写错
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/httpd.conf
在文件搜索/AddType中关于php这一行配置是否存在 AddType application/x-httpd-php .php
  1. 第四项,检查是否加了 index.php
  • 在访问一个网站的时候,比如访问www.baidu.com的时候,并不用是www.baidu.com/index.php访问,会发现,两个访问出的页面是相同的,就是因为这里有索引页(或者叫做index页),它默认能跳转到这个页面下去,包括直接输入虚拟机ip的时候,也会访问到 It works!这是访问到的是 index.html ,就是因为我们定义了一个index
[root@ma-1 ~]# ls /usr/local/apache2.4/htdocs/ 1.php index.html [root@ma-1 ~]#

检查Apache是否支持解析php7

  1. 在配置文件中,注释掉php5,打开php7
[ root@ ma-1 ~ ] # vim / usr / local / apache2 .4 / conf / httpd . conf

在文件中搜索 / libphp7,然后注释掉php5打开php7
# LoadModule php5_module modules / libphp5 . so
LoadModule php7_module modules / libphp7 . so
  1. 快捷键 ctrl+r ,可以快速执行命令历史中所用过的一些命令
  • 在快捷键 ctrl+r 之后,然后输入命令的一些字母,就会显示出你使用过的命令
然后检查配置文件是否存在语法错误,并重新加载配置文件
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl - t
Syntax OK
[ root@ ma-1 ~ ] # / usr / local / apache2 .4 / bin / apachectl graceful
[ root@ ma-1 ~ ] #
  1. 会看到更换了php7之后,用物理机访问虚拟机的ip,也会正常显示
  1. 在浏览器打开看到的phpinfo,和/usr/local/php7/bin/php -i |less看到的结果基本是一致的,只不过一个是文本形式,一个是图形化,图形化看起来更加直观,清晰明了
[ root@ ma-1 ~ ] # / usr / local / php7 / bin / php - i | less
phpinfo ( )
PHP Version => 7.1 . 6

System => Linux ma-1 3.10 . 0 - 123 . el7 . x86_64 # 1 SMP Mon Jun 30 12 : 09 : 22 UTC 2014 x86_64
Build Date => Dec 18 2017 22 : 25 : 37
Configure Command => './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'
Server API => Command Line Interface
Virtual Directory Support => enabled
Configuration File ( php . ini ) Path => / usr / local / php7 / etc
Loaded Configuration File => ( none )
Scan this dir for additional . ini files => ( none )
Additional . ini files parsed => ( none )
PHP API => 20160303
PHP Extension => 20160303
Zend Extension => 320160303
Zend Extension Build => API320160303 , TS

等等等,只截取了一部分

Apache配置文件

  • 为什么可以在htdocs下面中可以访问到 index.html、1.php
  • 这是因为在/usr/local/apache2.4/conf/httpd.conf配置文件中的 DocumentRoot 参数,定义了网站的根目录在哪里,域名就是定义的ServerName
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/httpd.conf

在文件中搜索 /htdocs,其中DocumentRoot 定义了文件根目录在哪里
DocumentRoot "/usr/local/apache2.4/htdocs" <Directory "/usr/local/apache2.4/htdocs" >

搜索 /ServerName,域名就是定义的ServerName ,只不过这个ServerName ,,可以使用任何一个域名去访问它,比如可以使用IP可以访问,使用example .com可以访问,用www也可以去访问它
ServerName www .example .com : 80


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值