操作系统:Ubuntu 20.10

1. LAMP环境的搭建

在图形管理化界面中依次打开系统设置、软件和更新。在下载自重选择其他站点,然后在中国的条目下选择mirrors.ustc.edu.cn。

Ubuntu换源可参考https://mirrors.ustc.edu.cn/help/ubuntu.html

更新资源包:sudo apt update

更新软件:sudo apt upgrade

清除不需要的软件:sudo apt autoremove

清除不需要的文件:sudo apt autoclean

1. Apache

接下来就可以进入正式搭建了

su root //方便之后更快的操作,切换root用户

apt install apache2

默认的配置文件:/etc/apache2/sites-enabled/000-default.conf

默认网站根目录:/var/www/html

安装完成之后检查apache是否开启:

service apache2 status // 查看apache是否开启

service apache2 stop // 关闭apache服务

service apache2 start // 打开apache服务

service apache2 restart //重启apache服务

也可以查看80端口是否开启

安装apache遇到的问题

安装过程中发现apache启动不了,使用

systemctl status apache2 查看apache服务的状态

查阅资料和翻译英语得知是80端口被占用所以开启不了apache服务

netstat -ntulp|grep 80 // 查看80端口

这我才发现是因为之前搭建靶场时docker容器占用了80端口,只要把容器停止就好了

2. mysql

apt install mysql-server

mysql的配置文件: /etc/mysql/mysql.conf.d/mysqld.cnf

登录mysql的方法

  1. cat /etc/mysql/debian.cnf查看默认用户的密码

mysql -u debian-sys-maint -p

可以在authentication_string字段中为root添加密码:

update mysql.user set authentication_string='passwd' where user=’root’;

  1. 执行mysql_secure_installation命令

根据提示进行操作即可

3. PHP

apt install php7.4

测试php是否安装成功

安装php组件:

apt install apt install php-curlphp.cgi php-json

php-curl:curl是一个库,能让你通过URL和许多不同种的服务器进行勾搭、搭讪和深入交流,并且还支持许多协议。并且人家还说了curl可以支持https认证、http post、ftp上传、代理、cookies、简单口令认证等等功能啦。

php.cgi: cgi是 (common gateway interface)通用网关接口 .php-cgi是php提供给web serve也就是http前端服务器的cgi协议接口程序,当每次接到http前端服务器的请求都会开启一个php-cgi进程进行处理。

php-json: json 序列化相关操作

安装php扩展:

apt install php-pear libapache2-mod-php php-mysql

php-pear: Pear 是“PHP Extension and Application Repository”的缩写,即PHP扩展和应用仓库。Pear 将PHP程序开发过程中常用的功能编写成类库,涵盖了页面呈现、数据库访问、文件操作、数据结构、缓存操作、网络协议、WebService 等许多方面,用户可以通过下载这些类库并适当的作一些定制以实现自己需要的功能。避免重复发明“车轮”。Pear 的出现大大提高了PHP 程序的开发效率和开发质量。

libapache2-mod-php:我猜测应该是对apache php解析的一个增强

php-mysql: 关于php对数据库操作的函数

2. Lnmp环境的搭建

1. nginx

停止apache服务 service apache2 stop

安装nginx apt install nginx

2. PHP

apt install php7.4-fpm

vim /etc/nginx/sites-available/default

在56行做如下修改

service nginx restart // 重启服务即可

或者还可以这样

然后这样

vim /etc/php/7.4/fpm/pool.d/www.conf

在37行加入下面这句话

service php7.4-fpm restart //重启服务即可

3. 配置PHP环境中出现的一些问题

PHP运行目前为止主要的三种方式:

  1. 以模块加载的方式运行——将PHP集成到Apache服务器,以同一个进程运行。
  2. 以CGI的方式运行——Apache在遇到PHP脚本的时候会将PHP程序提交给CGI应用程序(php-cgi.exe)解释,解释之后的结果返回给Apache,最后再返回给相应的请求用户。
  3. 以FastCGI的方式运行——CGI的加强版本,CGI是单进程,多线程的运行方式,程序执行完成之后就会销毁,所以每次都需要加载配置和环境变量fork-and-execute(创建-执行)。而FastCGI则不同,FastCGI像是一个常驻 (long-live) 型的CGI,只要激活后,在web服务器启动时就开启了一个进程,它可以一直执行着,不会每次都要花费时间去fork一个进程(CGI最为人诟病的fork-and-execute模式)。

