第十八章 lamp架构

18.1 lamp简介

有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。

所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台

18.2 Web服务器工作流程

在说lamp架构平台的搭建前,我们先来了解下什么是CGI,什么是FastCGI,什么是......

web服务器的资源分为两种,静态资源和动态资源。

所谓静态资源就是指静态内容,客户端从服务器获得的资源的表现形式与原文件相同。可以简单的理解为就是直接存储于文件系统中的资源

动态资源则通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端。

那么web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求

如上图所示

阶段①显示的是httpd服务器(即apache)和php服务器通过FastCGI协议进行通信,且php作为独立的服务进程运行

阶段②显示的是php程序和mysql数据库间通过mysql协议进行通信。php与mysql本没有什么联系,但是由Php语言写成的程序可以与mysql进行数据交互。同理perl和python写的程序也可以与mysql数据库进行交互

18.2.1 cgi与fastcgi

上图阶段①中提到了FastCGI,下面我们来了解下CGI与FastCGI。

CGI(Common Gateway Interface,通用网关接口),CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。

FastCGI(Fast Common Gateway Interface)是CGI的改良版,CGI是通过启用一个解释器进程来处理每个请求,耗时且耗资源,而FastCGI则是通过master-worker形式来处理每个请求,即启动一个master主进程,然后根据配置启动几个worker进程,当请求进来时,master会从worker进程中选择一个去处理请求,这样就避免了重复的生成和杀死进程带来的频繁cpu上下文切换而导致耗时

18.2.2 httpd与php结合的方式

httpd与php结合的方式有以下三种:

a) modules:php将以httpd的扩展模块形式存在,需要加载动态资源时,httpd可以直接通过php模块来加工资源并返回给客户端

httpd prefork:libphp5.so(多进程模型的php)

httpd event or worker:libphp5-zts.so(线程模型的php)

b) CGI:httpd需要加载动态资源时,通过CGI与php解释器联系,获得php执行的结果,此时httpd负责与php连接的建立和断开等

c) FastCGI:利用php-fpm机制,启动为服务进程,php自行运行为一个服务,https通过socket与php通信

较于CGI方式,FastCGI更为常用,很少有人使用CGI方式来加载动态资源

18.2.3 web工作流程

下面来通过上面的图说明一下web的工作流程

客户端通过http协议请求web服务器资源,web资源收到请求后判断客户端请求的资源是静态资源或是动态资源,若是静态资源则直接从本地文件系统取之返回给客户端。否则若为动态资源则通过FastCGI协议与php服务器联系,通过CGI程序的master进程调度worker进程来执行程序以获得客户端请求的动态资源,并将执行的结果通过FastCGI协议返回给httpd服务器,httpd服务器收到php的执行结果后将其封装为http响应报文响应给客户端。在执行程序获取动态资源时若需要获得数据库中的资源时,由Php服务器通过mysql协议与MySQL/MariaDB服务器交互,取之而后返回给httpd,httpd将从php服务器收到的执行结果封装成http响应报文响应给客户端。

18.3 lamp平台构建

18.3.1 通过yum安装方式构建lamp平台

CentOS7下构建lamp:

要安装的程序包:httpd,php,php-mysql,mariadb-server

注意:php要求httpd使用prefork MPM

yum -y install httpd php php-mysql mariadb-server
systemctl start httpd.service
systemctl start mariadb.service

CentOS6下构建lamp:

要安装的程序包:httpd,php,php-mysql,mysql-server

yum -y install httpd php php-mysql mysql-server
service httpd start
service mysqld start

18.3.2 编译安装lamp

http对fastcgi协议的支持:

a) httpd-2.2:需要额外安装fastcgi模块

wget https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.bz2
tar xf mod_fcgid-2.3.9.tar.bz2
cd mod_fcgid-2.3.9
./configure.apxs
make
make install

b) httpd-2.4:自带fastcgi模块

安装次序:httpd,MariaDB,php

  安装httpd-2.2:

