操作系统:Ubuntu 20.10
在图形管理化界面中依次打开系统设置、软件和更新。在下载自重选择其他站点,然后在中国的条目下选择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
接下来就可以进入正式搭建了
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启动不了,使用
systemctl status apache2 查看apache服务的状态
查阅资料和翻译英语得知是80端口被占用所以开启不了apache服务
netstat -ntulp|grep 80 // 查看80端口
这我才发现是因为之前搭建靶场时docker容器占用了80端口,只要把容器停止就好了
apt install mysql-server
mysql的配置文件: /etc/mysql/mysql.conf.d/mysqld.cnf
mysql -u debian-sys-maint -p
可以在authentication_string字段中为root添加密码:
update mysql.user set authentication_string=‘passwd‘ where user=’root’;
根据提示进行操作即可
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对数据库操作的函数
停止apache服务 service apache2 stop
安装nginx apt install nginx
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 //重启服务即可
CGI(Common Gateway Interface)公共网关接口是HTTP服务器与机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。
工作原理:CGI程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web server,web server再返回给客户端。
简单的说:cgi就是专门用来和web 服务器打交道的。web服务器收到用户请求,就会把请求提交给cgi程序(php的fastcgi),cgi程序根据请求提交的参数作应处理(解析php),然后输出标准的html语句返回给web服服务器,再返回给客户端,这就是普通cgi的工作原理。
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特性等等。
工作原理
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脚本。
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的主要作用之一。
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。
原文:https://www.cnblogs.com/seizer/p/15086564.html