CentOS8 LAMP的实现以及相关应用

  • CentOS8 LAMP的实现以及相关应用已关闭评论
  • 144 次浏览
  • A+
所属分类:linux技术
摘要

访问动态资源的时候,apache就是个异构代理服务器,接收并转发用户的请求。通过CGI或者fastcgi接口将请求转发给php解释器。


LAMP架构

LAMP架构的组成:

CentOS8 LAMP的实现以及相关应用

LAMP架构的工作原理:

CentOS8 LAMP的实现以及相关应用

说明:
  • 访问动态资源的时候,apache就是个异构代理服务器,接收并转发用户的请求。通过CGI或者fastcgi接口将请求转发给php解释器。

  • apache请求转发的时候可能会涉及到跨网络转发,跨网络转发使用fastcgi来实现。

异构代理和同构代理的区别:
  • 异构代理:接受请求和转发请求使用的通信协议不同

  • 同构代理:接收请求和转发请求使用的通信协议相同

CGI和fastcgi;

CGI:
  Common Gateway Interface 公共网关接口,apache接收到请求以后,就会生成一个子进程来运行外部的php或者其他程序的运行工具,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户。

特点:
  执行完成后会销毁这个子进程,如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。早期时候使用较多,同时有多少个请求就生成多少个子进程。

例如:范例:httpd 利用CGI运行shell脚本

#apache默认就带cgi的功能 [root@CentOS8 cgi-bin]# httpd -M | grep cgi  proxy_fcgi_module (shared)  proxy_scgi_module (shared)  cgid_module (shared)  #默认需要将脚本文件放到apache的/var/www/cgi-bin/目录下 [root@CentOS8 ~]# cat /etc/httpd/conf/httpd.conf | grep cgi     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" # "/var/www/cgi-bin" should be changed to whatever your ScriptAliased <Directory "/var/www/cgi-bin">     #AddHandler cgi-script .cgi #ErrorDocument 404 "/cgi-bin/missing_handler.pl"  [root@CentOS8 cgi-bin]# pwd /var/www/cgi-bin [root@CentOS8 cgi-bin]# cat test.sh  #!/bin/bash # cat << EOF Content-Type: text/html  <pre> My username is: $(id -un) My id is: $(id -u)  My shell settings are: $(set)  My environment variables are: $(env)  Here is the file in /etc: $(ls -l /etc/redhat-release ) $( cat /etc/redhat-release ) </pre> EOF  [root@CentOS8 cgi-bin]# curl http://10.0.0.14/cgi-bin/test.sh 


  apache2会识别CGI代码的前两行,以确定使用什么解释器进行解释执行,所以前两行的申明很重要。

