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主要实现如下功能:
-
第一:处理http的请求、构建响应报文等自身服务;
-
第二:配置让Apache支持PHP程序的响应(通过PHP模块或FPM);
-
第三:配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fcgi处理。
mysql 主要实现如下功能:
-
第一:提供PHP程序对数据的存储;
-
第二:提供PHP程序对数据的读取(通常情况下从性能的角度考虑,尽量实现数据库的读写分离)。
php主要实现如下功能:
-
第一:提供apache的访问接口,即CGI或Fast CGI(FPM);
-
第二:提供PHP程序的解释器;
-
第三:提供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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了