Nginx|Apache web服务器发布静态页面,MYSQL开源、收费,(Mariadb开源免费)、PHP一门解释性动态语言(网页代码index.php),PHP模块解析,基于Apache+PHP整合,互联网主流发布PHP网站架构。Apache将页面请求交给PHP模块,由PHP模块去解析该页面,解析完毕PHP解释器将页面内容返回给Apache,apache最终返回给用户php
一、当客户请求的是静态资源时,web服务器会直接把静态资源返回客户端;css
二、当客户请求的是动态资源时,httpd的php模块会进行相应的动态资源运算,若是此过程还须要数据库的数据做为运算参数时,php会链接mysql获取数据后进行运算,运算的结果转为静态资源由web服务器返回到客户端html
图1-1 LAMP架构图mysql
根据图1-1中访问数据流可知,处理一次动态页面请求,服务器主要经历:Apache处理请求——经过CGI接口访问PHP的的应用程序——PHP应用程序调用PHP解释器执行PHP代码——PHP程序访问调用数据库——最后给客户作反馈。故在LAMP的环境机构中,apache、mariadb和php的主要功能分别以下。linux
apache主要实现以下功能:nginx
第一:处理http的请求、构建响应报文等自身服务;c++
第二:配置让Apache支持PHP程序的响应(经过PHP模块或FPM);web
第三:配置Apache具体处理php程序的方法,如经过反向代理将php程序交给fcgi处理。面试
mariadb主要实现以下功能:sql
第一:提供PHP程序对数据的存储;
第二:提供PHP程序对数据的读取(一般状况下从性能的角度考虑,尽可能实现数据库的读写分离)。
php主要实现以下功能:
第一:提供apache的访问接口,即CGI或Fast CGI(FPM);
第二:提供PHP程序的解释器;
第三:提供mairadb数据库的链接函数的基本环境。
由此可知,要实现LAMP在配置每个服务时,安装功能需求进行配置,便可实现LAMP的架构,固然apache、mariadb和php服务均可配置为独立服务,安装在不一样电脑之上。
根据上述介绍,可知PHP的主要三大功能提供CGI接口、PHP解释器和PHP与数据库的链接,其中PHP的工做模式有两种一种是编译为appache的模块,另一种是独立运行,可是在独立运行时,又可分为多种,所以PHP独立运行时,具体数据库链接编译分类以下:
第一种:RPM安装的数据库与php在同一台服务器
RPM安装的数据库与PHP在同一台服务器时,此时数据库编译时,数据库链接编译方式采用以下选项
--enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
第二种:RPM安装的数据库与PHP不在同一台服务器
RMP安装的数据库与PHP不在同一台服务器时,此时数据库编译时,数据库链接编译方式采用以下选项,由于当指定数据库安装位置时,没法找到头文件等相关源码程序:
--enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
第三种:二进制安装数据库与PHP在同一台服务器
二进制安装数据库时,需指定二进制数据库的安装的具体目录,所以PHP链接数据库时,能够调用数据库程序中的数据库链接工具,所以链接数据库编译方式能够采用以下方式:
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config |
第四种:二进制安装数据库与PHP不在同一台服务器
二进制安装数据库与PHP不在同一台服务器时,只能调用mysqlnd链接模块,由于没法调用二进制安装数据库的链接数据库程序,所以只能选择链接模块:
--enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
另外根据上述架构图中能够PHP具备承上启下的做用,位置举足轻重,上面讲述了编译过程当中与数据库的关系,固然和apache关系也一样重要,具体也能够分为三类,具体以下
1)源码安装比较麻烦,须要解决各类依赖,方便管理,方便定制各类功能;
2)二进制rpm|yum安装,自动解决依赖,不利于管理,不能定制功能;
3)线上生产环境推荐源码安装,方便管理,定制须要的功能;
关系型数据库特色:
一、数据以表格的形式出现;
二、每行记录数据的真实内容;
三、每列记录数据真实内容的数据域;
四、无数的行和列组成一张表;
五、若干的表组成一个数据库;
Apache性能调优
1)Apache WEB服务器,多模块,基于多个模块工做,须要某个模块就添加,不须要就无需添加模块;
2)Apache优化,选择Apache MPM处理请求方式,Prefork模式、Worker模式、Event模式,其中Prefork默认模式;
3)Prefork模式,预派生多进程方式,每一个进程包含一个线程,每一个线程同一时刻只能处理一个请求,进程之间是独立的,没有影响,一个进程挂掉,不影响其余的进程,稳定、靠谱,缺点占用内存、CPU资源高
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默认启动Apache工做进程数;
MinSpareServers 5 最小空闲进程数;
MaxSpareServers 20 最大空闲进程数;
ServerLimit 4096 Apache服务器最多进程数;
MaxClients 4096 每秒支持的最大客户端并发;
MaxRequestsPerChild 4000 每一个进程能处理的最大请求数;
</IfModule>
4)Work模式,预派生多进程方式,每一个进程包含多个线程,每一个线程同一时刻只能处理一个请求,进程之间是独立的,没有影响,一个进程挂掉,不影响其余的进程,可是若是一个进程中某个线程奔溃,整个进程及旗下全部线程都会奔溃,并且全部的线程共享该进程全部资源,相对稳定,高性能,应用于高并发!
5)Event模式,不支持HTTPS,通常用的比较少,性能比较强悍,比prefork模式性能高,Apache官网推荐在测试环境使用;
3)Prefork模式,
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默认启动Apache工做进程数;
MinSpareServers 5 最小空闲进程数;
MaxSpareServers 20 最大空闲进程数;
ServerLimit 4096 Apache服务器最多进程数;
MaxClients 4096 每秒支持的最大客户端并发;
MaxRequestsPerChild 4000 每一个进程能处理的最大请求数;
</IfModule>
<IfModule worker.c> Worker MPM引擎配置段;
StartServers 8 默认启动Apache工做进程数;
MaxClients 4000 每秒支持的最大客户端并发;
MinSpareThreads 25 最小空闲线程数;
MaxSpareThreads 75 最小空闲线程数;
ThreadsPerChild 75 每一个进程启动的线程数;
MaxRequestsPerChild 0 每一个进程能处理的最大请求数,0表示无限制;
</IfModule>
MYSQL主从原理(面试必备):
Slave将同步的数据存放到本地relay-log中继日志中,SQL线程实时监测而且在本地执行.
LAMP两种方法,第一种基于YUM在线安装:
yum install httpd httpd-devel mysql mysql-server mysql-devel php php-devel php-mysql php-comon -y
service httpd restart
service mysqld restart
yum install -y apr-devel apr-util
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
tar -jxvf httpd-2.2.34.tar.bz2
cd httpd-2.2.34
./configure --prefix=/usr/local/apache2/ --enable-so --enable-rewrite --enable-echo --enable-info
make
make install
预编译,提早检查操做系统可否知足httpd软件安装,有没有GCC(编译库);
make -j8 基于GCC库进行编译,主要是生成可运行二进制文件;
make -j8 install 将编译后的二进制文件cp至Linux prefix目录;
cd /usr/local/src
wet -c http://museum.php.net/php5/php-5.3.10.tar.gz
yum install -y gb curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel
cd php-5.3.10
./configure --prefix=/usr/local/php5 --enable-fpm --enable-debug --with-gb --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-curl --with-musql=/usr/local/mysql55/ --with-mysqli=/usr/local/mysql55/bin/mysql_config --with-config-file-path=/usr/local/php55/etc
make
make install
cp php.ini-development /usr/local/php5/etc/php.ini
安装php-5.3.28
cd /usr/local/src
wget -c http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
cd php-5.3.28
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql55/
make
make install
MYSQL数据库源码编译
yum install gcc gcc-c++ glibc glibc-devel cmake ncurses-devel ncurses -y
cd /usr/local/src
wget http://down1.chinaunix.net/distfiles/mysql-5.5.20.tar.gz
tar –xzf mysql-5.5.20.tar.gz
cd mysql-5.5.20
./configure --prefix=/usr/local/mysql5/|cmake替代./configure
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make
make install
安装mysql-5.1.63
cd /usr/local/src
wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz
tar xvf mysql-5.1.63.tar.gz
cd mysql-5.1.63
./configure --prefix=/usr/local/mysql --enable-assemble && make make install
配置Mysql服务为系统服务
cp /usr/local/mysql/share/mysql/mysql-medium.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
cd /usr/local/mysql
useradd mysql
chown -R mysql.mysql /usr/local/mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R mysql var
/usr/local/mysql/bin/mysql_safe --user=mysql &&
nginx安装配置
wget -c http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
useradd www
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
MYSQL安装配置
yum install cmake ncurses-devel ncurses -y
weg http://down.chinaunix.net/disfiles/mysql-5.5.20.tar.gz
Apache+PHP源码整合
为了能让Apache发布PHP页面,须要将PHP安装完成后的libphp5.so模块与Apache进行整合,vim httpd.conf编辑配置文件,加入以下代码:
LoadModule php5_module modules/libphp5.so (默认已存在)
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html index.htm
建立PHP测试页面,在/usr/local/apache/htdocs目录下建立index.php测试页面,执行以下命令自动建立:
cat >/usr/local/apache/htdocs/index.php<<EOF
<?php
phpinfo();
?>
EOF
从新启动Apache服务,浏览器输入 Apache WEB的IP访问,如图12-4所示,即表明LAMP源码环境整合成功。
MYSQL源码设置为系统服务:
将源码安装的Mysql数据库服务设置为系统服务,可使用chkconfig管理,并启动MYSQL数据库
cd /usr/local/mysql55/
\cp support-files/my-large.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
mkdir -p /data/mysql
useradd mysql
/usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
ln -s /usr/local/mysql55/bin/* /usr/bin/
service mysqld restart
使用shell安装LAMP
#!/bin/bash
#2017年7月19日15:09:44
#by author www.jfedu.net
#auto install lamp for Linux
###############
#Install Httpd Web service
wget -c http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
tar -jxf httpd-2.2.34.tar.bz2
cd httpd-2.2.34
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite
make -j8
make -j8 install
#Install mysql db service
yum install cmake ncurses-devel ncurses –y
wget http://down1.chinaunix.net/distfiles/mysql-5.5.20.tar.gz
tar -xzf mysql-5.5.20.tar.gz
cd mysql-5-5.20
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make
make install
#Config mysql db 2017
cd /usr/local/mysql55/
\cp support-files/my-large.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
mkdir -p /data/mysql
useradd mysql
/usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
ln -s /usr/local/mysql55/bin/* /usr/bin/
service mysqld restart
#Install PHP WEB service
wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
cd php-5.3.28
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql55
#config lamp 2017
echo "AddType application/x-httpd-php .php" >>/usr/local/apache2/conf/httpd.conf
sed -i 's/index.html/index.php index.html/g' /usr/local/apache2/conf/httpd.conf
cat>/usr/local/apache2/htdocs/index.php<<EOF
<?php
phpinfo();
?>
EOF
常见问题:
一、
Starting MySQL.. ERROR! The server quit without updating PID file (/data/mysql/www-jfedu-net.pid).
解决问题的步骤:
二、unzip wordpress-4.7.4-zh_CN.zip
-bash: unzip: command not found
错误解决方法:yum install zip unzip –y
三、软件与系统不兼容
apr软件包问题
解决办法:把apr或者apache降版本,换成httpd-2.2.32.tar.gz,编译的时候去掉,apr编译的部分
连接:
Red Hat Enterprise Linux 4+Nginx 0.7.47+PHP5.2+MYSQL5.0+Memcache+eAccelerator : https://www.jb51.net/os/RedHat/15751.html
RHEL 7.0 编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14运行环境 : https://www.jb51.net/os/RedHat/192933.html
yum 安装CentOS 7系统安装lamp环境 https://mp.weixin.qq.com/s/_WWK9emHCnSoRTgWC8tImA
VMware虚拟机安装CentOS 7并搭建Lamp服务器环境 https://mp.weixin.qq.com/s/VE_BOgMciB8FDkl-hL6Nsw
.htaccess中的apache rewrite规则详解 : http://blog.51cto.com/xiaogongju/2060949
Centos6.3下Apache配置基于加密的认证https加密证书访问 : https://www.jb51.net/os/RedHat/81409.html
CentOS搭建LAMP服务器环境硬盘分区方案分享 : https://www.jb51.net/os/RedHat/86180.html
Linux操做系统下提升PHP性能的工具APC : https://www.jb51.net/os/RedHat/1322.html
PHP startup: Unable to load dynamic library错误的错误 : https://www.jb51.net/os/RedHat/1314.html
centos5 源码安装Nginx + mysql + apache + php的方法 : https://www.jb51.net/os/RedHat/35925.html
Centos 5.5 php5.1.2升级到php5.2.6的方法 : https://www.jb51.net/os/RedHat/35036.html
Centos Nginx + Svbversion配置安装方法分享 : https://www.jb51.net/os/RedHat/35924.html
Centos5.2配置LAMP与Centos5.3配置LAMP : https://www.jb51.net/os/RedHat/22433.html
LAMP服务器性能优化技巧之加速PHP : https://www.jb51.net/article/29721.htm
RedHat AS4上安装配置Apache2.2.4+PHP5.2.3+MySQL5.0.45+openssl0.98e : https://www.jb51.net/os/RedHat/1132.html