11.1 LAMP架构介绍
LAMP实际上是一个简写,Linux+Apache(httpd)+MySQL+PHP。
Linux:操作系统;
Apache:所谓的apache是一个提供web服务的软件,实际上叫httpd;
MySQL:实际上是一个存储的软件,比如数据,一些字符串;
PHP:高级的脚本语言(C开发的)。通常用来作一些网站。
用PHP的网站有以下这些:Google、淘宝、百度、51cto博客、猿课论坛等。
apache、mysql、php三个角色可以在一台机器、也可以分开(httpd和PHP要在一起)。对于一些小型的网站三个可以放在一台服务器上。
httpd、mysql、php三者如何工作:
图中php是以一个模块的形式和apache结合在一起的。apache不能直接和mysql交互,只能通过php模块在mysql中获取数据,交给apache来处理。这种方式叫做动态请求。
比如,我们访问猿课论坛。在浏览器中登录的时候,我们会输入账号密码,之后会交给apache处理,在数据库中比对,这个过程中apache用到php模块。如果输入的用户名密码正确,则apache会返回给浏览器正确登录状态。这个过程就是一个动态请求。
在我们访问网站时,会有些logo图片,这些请求没有和mysql交互,apache会直接在linux服务器中的一个存储图片的目录里获取。这就是静态请求。
11.2 MySQL_MariaDB介绍
- Community 社区版本;
- Enterprise 企业版;
- GA(Generally Available)指通用版本,在生产环境中用的;
- DMR(Development Milestone Release)开发里程碑发布版;
- RC(Release Candidate)发行候选版本;
- Beta开放测试版本;
- Alpha内部测试版本。
11.3-11-5 MySQL安装
MySQL常用的安装包:rpm包、源码包、二进制免编译。二进制免编译:发布之前,在linux上进行编译完成,打包压缩文件进行发布。优势:直接就可以用,可以指定安装目录。
MySQL安装步骤:
1、下载安装包。
[root@liang-00 ~]# cd /usr/local/src/
[root@liang-00 src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
--2018-12-01 20:17:38-- http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
Resolving mirrors.sohu.com (mirrors.sohu.com)... 123.125.123.141
Connecting to mirrors.sohu.com (mirrors.sohu.com)|123.125.123.141|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 328563044 (313M) [application/octet-stream]
Saving to: ‘mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz’
100%[===============================================================================>] 328,563,044 613KB/s in 5m 41s
2018-12-01 20:23:24 (942 KB/s) - ‘mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz’ saved [328563044/328563044]
[root@liang-00 src]# ll
total 1243904
drwxr-xr-x 28 1001 1001 4096 Nov 2 00:55 apr-1.6.5
-rw-r--r-- 1 root root 1073556 Sep 14 12:07 apr-1.6.5.tar.gz
drwxr-xr-x 21 1001 1001 4096 Nov 2 01:08 apr-util-1.6.1
-rw-r--r-- 1 root root 554301 Oct 23 2017 apr-util-1.6.1.tar.gz
drwxr-sr-x 12 root 40 4096 Nov 2 21:03 httpd-2.4.37
-rw-r--r-- 1 root root 9177278 Oct 22 22:13 httpd-2.4.37.tar.gz
-rw-r--r-- 1 root root 604055819 Dec 1 14:32 mariadb-10.2.10-linux-glibc_214-x86_64.tar.gz
-rw-r--r-- 1 root root 328563044 Feb 26 2018 mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
drwxr-xr-x 7 root root 8192 Nov 2 01:17 pcre-8.10
-rw-r--r-- 1 root root 1409751 Jun 26 2010 pcre-8.10.zip
[root@liang-00 src]# ll -h
2、解压安装包,并把它移动到 /usr/local/mysql 目录下.
[root@liang-00 src]# cd /usr/local/mysql/ [root@liang-00 mysql]# ls bin COPYING data docs include lib man mysql-test README scripts share sql-bench support-files [root@liang-00 mysql]#
3、创建mysql用户和存放mysql数据的/data/目录。
[root@liang-00 mysql]# useradd mysql [root@liang-00 mysql]# mkdir /data/ [root@liang-00 mysql]#
4、初始化,生成/data/mysql因为mysql启动时用到。
[root@liang-00 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@liang-00 mysql]#
错误排查:
提示我们需要Perl modules 和 Dumper。
我们尝试用yum查找这些模块。
找到我们需要的包:perl-Data-Dumper.x86_64。
之后我们就可以正常初始化mysql了。用echo $? 可以检查安装是否正确。或是查看安装过程中有两个OK。
The latest information about MySQL is available on the web at http://www.mysql.com Support MySQL by buying support/licenses at http://shop.mysql.com New default config file was created as ./my.cnf and will be used by default by the server when you start it. You may edit this file to change server settings WARNING: Default config file /etc/my.cnf exists on the system This file will be read by default by the MySQL server If you do not want to use this, either remove it, or use the --defaults-file argument to mysqld_safe when starting the server [root@liang-00 mysql]# echo $? 0 [root@liang-00 mysql]#
5、拷贝配置文件和启动脚本。
在 support-files中有mysql的模板配置文件 my-default.cnf 。
[root@liang-00 mysql]# ls support-files/ binary-configure magic my-default.cnf mysqld_multi.server mysql-log-rotate mysql.server [root@liang-00 mysql]#
将 my-default.cnf 拷贝到/etc/my.cnf 默认位置,如果要放在其它目录下启动时要指定。
/etc/my.cnf 文件默认存在,是可以使用的。需要修改文件内容。
修改完之后就可以用了,其它的配置,有需要的时候在去增加修改。
拷贝mysql的启动脚本,到 /etc/init.d/mysqld 。
[root@liang-00 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@liang-00 mysql]# ls /etc/init.d/
functions mysqld netconsole network README
[root@liang-00 mysql]#
编辑 /etc/init.d/mysqld 启动脚本
/etc/init.d/mysqld 权限设置成755。
[root@liang-00 mysql]# vim /etc/init.d/mysqld [root@liang-00 mysql]# chmod 755 !$^C [root@liang-00 mysql]# ll /etc/init.d/mysqld -rwxr-xr-x 1 root root 10592 Dec 1 21:15 /etc/init.d/mysqld [root@liang-00 mysql]#
加入到系统服务列表中。
[root@liang-00 mysql]# chkconfig --add mysqld [root@liang-00 mysql]# chkconfig --list Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@liang-00 mysql]#
6、开启mysql服务。
service mysqld start 或 /etc/init.d/mysqld start
[root@liang-00 mysql]# service mysqld start Starting MySQL.Logging to '/data/mysql/liang-00.err'. ......... SUCCESS! [root@liang-00 mysql]#
7、当我们没有启动脚本时,我们可以用命令行的模式去启动。
1)关闭mysql
[root@liang-00 mysql]# service mysqld stop Shutting down MySQL.. SUCCESS! [root@liang-00 mysql]# !ps ps aux |grep mysql root 2398 0.0 0.0 112704 968 pts/0 S+ 21:41 0:00 grep --color=auto mysql [root@liang-00 mysql]#
2)指定配置文件路径来启动mysql。--defaults-file=路径
[root@liang-00 mysql]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql & [1] 2426 [root@liang-00 mysql]# 181201 21:45:43 mysqld_safe Logging to '/data/mysql/liang-00.err'. 181201 21:45:43 mysqld_safe Starting mysqld daemon with databases from /data/mysql [root@liang-00 mysql]# ps aux |grep mysql root 2426 0.0 0.1 113304 1608 pts/0 S 21:45 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql mysql 2560 9.7 44.6 1302728 449788 pts/0 Sl 21:45 0:10 /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=liang-00.err --pid-file=liang-00.pid --socket=/tmp/mysql.sock root 2593 0.0 0.0 112704 972 pts/0 S+ 21:47 0:00 grep --color=auto mysql [root@liang-00 mysql]#
用这种方式启动的mysql只能用killall mysqld 来停止。
[root@liang-00 mysql]# killall mysqld [root@liang-00 mysql]# 181201 21:50:05 mysqld_safe mysqld from pid file /data/mysql/liang-00.pid ended [1]+ Done /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql [root@liang-00 mysql]# ps aux |grep mysql root 2628 0.0 0.0 112704 972 pts/0 S+ 21:50 0:00 grep --color=auto mysql [root@liang-00 mysql]#
kill 命令需谨慎使用,用到时要用 killall 来停止。
mysql 在工作的时候数据交换量会非常大,这时我们绝对不能用kill命令,一定要用killall 来停止,之后耐心去等待它中止。
11.6 MariaDB安装
mariadb的安装方法和mysql安装方法类似。
步骤:
1、下载安装包。
[root@liang-00 mysql]# cd /usr/local/src/
[root@liang-00 src]# ls
apr-1.6.5 apr-util-1.6.1.tar.gz mariadb-10.2.10-linux-glibc_214-x86_64.tar.gz pcre-8.10.zip
apr-1.6.5.tar.gz httpd-2.4.37 mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
apr-util-1.6.1 httpd-2.4.37.tar.gz pcre-8.10
[root@liang-00 src]#
2、解压安装包,移动到/usr/local/mariadb 中。
[root@liang-00 src]# ls
apr-1.6.5 apr-util-1.6.1.tar.gz mariadb-10.2.10-linux-glibc_214-x86_64 pcre-8.10
apr-1.6.5.tar.gz httpd-2.4.37 mariadb-10.2.10-linux-glibc_214-x86_64.tar.gz pcre-8.10.zip
apr-util-1.6.1 httpd-2.4.37.tar.gz mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
[root@liang-00 src]#
[root@liang-00 src]# mv mariadb-10.2.10-linux-glibc_214-x86_64 /usr/local/mariadb [root@liang-00 src]# cd /usr/local/mariadb/ [root@liang-00 mariadb]# ls bin COPYING.thirdparty data EXCEPTIONS-CLIENT INSTALL-BINARY man README.md scripts sql-bench COPYING CREDITS docs include lib mysql-test README-wsrep share support-files [root@liang-00 mariadb]#
3、创建/data/mariadb目录,用户名和mysql一样。
[root@liang-00 mariadb]# mkdir /data/mariadb [root@liang-00 mariadb]# mysql^C [root@liang-00 mariadb]#
4、初始化。
Please report any problems at http://mariadb.org/jira The latest information about MariaDB is available at http://mariadb.org/. You can find additional information about the MySQL part at: http://dev.mysql.com Consider joining MariaDB's strong and vibrant community: https://mariadb.org/get-involved/ [root@liang-00 mariadb]# echo $? 0 [root@liang-00 mariadb]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mariadb^C [root@liang-00 mariadb]# ls /data/mariadb/ aria_log.00000001 aria_log_control ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema test [root@liang-00 mariadb]# ls /data/mysql/ auto.cnf ibdata1 ib_logfile0 ib_logfile1 liang-00.err mysql performance_schema test [root@liang-00 mariadb]#
--basedir=/user/local/mariadb 指定创建目录
5、拷贝配置文件和启动文件。
在mariadb的配置模板目录下有很多文件。
[root@liang-00 mariadb]# ls support-files/ binary-configure my-huge.cnf my-large.cnf my-small.cnf mysql-log-rotate policy wsrep_notify magic my-innodb-heavy-4G.cnf my-medium.cnf mysqld_multi.server mysql.server wsrep.cnf
配置文件不同缓存的不同,根据内存大小的不同,可以指定合适的缓存,可以使mysql达到最佳效果。
这里我们用small就可以了。
[root@liang-00 mariadb]# cp support-files/my-small.cnf /usr/local/mariadb/my.cnf [root@liang-00 mariadb]# cp support-files/mysql.server /etc/init.d/mariadb
my-small.cnf 内容。
6、配置文件和启动脚本的编辑。
配置文件基本不需要修改。
启动脚本的修改。这里我们修改三个地方,其中配置文件要指定。
最后在启动命令中指定。
7、启动mariadb服务。
在启动之前我们要检查mysql服务是否启动,因为两个服务端口一样。
[root@liang-00 mariadb]# ps aux |grep mysql root 3064 0.0 0.0 112704 972 pts/0 S+ 22:32 0:00 grep --color=auto mysql [root@liang-00 mariadb]#
启动mariadb服务。
查看端口。
[root@liang-00 mariadb]# netstat -lntp
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 964/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1053/master
tcp6 0 0 :::3306 :::* LISTEN 3243/mysqld
tcp6 0 0 :::22 :::* LISTEN 964/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1053/master
[root@liang-00 mariadb]#
问题解决
当一台机器同时安装了mysql和mariadb 会有多个配置文件。这时就会影响服务加载。
[root@liang-00 mariadb]# ls /etc/my.cnf /etc/my.cnf [root@liang-00 mariadb]#
[root@liang-00 mariadb]# ps aux |grep mysql
root 3127 0.0 0.1 115432 1744 ? S 22:32 0:00 /bin/sh /usr/local/mariadb/bin/mysqld_safe --defaults-file=/usr/local/mariadb/my.cnf --datadir=/data/mysql --pid-file=/data/mysql/liang-00.pid
mysql 3243 0.5 6.4 1585840 65448 ? Sl 22:32 0:02 /usr/local/mariadb/bin/mysqld --defaults-file=/usr/local/mariadb/my.cnf --basedir=/usr/local/mariadb --datadir=/data/mysql --plugin-dir=/usr/local/mariadb/lib/plugin --user=mysql --log-error=/data/mysql/liang-00.err --pid-file=/data/mysql/liang-00.pid --socket=/tmp/mysql.sock --port=3306
root 3330 0.0 0.0 112704 972 pts/0 S+ 22:40 0:00 grep --color=auto mysql
[root@liang-00 mariadb]#
从上面可以看到加载的是 /data/mysql 。因为我们配置文件 /usr/local/mariadb/my.cnf 中并没有定义。它还会在/etc/mysql中去寻找。
这时我们可以在配置文件 /usr/local/mariadb/my.cnf 中加上 datadir=/data/mariadb。
之后我们先killall mysql,再次启动mariadb。
[root@liang-00 mariadb]# /etc/init.d/mariadb restart
Restarting mariadb (via systemctl): [ OK ]
[root@liang-00 mariadb]# ps aux |grep mysql
root 3997 1.3 0.1 115432 1748 ? S 22:50 0:00 /bin/sh /usr/local/mariadb/bin/mysqld_safe --defaults-file=/usr/local/mariadb/my.cnf --datadir=/data/mariadb --pid-file=/data/mariadb/liang-00.pid
mysql 4116 23.5 5.0 1585772 51160 ? Sl 22:50 0:00 /usr/local/mariadb/bin/mysqld --defaults-file=/usr/local/mariadb/my.cnf --basedir=/usr/local/mariadb --datadir=/data/mariadb --plugin-dir=/usr/local/mariadb/lib/plugin --user=mysql --log-error=/data/mariadb/liang-00.err --pid-file=/data/mariadb/liang-00.pid --socket=/tmp/mysql.sock --port=3306
root 4159 0.0 0.0 112704 972 pts/0 S+ 22:50 0:00 grep --color=auto mysql
[root@liang-00 mariadb]#
在自定义配置文件位置时,我们在/etc/init.d/mariadb中指定了配置文件位置,但在启动mariadb时,系统还是加载了/etc/my.cnf 文件。
这样我们只能把 datadir=/data/mariadb 定义在 /usr/local/mariadb/my.cnf 中了。
11.7-11-9 Apache安装
apache是一个基金会的名字,httpd才是我们要安装文软件包,在早期的版本中叫apache,现在我们习惯上叫apache。
apache的官网 www.apache.org
2.4版本和2.2版本安装方法不一样,涉及到依赖函数apr。
apr和ap-util是一个通用函数库,它让httpd可以不关心底层的操作系统平台,可以和方便的移植。
Apache的安装
1、下载相关的软件包,解压
[root@liang-00 src]# ll total 922728 drwxr-xr-x 28 mysql mysql 4096 Nov 2 00:55 apr-1.6.5 -rw-r--r-- 1 root root 1073556 Sep 14 12:07 apr-1.6.5.tar.gz drwxr-xr-x 21 mysql mysql 4096 Nov 2 01:08 apr-util-1.6.1 -rw-r--r-- 1 root root 554301 Oct 23 2017 apr-util-1.6.1.tar.gz drwxr-sr-x 12 root 40 4096 Nov 2 21:03 httpd-2.4.37 -rw-r--r-- 1 root root 9177278 Oct 22 22:13 httpd-2.4.37.tar.gz -rw-r--r-- 1 root root 604055819 Dec 1 14:32 mariadb-10.2.10-linux-glibc_214-x86_64.tar.gz -rw-r--r-- 1 root root 328563044 Feb 26 2018 mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz drwxr-xr-x 7 root root 8192 Nov 2 01:17 pcre-8.10 -rw-r--r-- 1 root root 1409751 Jun 26 2010 pcre-8.10.zip
2、安装apr、apr-util
[root@liang-00 ~]# ls /usr/local/apr bin build-1 include lib [root@liang-00 ~]# ls /usr/local/apr-util/ bin include lib [root@liang-00 ~]#
3、安装httpd。
./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
其中 --enable-so 表示支持动态扩展模块,比如php就是以模块的方式在apache中。
--enable-mods-shared=most 指定需要加载的模块,most指大多数模块。
安装过程中会出出现 pcre-config 错误,这时我们就要用之前的方法解决,yum install -y pcre-devel 解决。因为之前安装apache2时用到,我再次安装时没有出现错误。
config.status: creating include/ap_config_auto.h config.status: executing default commands configure: summary of build options: Server Version: 2.4.37 Install prefix: /usr/local/apache2.4 C compiler: gcc -std=gnu99 CFLAGS: -g -O2 -pthread CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE LDFLAGS: LIBS: C preprocessor: gcc -E [root@liang-00 httpd-2.4.37]# echo $? 0
make
make[4]: Entering directory `/usr/local/src/httpd-2.4.37/modules/mappers' make[4]: Nothing to be done for `local-shared-build'. make[4]: Leaving directory `/usr/local/src/httpd-2.4.37/modules/mappers' make[3]: Leaving directory `/usr/local/src/httpd-2.4.37/modules/mappers' make[2]: Leaving directory `/usr/local/src/httpd-2.4.37/modules' make[2]: Entering directory `/usr/local/src/httpd-2.4.37/support' make[2]: Leaving directory `/usr/local/src/httpd-2.4.37/support' make[1]: Leaving directory `/usr/local/src/httpd-2.4.37' [root@liang-00 httpd-2.4.37]# echo $? 0 [root@liang-00 httpd-2.4.37]#
make install
Installing build system files mkdir /usr/local/apache2.4/build Installing man pages and online manual mkdir /usr/local/apache2.4/man mkdir /usr/local/apache2.4/man/man1 mkdir /usr/local/apache2.4/man/man8 mkdir /usr/local/apache2.4/manual make[1]: Leaving directory `/usr/local/src/httpd-2.4.37' [root@liang-00 httpd-2.4.37]# echo $? 0
httpd中的目录文件。
[root@liang-00 httpd-2.4.37]# cd /usr/local/apache2.4/ [root@liang-00 apache2.4]# ls bin build cgi-bin conf error htdocs icons include logs man manual modules
bin目录,下面有可执行文件httpd。
[root@liang-00 apache2]# ls bin/httpd bin/httpd [root@liang-00 apache2]#
conf目录,配置文件所在目录,用的比较多。
htdocs目录,存放着访问页面,和默认访问页面。
logs目录,日志,错误日志,访问日志,文档。
modules目录,扩展模块目录。
[root@liang-00 apache2]# ls modules/ httpd.exp mod_authz_host.so mod_filter.so mod_proxy_fcgi.so mod_setenvif.so mod_access_compat.so mod_authz_owner.so mod_headers.so mod_proxy_fdpass.so mod_slotmem_shm.so mod_actions.so mod_authz_user.so mod_include.so mod_proxy_ftp.so mod_socache_dbm.so mod_alias.so mod_autoindex.so mod_info.so mod_proxy_hcheck.so mod_socache_memcache.so mod_allowmethods.so mod_buffer.so mod_lbmethod_bybusyness.so mod_proxy_http.so mod_socache_shmcb.so mod_auth_basic.so mod_cache_disk.so mod_lbmethod_byrequests.so mod_proxy_scgi.so mod_speling.so mod_auth_digest.so mod_cache.so mod_lbmethod_bytraffic.so mod_proxy.so mod_status.so mod_auth_form.so mod_cache_socache.so mod_lbmethod_heartbeat.so mod_proxy_uwsgi.so mod_substitute.so mod_authn_anon.so mod_cgid.so mod_log_config.so mod_proxy_wstunnel.so mod_unique_id.so mod_authn_core.so mod_dav_fs.so mod_log_debug.so mod_ratelimit.so mod_unixd.so mod_authn_dbd.so mod_dav.so mod_logio.so mod_remoteip.so mod_userdir.so mod_authn_dbm.so mod_dbd.so mod_macro.so mod_reqtimeout.so mod_version.so mod_authn_file.so mod_dir.so mod_mime.so mod_request.so mod_vhost_alias.so mod_authn_socache.so mod_dumpio.so mod_negotiation.so mod_rewrite.so mod_watchdog.so mod_authz_core.so mod_env.so mod_proxy_ajp.so mod_sed.so mod_authz_dbd.so mod_expires.so mod_proxy_balancer.so mod_session_cookie.so mod_authz_dbm.so mod_ext_filter.so mod_proxy_connect.so mod_session_dbd.so mod_authz_groupfile.so mod_file_cache.so mod_proxy_express.so mod_session.so [root@liang-00 apache2]# du -sh modules/ 6.4M modules/ [root@liang-00 apache2]#
查看apache加载的模块。/usr/local/apache2.4/bin/httpd -M 或者 /usr/local/apache2.4/bin/apachectl
[root@liang-00 apache2]# /usr/local/apache2.4/bin/httpd -M AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fef5:8a7f. 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)
其中static 静态,shared扩展模块。
static:编译进了bin中,绑定到httpd中。
shared:扩展模块。
启动apache服务。/usr/local/apache2.4/bin/apachectl start
11.10 安装PHP5
php官网:www.php.net
主流版本:5.6/7.1 大部分企业用的是5版本的。
php安装
1、下载软件包,解压。
2、编译php
--with-config-file-path=/usr/local/php/etc 指定配置文件所在的路径,php的配置文件叫php.ini。
--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config 三种不同的mysql,编译出支持mysql的模块。
checking for stdlib.h... (cached) yes checking for strtoll... yes checking for atoll... yes checking for strftime... (cached) yes checking which regex library to use... php checking whether to enable LIBXML support... yes checking libxml2 install dir... yes checking for xml2-config path... configure: error: xml2-config not found. Please check your libxml2 installation. [root@liang-00 php-5.6.30]# echo $? 1 [root@liang-00 php-5.6.30]#
安装时出现了error: xml2-config not found. 错误问题。
缺少xml2。
yum install -y libxml2-devel
之后继续编译,依次解决错误问题。
最后完成./configure
make
clicommand.inc directorytreeiterator.inc invertedregexiterator.inc directorygraphiterator.inc pharcommand.inc phar.inc Build complete. Don't forget to run 'make test'. [root@liang-00 php-5.6.30]# echo $? 0
make install
Installing PEAR environment: /usr/local/php/lib/php/ [PEAR] Archive_Tar - installed: 1.4.0 [PEAR] Console_Getopt - installed: 1.4.1 [PEAR] Structures_Graph- installed: 1.1.1 [PEAR] XML_Util - installed: 1.3.0 [PEAR] PEAR - installed: 1.10.1 Wrote PEAR system config file at: /usr/local/php/etc/pear.conf You may want to add: /usr/local/php/lib/php to your php.ini include_path /usr/local/src/php-5.6.30/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin ln -s -f phar.phar /usr/local/php/bin/phar Installing PDO headers: /usr/local/php/include/php/ext/pdo/ [root@liang-00 php-5.6.30]# echo $? 0 [root@liang-00 php-5.6.30]#
完成php的安装。
php目录文件。
php的核心配置文件在bin目录下。
php和apache结合是通过libphp5.so文件实现的。
[root@liang-00 php]# du -sh /usr/local/apache2.4/modules/libphp5.so 36M /usr/local/apache2.4/modules/libphp5.so [root@liang-00 php]#
查看php所加载的模块。/usr/local/php/bin/php -m。这些模块全部是静态的,支持扩展模块安装。
[root@liang-00 php]# /usr/local/php/bin/php -m [PHP Modules] bz2 Core ctype date dom ereg exif fileinfo filter gd hash iconv json libxml mbstring mcrypt mysql mysqli openssl pcre PDO pdo_mysql pdo_sqlite Phar posix Reflection session SimpleXML soap sockets SPL sqlite3 standard tokenizer xml xmlreader xmlwriter zlib [Zend Modules] [root@liang-00 php]#
在LNMP中php是以apache模块的方式存在的。
在apache中就有php模块。
在apache配置文件 /usr/local/apache2.4/conf/httpd.conf 中就有php5_module加载选项。
php配置文件。
/usr/local/php/bin/php -i |less 可以查看php相关的信息,包括编译选项、配置文件等。
把php的参考配置文件拷贝到 /usr/local/php/etc目录下。
参考配置文件:/usr/local/src/php-5.6.30/php.ini-production 或 /usr/local/src/php-5.6.30/php.ini-development 其中,前面的是生产环境的版本,后面的是开发用到的。
[root@liang-00 php]# cp /usr/local/src/php-5.6.30/php.ini-production /usr/local/php/etc/php.ini
11.13 安装PHP7
1、下载包,解压。
wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
tar jxvf php-7.1.6.tar.bz2
2、编译安装php7。
./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
其中编译参数和php5的参数有差别,路径 --prefix=/usr/local/php7
没有--with-mysql 只有 --with-mysqli=/usr/local/mysql/bin/mysql_config。
查看apache中加载的php7模块,和apache配置文件中的php模块。
11.14-11.15 Apache和PHP结合
配置httpd支持解析php
httpd的主配置文件:/usr/local/apache2.4/conf/httpd.conf 配置。
1、ServerName
在启动httpd服务时我们会看到这样的提醒,这是因为没有定义ServerName。
[root@liang-00 php-7.1.6]# /usr/local/apache2.4/bin/apachectl restart AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fef5:8a7f. Set the 'ServerName' directive globally to suppress this message [root@liang-00 php-7.1.6]#
将ServerName去掉#生效。
注释掉php7
2、Require all denied
Windows访问httpd的80端口,默认linux的80端口是关闭的,这时我们就需要在iptables中添加一条打开80端口规则。
Windows打开telnet方法:
控制面板--系统安全--允许程序通过防火墙,找到telnet打开就可以了。
有时我们访问httpd服务时会出现forbidden 403。是因为有 Require all denied 。
改为 Require all granted 就可以正常了
改完配置文件后我们要用 /usr/local/apache2.4/bin/apachectl -t 检查语法是否错误。
之后用 /usr/local/apache2.4/bin/apachectl graceful 重新加载配置文件,这样不会把服务给停止掉。
3、AddType application/x-httpd-php .php 增加一行关于php解析的内容。
DirectoryIndex index.html index.php 增加索引页,让用输入地址时不加 index.php 后缀就能访问网页。
验证apache是不是支持解析php
1、在 /usr/local/apache2.4/htdocs/ 目录中添加1.php文件。
编辑 /usr/local/apache2.4/htdocs/1.php 添加以下内容。
在浏览器中打开,出现以下内容说明可以正常解析php了。如果没有正常解析的话会出现源代码。
当遇到php不能解析时,排查步骤:httpd中是否有php模块、在配置文件中有没有配置php模块代码行、AddType是否加上等。
验证httpd解析php7
在配置文件 /usr/local/apache2.4/conf/httpd.conf 中添加php7模块,去掉php5模块。
保存退出,检查语法,重新加载配置文件。
[root@liang-00 php-7.1.6]# !vim vim /usr/local/apache2.4/conf/httpd.conf [root@liang-00 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@liang-00 php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful [root@liang-00 php-7.1.6]#
在linux命令行中 Ctrl+r 快捷键,可以用关键词搜索用过的命令历史。
在浏览器中查看解析的php7.
浏览器中加载的内容和 /usr/local/php7/bin/php -i 内容是一样的。