cd /usr/src
wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.2.32.tar.bz2
tar xf httpd-2.2.32.tar.bz2
cd httpd-2.2.32
./configure --prefix=/usr/local/httpd
make
make install
echo ‘PATH=/usr/local/httpd/bin:$PATH‘ > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh
ln -s /usr/local/httpd/include/ /usr/include/httpd
echo ‘MANPATH /usr/local/httpd/man‘ >> /etc/man.config
apachectl start

  安装MariaDB:

cd /usr/src
wget http://ftpmirror.gnu.org/gcc/gcc-5.2.0/gcc-5.2.0.tar.bz2
tar xf gcc-5.2.0.tar.bz2
cd gcc-5.2.0
./contrib/download_prerequisites
yum -y install gcc-c++ glibc-static gcc

./configure --prefix=/usr/local/gcc  --enable-bootstrap  --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j $(cat /proc/cpuinfo |grep ‘processor‘|wc -l)
make install

echo ‘export PATH=/usr/local/gcc/bin:$PATH‘ > /etc/profile.d/gcc.sh
. /etc/profile.d/gcc.sh
ln -sv /usr/local/gcc/include/ /usr/include/gcc
echo ‘/usr/local/gcc/lib64‘ > /etc/ld.so.conf.d/gcc.conf
echo ‘/usr/local/gcc/lib‘ >> /etc/ld.so.conf.d/gcc.conf
ldconfig -p |grep gcc  #验证是否导出头文件

cd /usr/src
yum install -y ncurses-devel openssl-devel openssl cmake mysql-devel
wget 
 
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 mysql
mkdir -pv /data/mydata
chown -R mysql.mysql /data/mydata

tar xf mariadb-10.2.6.tar.gz
cd mariadb-10.2.6
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mydata -DSYSCONFDIR=/etc  -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
make -j $(cat /proc/cpuinfo |grep ‘processor‘|wc -l)
make install

  cmake参数说明:

# 安装根目录
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql

# 数据存储目录
-DMYSQL_DATADIR=/data/mydata

# UNIX socket文件
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock

# 配置文件(my.cnf)目录
-DSYSCONFDIR=/etc

# 默认字符集
-DDEFAULT_CHARSET=utf8

# 默认字符校对
-DDEFAULT_COLLATION=utf8_general_ci

# TCP/IP端口
-DMYSQL_TCP_PORT=3306 

# * ARCHIVE 引擎支持
-DWITH_ARCHIVE_STORAGE_ENGINE=1 

# * ARIA 引擎支持
-DWITH_ARIA_STORAGE_ENGINE=1

# * BLACKHOLE 引擎支持
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 

# * FEDERATEDX 引擎支持
-DWITH_FEDERATEDX_STORAGE_ENGINE=1

# * PARTITION 引擎支持
-DWITH_PARTITION_STORAGE_ENGINE=1 

# * PERFSCHEMA 引擎支持
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 

# * SPHINX 引擎支持
-DWITH_SPHINX_STORAGE_ENGINE=1

# * XTRADB 支持
-DWITH_XTRADB_STORAGE_ENGINE=1 

# * innoDB 引擎支持
-DWITH_INNOBASE_STORAGE_ENGINE=1

# * Myisam 引擎支持
-DWITH_MYISAM_STORAGE_ENGINE=1

# readline库
-DWITH_READLINE=1 

# 启用加载本地数据
-DENABLED_LOCAL_INFILE=1

# 扩展支持编码 ( all | utf8,gbk,gb2312 | none )
-DWITH_EXTRA_CHARSETS=all

# 扩展字符支持
-DEXTRA_CHARSETS=all

# 系统传输使用SSL加密
-DWITH_SSL=system

# 系统传输使用zlib压缩,节约带宽
-DWITH_ZLIB=system

# libwrap库
-DWITH_LIBWRAP=0

# 运行用户
-DMYSQL_USER=mysql

# 调试模式
-DWITH_DEBUG=0

  配置MariaDB:

cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data/mydata/

echo ‘export PATH=/usr/local/mysql/bin:$PATH‘ > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
ln -sv /usr/local/mysql/include/ /usr/local/include/mysql
echo ‘/usr/local/mysql/lib‘ > /etc/ld.so.conf.d/mysql.conf
ldconfig -v
ldconfig -p |grep mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
cp support-files/my-large.cnf /etc/my.cnf
sed -i ‘/\[mysqld\]/a datadir=/data/mydata‘ /etc/my.cnf