1. CGI

CGI(Common Gateway Interface)公共网关接口是HTTP服务器与机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。

工作原理:CGI程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web server,web server再返回给客户端。

简单的说:cgi就是专门用来和web 服务器打交道的。web服务器收到用户请求,就会把请求提交给cgi程序(php的fastcgi),cgi程序根据请求提交的参数作应处理(解析php),然后输出标准的html语句返回给web服服务器,再返回给客户端,这就是普通cgi的工作原理。

2. FastCGI

FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

传统的cgi协议在每次连接请求时,会开启一个进程进行处理,处理完毕会关闭该进程,因此下次连接,又要再次开启一个进程进行处理,因此有多少个连接就有多少个cgi进程,这也就是为什么传统的cgi会显得缓慢的原因,因此过多的进程会消耗资源和内存。而fast-cgi则是一个进程可以处理多个请求(这里的意思不是说一个进程可以同时处理多个请求,二十因为fastcgi是常驻cgi,不需要花费时间去fork进程),和上面的cgi协议完全不一样,cgi是一个进程只能处理一个请求,这样就会导致大量的cgi程序,因此会给服务器带来负担。

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。

工作原理

  1. Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
  2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程(在任务管理器中可见多个php-cgi.exe)并等待来自WebServer的连接,FastCGI使用tcp方式通信。
  3. 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。WebServer将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
  4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回WebServer。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行WebServer中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

3. php-cgi

php-cgi是php提供给web serve也就是http前端服务器的cgi协议接口程序,当每次接到http前端服务器的请求都会开启一个php-cgi进程进行处理,而且开启的php-cgi的过程中会先要重载配置,数据结构以及初始化运行环境,如果更新了php配置,那么就需要重启php-cgi才能生效,这也是php-cgi的不足之处。

这里需要注意的是:php-cgi不是php脚本的解析器,它是cgi协议的解析器,然后通过调用php的php_execute_script函数来解析和运行php脚本。

3. php-fpm

php-fpm是php提供给web serve也就是http前端服务器的fastcgi协议接口程序,它不会像php-cgi一样每次连接都会重新开启一个进程,处理完请求又关闭这个进程,而是允许一个进程对多个连接进行处理,而不会立即关闭这个进程,而是会接着处理下一个连接。它可以说是php-cgi的一个管理程序,是对php-cgi的改进。

换句话说:php-fpm其实是升级版的php-cgi,但是最后处理的单元仍然是一个php-cgi程序,php-fpm可以更好的去调度资源来实现fastcgi协议。

重点PS:在刚才配置lnmp过程中,我们安装了php-fpm包,在配置lamp过程中并没有安装,这是为什么呢?

答:apache使用的是一种名为mod_php模式去解析php的,即mod_php 模式是将php模块安装到apache中,apache每接收一个请求,都会产生一个进程来连接php-cgi来完成请求,可想而知,如果一旦用户过多,并发数过多,服务器就会承受不住了。

而Nginx只负责反向代理/请求转发,不负责管理php-cgi进程,所以Nginx一般配合能够自行管理工作进程(子进程)的php-fpm使用。Nginx不能像Apache那样直接执行外部可执行程序,但Nginx可以作为代理服务器,将请求转发给后端服务器,这也是Nginx的主要作用之一。

4. Spawn-FCGI

Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。

总结

  1. CGI和FastCGI严格意义上来说是协议,CGI进程和FastCGI进程就是具有该协议特性的进程。
  2. php-cgi和php-fpm都是协议接口程序,用来管理采用不同协议的php-cgi程序,前者管理cgi进程,后者管理fastcgi进程。
  3. spawn-fcgi和php-fpm作用相同,都是fastcgi进程管理器。