fastcgi:

  web服务器收到一个请求时,不会重新生成一个子进程(因为这个子进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出

CGI和fastcgi 比较:
  • CGI: 兼职, 一次性的过河拆桥式的服务

  • FASTCGI: 专职,全周期的持续式的服务

PHP

PHP:是一种脚本型的解释型语言

PHP的opcode语言

Opcode是一种PHP脚本编译后的中间语言

php脚本的执行:
  • 1.把php的文本文件转化为opcode语言

  • 2.将opcode解释为计算机可执行的二进制

php程序执行的步骤:

代码文件 ---(Zend引擎)--->opcode码---()--->

PHP的配置
配置文件:
配置文件的来源: [root@CentOS8 ~]# rpm -qf /etc/php.ini php-common-7.2.24-1.module_el8.2.0+313+b04d0a66.x86_64 
配置文件格式:
  • 类似于mysql,注释使用的是(;)进行注释

  • 使用([])分为多个语句块

[foo]:Section Header directive = value 
php.ini配置文档;

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

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

php常见设置:
expose_php = On        #响应报文显示首部字段x-powered-by: PHP/x.y.z,暴露php版本,建议为off  max_execution_time= 30        #最长执行时间30s  memory_limit=128M             #生产不够,可调大  display_errors=off            #调试使用,不要打开,否则可能暴露重要信息  display_startup_errors=off    #建议关闭  post_max_size=8M              #最大上传数据大小,生产可能调大,比下面项大  upload_max_filesize =2M       #最大上传文件,生产可能要调大  max_file_uploads = 20         #同时上传最多文件数  date.timezone =Asia/Shanghai  #指定时区 默认使用的是utc时间  short_open_tag=on             #开启短标签,如: <? phpinfo();?> 
修改配置文件生效的方法:

修改完php配置文件后,需要重启php的相关软件才能生效。

#CentOS 8 上面不是依附于apache的一个模块,而是一个独立的服务 #CentOS 7中,php是作为一个依附于apache的一个模块,不是一个独立的服务 [root@CentOS8 ~]# ps aux | grep php root       60277  0.0  0.9 166852 18020 ?        Ss   19:02   0:00 php-fpm: master process (/etc/php-fpm.conf) apache     60278  0.0  0.5 183184 10172 ?        S    19:02   0:00 php-fpm: pool www apache     60279  0.0  0.5 183184 10172 ?        S    19:02   0:00 php-fpm: pool www apache     60280  0.0  0.5 183184 10172 ?        S    19:02   0:00 php-fpm: pool www apache     60281  0.0  0.5 183184 10176 ?        S    19:02   0:00 php-fpm: pool www apache     60282  0.0  0.5 183184 10176 ?        S    19:02   0:00 php-fpm: pool www root       61303  0.0  0.0  12112  1044 pts/0    S+   19:46   0:00 grep --color=auto php  [root@CentOS8 ~]# systemctl restart php-fpm.service  

LAMP的实现方式:

httpd 接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php
来运行

apache和php结合的方式:
  • 模块文件:将php编译成为httpd的模块libphp5.so,只有prefork 模式才支持(CentOS 7 默认是这个)

  • FastCGI:php和apache是两个单独的服务(CentOS 8 默认使用factcgi模式)

LAMP架构实现:

动态资源的请求方式:

  • Client -- http --> httpd --> libphp5.so () -- mysql --> MySQL server

  • Client -- http --> httpd -->fastcgi-- mysql --> MySQL server

实现LAMP:

前提:
  需要安装MySQL、apache、php这三个软件包

PHP连接MySQL的方式:

1. 使用mysqli扩展连接数据库:
  使用mysqli扩展模块mysqli.so连接数据,此方式只能连接MySQL数据库,不支持其它数据库

<?php $mysqli=new mysqli("mysqlserver", "username", "password"); if(mysqli_connect_errno()){  echo "Failure";  $mysqli=null;  exit; } echo "OK"; $mysqli->close(); ?> 

默认安装php的时候是没有安装连接mysql的工具包的

#CentOS 8 需要安装php-mysqlnd这个软件包才会生成对应的模块 [root@CentOS8 ~]# rpm -ql php-mysqlnd /etc/php.d/20-mysqlnd.ini /etc/php.d/30-mysqli.ini /etc/php.d/30-pdo_mysql.ini /usr/lib/.build-id /usr/lib/.build-id/27 /usr/lib/.build-id/27/050298f7ae4de2117b0325d5e1f354539efa77 /usr/lib/.build-id/43 /usr/lib/.build-id/43/0aa1d5fd22f68c8c868a0ffb6473f529360ca8 /usr/lib/.build-id/c9 /usr/lib/.build-id/c9/713dbdb20adf4b190b48176317b0c06d691f4e /usr/lib64/php/modules/mysqli.so /usr/lib64/php/modules/mysqlnd.so /usr/lib64/php/modules/pdo_mysql.so  #不加斜线认为是软连接,加了斜线认为是文件夹 [root@CentOS8 ~]# find /lib64/ -name mysqli.so /lib64/php/modules/mysqli.so 

2. 使用PDO(PHP Data Object)扩展连接数据库:
  使用PDO扩展模块pdo_mysql.so连接数据库,此方式可以支持连接MySQL,Oracle等多种数据库

范例:php使用pdo扩展连接数据库的测试代码1

 <?php $dsn='mysql:host=mysqlhost;port=3306;dbname=mysql'; $username='root'; $passwd='magedu'; $dbh=new PDO($dsn,$username,$passwd); var_dump($dbh); ?> 

例如:

[root@CentOS8 html]# cat lamp.php  <?php  $servername = "localhost"; $username = "root"; $password = "";  try {     $conn = new PDO("mysql:host=$servername;dbname=mysql", $username, $password);     // 将PDO错误模式设置为异常     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);     echo "连接成功";  } catch(PDOException $e){      echo "连接失败:".$e->getMessage(); } ?> 

常见LAMP应用实现

1. phpmyadmin:实现mysql的web管理

PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库,官网:https://www.phpmyadmin.net/

实现 phpMyadmin应用部署

1.下载软件包
官网:https://www.phpmyadmin.net/

注意:

#不下载这两个对应的包 pma不会给浏览器返回任何信息 [root@CentOS8 html]# yum install php-xml php-json 

2.解压到apache的根目录下

3.测试:

http://10.0.0.14/pma/ 

WordPress:

WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上
架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用,
官网:https://cn.wordpress.org/

部署worlpress:
上传的文件存放位置:/var/www/html/blog/wp-content/ 

Discuz:

Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是覆盖率最大的论坛软件系统之一。2010年8月23日与腾讯达成收购协议,官网:https://www.discuz.net/

部署Discuz
  • 1.去官网下载对应的安装包

  • 2.解压安装包(只需要里面的uploade目录)

  • 3.移动到apache服务的根目录