LAMP配置与应用

1.1 动态资源和语言

WEB 资源类型:

  • 静态资源:原始形式与响应内容一致,在客户端浏览器执行

  • 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端

注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致

范例:静态资源

 vim   test.html
 #客户端主机现在的时间:
 <script type="text/javascript">
 document.write(new Date());
 </script>

1.2 LAMP架构的组成

L:linux

A:apache(httpd)

M:mysql、mariadb

P:php、perl、python

LAMP 环境指的是在 Linux 操作系统中分别安装 Apache 网页服务器、MySQL 数据库服务器和 PHP 开发服务器,以及一些对应的扩展软件。AMP也支持win操作系统 (sccm 域升级版)

LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态web站点服务及其应用开发环境。

(前台)Apache:作为LAMP架构的前端,是一款功能强大,稳定性好的web服务器程序,该服务器直接面向用户提供网站访问,发送网页,图片等内容。

(后台)Mysql:作为LAMP架构的后端,是一款流行的开源关系型数据库。在企业网站、业务系统应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到mysql数据库,其他程序可以通过sql语句来查询,更改这些信息。

(中间连接)PHP/Perl/Python:作为三种开发动态的网页编程语言,负责解释动态网页文件,负责沟通web服务器和数据库系统已协同工作,并提供web应用程序的开发运行环境。其中PHP是一种广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于web应用开发。

在搭建LAMP时安装顺序一般是linux—Apache—mysql—php 。一般PHP放在最后,负责沟通web服务器和数据库系统以协同工作。

工作过程:

1、当客户端请求的是静态资源时,web服务器直接返回资源

2、当客户端请求的是动态资源时,httpd的php模块会进行相应的动态资源运算,如果次过程需要数据库的数据作为运算参数时,php会连接mysql取得数据然后进行运算,运算的结果转为静态资源由web服务器返回到客户端

apache主要实现如下功能:

  1. 第一:处理http的请求、构建响应报文等自身服务;

  2. 第二:配置让Apache支持PHP程序的响应(通过PHP模块或FPM);

  3. 第三:配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fcgi处理。

mysql 主要实现如下功能:

  1. 第一:提供PHP程序对数据的存储;

  2. 第二:提供PHP程序对数据的读取(通常情况下从性能的角度考虑,尽量实现数据库的读写分离)。

php主要实现如下功能:

  1. 第一:提供apache的访问接口,即CGI或Fast CGI(FPM);

  2. 第二:提供PHP程序的解释器;

  3. 第三:提供mysql数据库的连接函数的基本环境。

1.3 CGI和fastcgi

1.3.1 CGI

CGI:Common Gateway Interface 公共网关接口

CGI 在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会 fork 一个新进程来运行外部的 C 程序或者bash,perl脚本等,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。

CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准

请求流程:

Client -- (http协议) --> httpd -- (cgi协议) --> application server (program file) -- (mysql协议) --> mysql

1.3.2 fastcgi

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

请求流程:

Client -- (http协议) --> httpd -- (fastcgi协议) --> fastcgi服务器 -- (mysql协议) --> mysql

1.3.3 CGI和fastcgi的比较

CGI: 兼职, 一次性的过河拆桥式的服务

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

1.4 PHP

1.4.1 PHP简介

PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 PHP同时支持面向对象和面向过程的开发,使用上非常灵活。

1.4.2 PHP的opcode语言

Opcode是一种PHP脚本编译后的中间语言,类似于Java的ByteCode,或者.NET的MSL

PHP的语言引擎Zend执行PHP脚本代码一般会经过如下4个步骤

1、Scanning,词法分析,将PHP代码转换为语言片段(Tokens) 2、Parsing,语义分析,将Tokens转换成简单而有意义的表达式 3、Compilation,将表达式编译成Opcode 4、Execution,顺次执行Opcode,每次一条,从而实现PHP脚本的功能

即:扫描-->分析-->编译-->执行

1.4.3 PHP配置

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

配置文件在php解释器启动时被读取

对配置文件的修改生效方法

  • Modules:重启httpd服务

  • FastCGI:重启php-fpm服务

/etc/php.ini配置文件格式:

 [foo]:Section Header
 directive = value

注释符:

  • 以#开头,纯粹的注释信息

  • 以 ; 开头,用于注释可启用的directive

提示:较新的版本中,已经完全使用 “ ; ” 进行注释

php.ini 配置参考文档:

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

php.ini配置选项列表:https://www.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  #指定时区
 short_open_tag=on #开启短标签,如: <? phpinfo();?>

例子:

 [root@centos7 ~]#yum -y install httpd php
 [root@centos7 ~]#systemctl start httpd
 [root@centos7 ~]#cat /var/www/html/test.php
 <?php
 phpinfo();
 ?>
 [root@centos7 ~]#cat /var/www/html/session.php
 <?php
 session_start();
 echo session_id();
 ?>
 ​
 [root@centos7 ~]#curl -I 10.0.0.7/test.php
 HTTP/1.1 200 OK
 date: Thu, 02 Apr 2020 04:02:57 GMT
 server: Apache/2.4.6 (CentOS) PHP/5.4.16
 x-powered-by: PHP/5.4.16   # 暴露PHP版本信息
 content-type: text/html; charset=UTF-8
 cache-control: private
 [root@centos7 ~]#vim /etc/php.ini
 expose_php = Off
 [root@centos7 ~]#systemctl restart httpd
 [root@centos6 ~]#curl -I 10.0.0.7/test.php
 HTTP/1.1 200 OK
 date: Thu, 02 Apr 2020 04:03:59 GMT
 server: Apache/2.4.6 (CentOS)
 content-type: text/html; charset=UTF-8
 cache-control: private