LAMP和LNMP环境搭建的艰辛历程的更多相关文章

  1. Lamp和Lnmp环境搭建

    一.安装Lamp wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar. ...

  2. LNMP环境搭建

    LNMP环境搭建 Linux + Nginx + MySQL + PHP PHP是一种脚本语言,当前中国乃至世界上使用PHP语言开发的网站非常普遍 Nginx是一个web服务软件,和apache是一类 ...

  3. LNMP环境搭建--Centos7

    LNMP环境搭建--Centos7 | 刘鹏--博客 盒子 盒子 博客 分类 搜索 文章目录 在Centos7环境安装LAMP环境,备忘哈哈. 准备 首先去官网下载php,nginx 编译安装php ...

  4. 阿里云(ECS)Centos服务器LNMP环境搭建

    阿里云( ECS ) Centos7 服务器 LNMP 环境搭建 前言 第一次接触阿里云是大四的时候,当时在校外公司做兼职,关于智能家居项目的,话说当时俺就只有一个月左右的 php 后台开发经验(还是 ...

  5. LNMP环境搭建:Nginx安装、测试与域名配置

    Nginx作为一款优秀的Web Server软件同时也是一款优秀的负载均衡或前端反向代理.缓存服务软件 2.编译安装Nginx (1)安装Nginx依赖函数库pcre pcre为“perl兼容正则表达 ...

  6. centos LAMP第一部分-环境搭建 Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课

    centos LAMP第一部分-环境搭建  Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课 打命令之后可以输入: e ...

  7. LNMP环境搭建——MySQL篇

    The world's most popular open source database 1.Install MySQL root@kallen:~# apt-get install mysql-s ...

  8. LNMP环境搭建之php安装,wordpress博客搭建

    LNMP环境搭建之php安装,wordpress博客搭建 一.介绍: 1.什么是CGI CGI全称是"通用网关接口"(Common Gateway Interface),HTTP服 ...

  9. Ubuntu16.04 lnmp 环境搭建

    Ubuntu16.04 lnmp 环境搭建 nginx 安装 sudo apt-add-repository ppa:nginx/stablesudo apt-add-repository ppa:o ...

随机推荐

  1. 裸辞闭关2个月,成功进大厂!吃透这份562页《算法知识手册》,化身offer收割机!

    前言 记得我上本科的时候,我们老师一直跟我们强调:"算法才是编程的灵魂,一定要把算法学好."因为不管你是Java编程爱好者.还是python的忠实粉丝,亦或觉得PHP才是这个世界最 ...

  2. xshell远程连接另一台电脑的数据库,启动图形失败

    1.用xshell远程连接数据库10.62.207.152,且用oracle用户直接登陆 2.执行:netca 报错: Oracle Null Service Configuration: Error ...

  3. Vue(1)Vue安装与使用

    前言 Vue(读音/vjuː/,类似于view) 是一套用于构建前后端分离的框架.刚开始是由国内优秀选手尤雨溪开发出来的,目前是全球"最"流行的前端框架.使用vue开发网页很简单, ...

  4. 基于GIS的国土空间规划平台建设

    ​ 本期介绍基于地理信息平台的国土空间规划平台的规划辅助编制应用.在梳理国土空间规划科学流程的基础上,将规划编制各关键环节信息化.工具化.智能化:充分发挥清华同衡大数据与智能模型相结合的定量评估.精准 ...

  5. docker2-镜像原理及创建新的镜像

    1,镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 在docker中所有应用 ...

  6. javascript的getTime函数

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  7. excel VBA构造正则函数(双参数)

    Function zhengze(ze As String, Rng As Range)    Set regx = CreateObject("vbscript.regexp") ...

  8. QPainter::begin: Paint device returned engine == 0, type: 1

    开始 使用QPainter画图,需要继承QWidget,重写paintEvent()虚函数,在里面进行绘图. 或者可以考虑绘制到QImage或者QPixmap上面,然后在paintEvent()里面调 ...

  9. 第6章:深入理解Pod对象

    Pod是最小的部署单元,也是后面经常配置的地方,本章节带你熟悉Pod中常见资源配置及参数. 也就是YAML这部分: ... template: metadata: labels: app: web s ...

  10. PHP设计模式之策略模式(转)

      介绍 策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中单独取出来,用接 ...