参考 https://www.ms08067.com/
1、分别安装Apache,Nginx,Mysql,PHP。
2、一键安装LANMP,实现了多个安装包版本打平。
Centos兼容比较好,一般用于做服务器,如果是Kali和Ubuntu等系统安装失败可以尝试切换shell为bash。
什么是bash ?
Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。
GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。
Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。
如果执行失败可以切换成bash再试试。
WAMP是windows中的Apache、Mysql和PHP环境,比如WampServer。
问题一:缺失MSVCR110.dll,去https://www.zhaodll.com/dll/ 下载,分别移动到C:\Windows\System32和C:\Windows\SysWOW64目录下。
问题二:Apache启动失败,先卸载Apache,重新安装Apache服务并启动。
Apache作为PHP的Server,也可以利用Nginx作为Server。
PHP的allow_url_include开关(禁止引用URL文件,预设关闭。主要涉及文件包含漏洞)和allow_url_fopen开关(允许打开URL文件,预设启用):
禁止allow_url_include解决了远端引用(Include)的问题, 同时又让我们还可以在一般的情形下使用fopen去打开远端的档案, 而不必再牵连上打开include函数所带来的风险。
allow_url_include
只影响include()
和require()。
php是apache的一个外挂程序,必须依靠web服务器才可以运行。当客户端浏览器触发事件--->php程序提交到apache服务器---->apache服务器根据php程序的特点判断是php程序,并从内存或者硬盘中提取访问所需要的应用程序,将其提交给php引擎程序--->php引擎程序解析并读取数据库生成相应的页面--->php引擎将html页面返回给web服务器,web服务器再将页面返回给客户端。
cgi和fastcgi两个协议。CGI:common gateway interface,是web server与后台编程语言交互的一种协议。有了这个协议,开发者可以使用任何语言处理 Web Server 发来的请求,动态的生成内容。但 CGI 有一个致命的缺点,那就是每处理一个请求都需要 fork 一个全新的进程,随着 Web 的兴起,高并发越来越成为常态,这样低效的方式明显不能满足需求。就这样,FastCGI 诞生了,CGI 很快就退出了历史的舞台。FastCGI,顾名思义为更快的 CGI,它允许在一个进程内处理多个请求,而不是一个请求处理完毕就直接结束进程,性能上有了很大的提高。
PHP-CGI是PHP自带的FASTCGI管理器,但有很多的缺点。FPM同样也是fastcgi的实现,相比php-cgi有很多的优点。到了PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,只需要在./configure时,加上--enable-fpm。
FPM 是一个 PHP 进程管理器,包含 master 进程和 worker 进程两种进程:master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个 (具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。
从 FPM 接收到请求,到处理完毕,其具体的流程如下:
- FPM 的 master 进程接收到请求;
- master 进程根据配置指派特定的 worker 进程进行请求处理,如果没有可用进程,返回错误,这也是我们配合 Nginx 遇到502 Bad Gateway错误比较多的原因;
- worker 进程处理请求,如果超时,返回504错误 网关超时(Gateway timeout);
- 请求处理结束,返回结果。
Nginx 不仅仅是一个Web 服务器,也是一个功能强大的Proxy 服务器,除了进行http 请求的代理,也可以进行许多其他协议请求的代理,包括本文与fpm 相关的fastcgi 协议。为了能使Nginx 理解fastcgi 协议,Nginx 提供了fastcgi 模块来将http 请求映射为对应的 fastcgi 请求。
Nginx 的fastcgi 模块提供了fastcgi_param 指令来主要处理这些映射关系,除此之外,非常重要的就是 fastcgi_pass 指令了,这个指令用于指定 fpm 进程监听的地址,Nginx 会把所有的 php 请求翻译成 fastcgi 请求之后再发送到这个地址。
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
在这个配置文件中,/tmp/www.sock 是php-fpm监听的socket文件,nginx通过location将所有的php文件,即http请求都交给fpm处理,实现了nginx和php的协同工作。
换言之,nginx就是作了fastcgi的一个代理,用fastcgi的方式结合使用了php。所以,需要开启php-fpm服务。
当然Nginx作为一个代理,挂在Apache前面也是可以的。
Nginx + PHP 第一种是利用CGI让NGINX和PHP进行通信
Nginx + Apache(https://httpd.apache.org/) + PHP 第二种是静态资源是NGINX,动态资源让APACHE里的MOD_PHP模块来实现PHP。
二种都是NGINX在前端80端口,作为一个反向代理服务器。当然第二种情况下可以不挂Nginx。
如果单台服务器的话,NGINX+APACHE+PHP 纯粹多此一举,多了一次请求转发,效率肯定低,而且现在FPM已经足够稳定,完全没必要。
只有多台服务器集群的话,apache+nginx反代才有意义。NGINX+APACHE+PHP 这种架构存在的原因除了apache出现比较早外,还因为当时FPM不如module模式稳定(所以现在基本淘汰apache的架构了)。
Nginx在前面实现动静分离,静态内容由Nginx负责,动态请求则交给后面的 PHP应用服务器Apache(libphp5.so)处理。
Nginx+PHP-FPM相对Nginx+Apache(libphp5.so)来说,PHP-FPM更灵活,在php-fpm.conf里可以配置监听不同端口的多个pool,每个pool又可以自由配置PHP-FPM worker进程数pm.max_children,一个pool里的worker进程繁忙不会影响到另一个pool。在Nginx里可以配置应用的不同部分使用不同的pool,而且一台服务器上可以运行多个版本的PHP-FPM,借助Nginx的upstream功能,PHP-FPM非常容易横向扩展。
新浪微博和百度贴吧都在使用Nginx+PHP-FPM的架构(百度内部老服务大多也是这种架构,新的都不用PHP,哈哈),PHP-FPM已经足够稳定。
Apache Tomcat则是Apache基金会下的另外一个项目,与Apache HTTP Server/Nginx(只能生成静态资源)相比,Tomcat能够动态的生成资源并返回到客户端。
Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。
如果想要使用Java程序来动态生成资源内容,使用这一类HTTP服务器很难做到。Java Servlet技术以及衍生的Java Server Pages技术可以让Java程序也具有处理HTTP请求并且返回内容(由程序动态控制)的能力,Tomcat正是支持运行Servlet/JSP应用程序的容器(Container)。
严格的来说,Apache/Nginx 应该叫做「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。
一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。
而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。
Apache是通过扩展模块PHPcgiperl实现PHP的解析。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。
Nginx与Apache比较
1) nginx相对于apache的优点
轻量级,同样起web 服务,比apache占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
提供负载均衡
社区活跃,各种高性能模块出品迅速
2) apache 相对于nginx 的优点
apache的 rewrite 比nginx 的强大;
支持动态页面;
支持的模块多,基本涵盖所有应用;
性能稳定,而nginx相对bug较多。
3)两者优缺点比较
Nginx 配置简洁, Apache 复杂;
Nginx 静态处理性能比 Apache 高 3倍以上;
Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;
Apache 的组件比 Nginx 多;
apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程;
nginx处理静态文件好,耗费内存少;
动态请求由apache去做,nginx只适合静态和反向;
Nginx适合做前端服务器,负载性能很好;
Nginx本身就是一个反向代理服务器 ,且支持负载均衡
靶场。sqli-labs。
xsser.me 网站。