service mysqld start
mysql -uroot -e ‘GRANT all ON *.* TO [email protected]"localhost" identified by "qwe123!"‘

安装php:详见18.4.3

18.3.3 测试

php程序执行环境:在/var/www/html目录下新建一个index.php文件,其内容如下:

<?php
    phpinfo();
?>

测试php程序与mysql通信:在/var/www/html目录下新建一个index.php文件,其内容如下:

<?php
    $conn=mysql.connect(‘HOSTNAME‘,‘USERNAME OF MYSQL‘,‘PASSWORD OF MYSQL USER‘);
    if ($conn)
        echo ‘Connect Success!‘;
    else
        echo ‘Connect Failed!‘;
    fi
    mysql.close();
?>

18.4 php

18.4.1 php解释器与MariaDB/mysql交互

php解释器本身无须与MariaDB交互,只有那些用到数据存储系统的程序才需要与数据存储交互。

常见的数据存储系统有以下这些:

a) 文件系统:存储文件

b) SQL:MariaDB,Oracle,MSSQL,...

c) NoSQL:redis,mongodb,hbase,...

NewSQL

18.4.2 php配置文件

php官网:www.php.net

php加速器:APC,eAccelerator,Xcache,OPcache

配置文件:/etc/php.ini,/etc/php.d/*.ini

php.ini核心配置选项:http://php.net/manual/zh/ini.core.php

php.ini配置选项列表:http://php.net/manual/zh/ini.list.php

配置文件(php.ini)在php启动时被读取。对于服务器模块版本的php,仅在web服务器启动时读取一次。对于CGI和CLI版本,每次调用都会读取

18.4.3 php编译安装

php编译安装步骤:

a) 解决依赖关系

配置好yum源(系统安装湖及Epel源)后执行如下命令:

yum -y groupinstall ‘Desktop Platform Development‘
yum -y install epel-release
yum -y install bzip2-devel libmcrypt-devel libxml2-devel

b) 编译安装php

cd /usr/src
wget http://cn2.php.net/distributions/php-5.6.30.tar.xz
xz -d php-5.6.30.tar.xz
tar xf php-5.6.30.tar
cd php-5.6.30 
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/httpd/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-opcache

说明:

这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项

如果使用PHP5.3以上版本,为了链接mysql数据库,可以指定mysqlnd,这样在本机就不需要先安装mysql或mysql开发包了

mysqlnd从php5.3开始可用,可以编译时绑定到它(而不用和具体的mysql客户端绑定形成依赖),但从php5.4开始它就是默认设置了

./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
make
#make test
make install
echo ‘export PATH=/usr/local/php/bin:$PATH‘ > /etc/profile.d/php.sh
. /etc/profile.d/php.sh

c) 为php提供配置文件

cp php.ini-production /etc/php.ini

d) 编辑apache配置文件httpd.conf使其支持php

添加如下两行:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

定位至DirectoryIndex index.html,修改为:

DirectoryIndex index.php index.html

而后重启httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用

e) 安装xcache,为php加速(php5.5及以下版本)

安装xcache:

cd /usr/src
wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2
tar xf xcache-3.2.0.tar.bz2
cd xcache-3.2.0
/usr/local/php/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install

安装结束时,会出现类似如下行:

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/

编辑php.ini,整合php和xcache:

首先将xcache提供的样例配置导入php.ini:

cat xcache.ini >> /etc/php.ini

说明:xcache.ini文件在xcache的源码目录中

接下来编辑/etc/php.ini,找到zend_extension开头的行,修改为如下行:

zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so

注意:如果php.ini文件中有多条zend_extension指令行,需确保此新增的行排在第一位

编辑/etc/php.ini,修改以下内容:

xcache.admin.user = "admin"
#通过openssl passwd -1 PASSWORD命令生成密码,然后在http://xcache.lighttpd.net/demo/cacher/mkpassword.php页面加密密码
xcache.admin.pass = "21232f297a57a5a743894a0e4a801fc3"
xcache.mmap_path =    "/tmp/xcache"

创建/tmp/xcache文件并赋权:

touch /tmp/xcache
chmod 777 /tmp/xcache

重启httpd:

apachectl restart

然后在phpinfo页面查看是否有xcache模块

f) OPcache(5.5+版本加速)

PHP5.5.0以后版本自带Opcache加速器,但默认情况下未启用。所以编译的使用我们想要启用该PHP加速器就应该添加参数 : –enable-opcache 来制定。

对于已经编译安装了PHP5.5.0以上版本但当初又没有启用该加速器的用户可以像PHP添加模块一样编译添加。步骤如下:

cd /usr/src/php-5.6.30/ext/opcache
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

最后它会告诉你opcache.so已编译成功,放在/usr/local/php/lib/php/extensions/no-debug-zts-20131226/目录下

编辑php.ini文件,配置opcache

vim /etc/php.ini

修改或添加如下代码并保存退出:

[opcache]
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=200
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=20000
opcache.revalidate_freq=1
opcache.fast_shutdown=1

然后重启httpd服务,就可以用php -m命令或在phpinfo界面看到opcache已经开启了

  常用的opcache配置介绍:

opcache.enable={0|1}#关闭或开启opcache功能,默认为0(关闭)

opcache.enable_cli={0|1}#关闭或开启CLI

opcache.memory_consumption=528 #opcache可用的内存大小,单位为Mb,根据自身情况而定,决定了总共能够存储多少预编译的PHP代码

opcache.interned_strings_buffer=8 #zend optimizer + 暂存池中字符串的占内存总量,单位为MB,推荐设为8

opcache.max_accelerated_files=10000#对多缓存文件限制, 最大缓存的文件数目在200到100000之间,命中率不到 100% 的话, 可以试着提高这个值,推荐设为4000

opcache.revalidate_freq=1 #Opcache会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 单位为秒。推荐设为60,注意,0是一直检查而不是关闭

opcache.fast_shutdown=1 #打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高

opcache.max_wasted_percentage=5 #内存“浪费”达到此值对应的百分比,就会发起一个重启调度。

opcache.use_cwd=0 #开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上,以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能,但是会对已存在的应用造成破坏

opcache.validate_timestamps=1 #开启文件时间戳验证

opcache.revalidate_path=0 #允许或禁止在 include_path 中进行文件搜索的优化

opcache.save_comments=1 #是否保存文件/函数的注释。如果apigen、Doctrine、ZF2、PHPUnit需要文件注释,推荐设为0

opcache.load_comments=1 #是否加载文件/函数的注释

opcache.enable_file_override=0 #允许覆盖文件存在(file_exists等)的优化特性

opcache.optimization_level=0xffffffff #定义启动多少个优化过程

opcache.inherited_hack=1 #启用此Hack可以暂时性的解决”can’t redeclare class”错误

opcache.dups_fix=0 #启用此Hack可以暂时性的解决”can’t redeclare class”错误

opcache.blacklist_filename= #设置不缓存的黑名单,不缓存指定目录下cache_开头的PHP文件。如/png/www/example.com/public_html/cache/cache_

opcache.max_file_size=0 #通过文件大小屏除大文件的缓存.默认情况下所有的文件都会被缓存

opcache.consistency_checks=0 #每 N 次请求检查一次缓存校验.默认值0表示检查被禁用了。由于计算校验值有损性能,这个指令应当紧紧在开发调试的时候开启

opcache.force_restart_timeout=180 #从缓存不被访问后,等待多久后(单位为秒)调度重启

opcache.error_log= #错误日志文件名.留空表示使用标准错误输出(stderr)

opcache.log_verbosity_level=1 #将错误信息写入到服务器(Apache等)日志

opcache.preferred_memory_model= #内存共享的首选后台.留空则是让系统选择

opcache.protect_memory=0 #防止共享内存在脚本执行期间被意外写入, 仅用于内部调试

g) 启用服务器状态(编辑httpd.conf)

mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:

处于工作状态的worker进程数

空闲状态的worker进程数

每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数

当前服务器总共发送的字节数

服务器自上次启动或重启以来至当前的时长

平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数

启用状态页面的方法很简单,只需要在主配置文件中添加如下内容即可:

<Location /server-status>
    SetHandler server-status
    Allow from all   #httpd-2.2版本使用此条授权
    Require all granted  #httpd-2.4版本使用此条授权
    #注意,Allow语句与Require语句二选一,不可同时使用
</Location>

需要提醒的是,这里的状态信息不应该被所有人随意访问。因此,应该限制仅允许某些特定地址的客户端查看。比如使用Require ip 172.16.0.0/16来限制仅允许指定网段的主机查看些页面。

可以用http://ip/server-status来查看状态界面

18.4.4 配置以fpm方式工作的php

a) 解决依赖关系

yum -y groupinstal  "X Software Development"

若想让编译的php支持mcrypt扩展,执行以下命令:

yum -y install libmcrypt libmcrypt-devel mhash mhash-devel

b) 编译安装php

cd /usr/src
wget http://cn2.php.net/distributions/php-5.5.38.tar.xz
xz -d php-5.5.38.tar.xz
tar xf php-5.5.38.tar
cd php-5.5.38
./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
make && make install

cp php.ini-production /etc/php.ini

c) 配置php-fpm

为php-fpm提供SysV init脚本,并将其添加至服务列表:

cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
chmod +x /etc/rc.d/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

为php-fpm提供配置文件:

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

编辑php-fpm的配置文件(/usr/local/php/etc/php-fpm.conf):

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pm.max_children = 50    #最多同时提供50个进程提供50个并发服务
pm.start_servers = 5    #启动时启动5个进程
pm.min_spare_servers = 2    #最小空闲进程数
pm.max_spare_servers = 8    #最大空闲进程数
pid = /usr/local/php/var/run/php-fpm.pid

启动php-fpm:

service php-fpm start

使用如下命令来验证(如果此命令输出中有几个php-fpm进程说明启动成功了):

ps aux|grep php-fpm

默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验证其是否已经监听在相应的套接字:

ss -tanlp |grep php-fpm

18.4.5 配置httpd-2.4.9

httpd-2.4.9配置:

a) 启用httpd的相关模块

在apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩展,因此,这两个模块都要加载,编辑httpd.conf文件,加入以下两行内容:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

b) 配置虚拟主机支持使用fcgi

在需要使用fcgi的虚拟主机中添加类似如下两行:

ProxyRequests Off#关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

如:

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/idfsoft.com/$1

表示把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI

所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定

示例:

<VirtualHost *:80>
    DocumentRoot "/var/www/html/idfsoft.com"
    ServerName idfsoft.com
    ServerAlias www.idfsoft.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/idfsoft.com/$1
    <Directory "/var/www/html/idfsoft.com">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

c) 编辑apache的配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

添加如下两行:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

定位至DirectoryIndex index.html,修改为:

DirectoryIndex index.php index.html

而后重启httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用

注意:Apache httpd 2.4以前的版本中,要么把PHP作为apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现

时间: 2024-11-20 13:06:58

第十八章 lamp架构的相关文章

第十八章 Linux集群架构

18.1 集群介绍集群概述根据功能划分为两大类:高可用和负载均衡.1)高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务实现高可用的开源软件有:heartbeat.keepalived.后者好用,前者好久未更新了.2)负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2.实现负载均衡的开源软件有LVS.keepalived.haprox

LAMP架构之分离式-php-fpm

一.LAMP架构之分离式拓扑 二.架构说明 当客户端访问Web服务器时,Web服务器根据客户端访问的资源进行判断,如果是静态的页面Web服务器就直接返回给给客户端,如果是动态的页面,Web服务器就请求PHP服务器进行解析,在解析过程有需要MySQL数据的PHP服务器就请求MySQL服务器,PHP服务器解析完后封装发送给Web服务器,Webt器在封装发送给客户端. 三.架构规划 主机 网卡1 网卡2 备注 客户端 172.16.9.6 - - Web服务器 172.16.9.21 10.0.9.2

Linux内核分析——第十八章 调试

第十八章    调试 18.1 准备开始 1.在用户级的程序里,bug表现比较直接:在内核中却不清晰. 2.内核级开发的调试工作远比用户级开发艰难的多. 3.准备工作需要的是: (1)一个bug (2)一个藏匿bug的内核版本 (3)相关内核代码的知识和运气 18.2 内核中的bug 1.内核中的bug多种多样. 2.引用空指针会产生一个oops:垃圾数据会导致系统崩溃. 3.定时限制和竞争条件都允许多个线程在内核中同时运行产生的结果. 18.3 通过打印来调试 一.健壮性 1.健壮性——在任何

Linux Socket Programming by Example-第十八章 实战

第18章主要介绍了一个软件实践项目. 架构: C/S 功能:实现一个股票信息广播发布平台. 这个代码本身对2年工作以上的人来说,毫无参考价值. 主要的是软件本身引发的一些发散思考. 最近智能家电 物联网 大数据 数字医疗等都很火热. 这些设备均涉及到2个网络, 一个是基于WIFI.以太网的局域网 一个是基于ISP服务的互联网. 具体构架: 家里的智能设备     -> WiFi  ->  智能路由器 -> ISP ->  互联网 (远程服务器) 如果将智能路由器扩展下,变成带数据库

Linux精华篇—CentOS 7.4下源码编译构建LAMP架构

CentOS 7.4搭建LAMPLAMP:Linux.Apache.mysql.php 目录:第一部分 准备工作第二部分 安装Apache服务第三部分 安装MySQL服务第四部分 搭建PHP运行环境第五部分 LAMP架构应用 第一部分 准备工作一:服务器:Linux系统-CentOS 7.4:IP地址:192.168.80.10客户端:以WIN7为例,测试验证结果,与服务器在同一网段:IP地址:192.168.80.2 二:下载压缩包http://httpd.apache.org/downloa

LAMP架构部署——编译安装PHP

LAMP架构简介 LAMP架构是目前应用最为成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境.LAMP这个词是一个缩写,具体包括:Linux操作系统.Apache网站服务器.MySQL数据库服务器,PHP (或Perl.Python)网页编程语言. 在LAMP平台的四个构成组件中,每一个组件都承担着一部分关键应用.经过过去十几年的发展,各组件间的兼容性得到了不断的完善,协作能力和稳定性也不断增强,可以构建出非常优秀的Web应用系统.各组

《Linux内核设计与实现》读书笔记 第十八章 调试

第十八章调试 18.1 准备开始          需要准备的东西: l  一个bug:大部分bug通常都不是行为可靠而且定义明确的 l  一个藏匿bug的内核版本:找出bug首先出现的版本 l  相关内核代码的知识和运气 最好能让bug重现,有一些bug存在而且有人没办法让他重现,因为内核与用户程序和硬件间的交互很微妙. 18.2内核中的bug 可以有无数种原因产生,表象也变化多端.代码中的错误往往引发一系列连锁反应,目击者才看到bug. 18.3通过打印来调试 内核提供了打印函数printk

利用lamp架构搭建Discuz论坛,并实现对数据库的高可用

lamp架构=LAMP指的Linux(操作系统).Apache(HTTP 服务器),MySQL(数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web 服务器. #############源码安装php########### tar jxf php-5.6.20.tar.bz2 cd php-5.6.20 解决依赖性: yum install freetype-devel libmcrypt-2.5.8-9.el6.x86_64.rpm net-snmp-d

LAMP架构搭建+Discuz论坛搭建【weber出品必属精品】

一.     本机简介: 本机系统: CentOS-6.4-x86_64 主机名:oracle.ywb IP地址:192.168.146.129 二.     在Linux环境下安装Apache步骤 首先将准备好的文件通过PSCP发送至Linux的/Root/test/soft目录下 在windows下按住Ctrl+R,打开运行,输入CMD进入DOS命令行.在dos命令行中使用pscp –scp  命令将要上传的文件上传至Linux中. 上传成功后.我们总共要安装四个文件.第一个我们首先解压:a