LAMP配置与应用的更多相关文章

  1. CentOS 7系统LAMP配置PHP-FPM的示例

    CentOS 7 系统出来有一段时间了,今天我们来看在vps中的 CentOS 7 中给lamp环境配置php-fpm的过程,希望文章可以帮助到各位. CentOS 7 已经发布,并且采用 Apach ...

  2. 关于LAMP配置Let’s Encrypt SSL证书

    昨天建站,买VPS,先装了LAMP,部署wordpress,测试OK了,然后才买的域名,申请SSL证书. 结果Let’s Encrypt cerbot申请证书遇到了麻烦,--apache参数怎么也识别 ...

  3. aliyun服务器lamp配置

    1.安装Apache:yum install httpd 2.安装php: yum install php 3.安装mysql客户端:yum install mysql 4.安装mysql服务端:yu ...

  4. LAMP配置

    参考资料: 1. http://www.cnblogs.com/zhuyp1015/p/3561470.html ↂ Apache服务器: 安装Apache: sudo apt-get install ...

  5. phpMyAdmin安装与配置(涉及LAMP配置)

    作者:zccst 安装一个phpMyAdmin还真麻烦,遇到很多问题.不过在解决过程中发现,PHP的水还真深,不是短时间可以看透的. 1,下载 建议去百度软件中心下载 2,使用 (1)解压后,复制配置 ...

  6. lamp配置多个虚拟站点

    在同一ip下添加多个域名站点! 1.查看ip 命令:ifconfig 2.添加域名 命令:vi /etc/hosts 输入域名:如 192.168.160.127   www.test.com 192 ...

  7. 阿里云centos7.2 lamp配置

    安装apache 1.安装yum -y install httpd 2.设置apache服务开机启动systemctl enable httpd.service 3.开启apache服务systemc ...

  8. LAMP配置NFS页面共享,autofs实现挂载,DNS实现名称解析,纯手动操作

    0.实验架构: 共6台服务器 分工如下: 服务器 职责 IP地址 Centos版本 描述 A DNS 172.18.7.70 7 B Apache 172.18.7.71 7 httpd+php-fp ...

  9. ubuntu 14.04 lts LAMP配置

    一.目标 创建服务器环境,主要包括:Apache2.4.7 serverPHP 5.5.9Mysql 5.5.49扩展:MemcacheMcrypt 二.准备工作 1.服务器系统版本 Ubuntu s ...

  10. LAMP配置虚拟目录

    1.  httpd.conf中添加 Listen 81 2. 1 <VirtualHost 127.0.0.2:81> 2 DocumentRoot E:\ws\2011\DiscuzSp ...

随机推荐

  1. Appium新版本引发的一个问题

    Appium新版本引发的一个问题 准备工作 测试代码 from appium import webdriver des_cap = {'platformName': 'android'} driver ...

  2. Linux 软件包:kernel*

    运行命令: # rpm -qa | grep $(uname -r) | while read pkgname ; do echo "### $pkgname ###" ; rpm ...

  3. 2022-02-08 IValueConverter和StringFormat

    主页 后台 stringFormat

  4. Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能.但是通过对 Cilium 不同模式的切换/功能的启用,可以 ...

  5. (转)[Android测试] Android Studio+Appium+Java+Windows 自动化测试之二:Appium环境安装搭建

    一.需要下载安装的东西 1. 文件下载 网上也有挺多安装教程的,这里我提供我的安装方法.Win10 64位.一些文件我在后面打包. 2016.9.12号本人安装记录. SDK: 由于我是搞Androi ...

  6. 【技术积累】Linux中的命令行【理论篇】【八】

    basename命令 命令介绍 在Linux中,basename命令用于从给定的路径中提取文件名或目录名.它的语法如下: basename [选项] [路径] 命令介绍 选项:-s, --suffix ...

  7. 03.前后端分离中台框架 zhontai 项目代码生成器的使用

    zhontai 项目 基于 .Net7.x + Vue 等技术的前后端分离后台权限管理系统,想你所想的开发理念,希望减少工作量,帮助大家实现快速开发 后端地址:https://github.com/z ...

  8. Flutter系列文章-Flutter在实际业务中的应用

    不同场景下的解决方案 1. 跨平台开发: 在移动应用开发中,面对不同的平台(iOS和Android),我们通常需要编写两套不同的代码.而Flutter通过一套代码可以构建适用于多个平台的应用,大大提高 ...

  9. Python字符串操作函数split()和join()

    字符串拆分 在python中有切片(Slice)操作符,可以对字符串进行截取,还提供了split()函数可以将一个 字符串分裂成多个字符串组成的列表.在使用split()函数来拆分字符串之前,我们先来 ...

  10. LeetCode952三部曲之三:再次优化(122ms -> 96ms,超51% -> 超91%)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<LeetCode952三部曲之 ...