作者:Y-ANG 来源: http://blog.csdn.net/qq_33951180/article/details/70239745 我们先了解一下这个项目最终能达到的一个目标,然后以这个来进
Ps:2019-1-18修改 我其实对这篇文章能有两万+的阅读量感觉很惊讶,占了我博客访问人数的很大一部分,我猜测可能确实是传统的Python web开发的学习方式都是从框架开始,而框架封装过度,让人难以理解背后的原理,最后只是简单的学习API和框架,同时学习Python的人中很大一部分其实是非计算机专业的同学,基础薄弱,想学习底层原理也不知道从何入手。 原先博文优点和缺点都很明显,缺点在于我只是简单罗列了资源,很多东西其实没有表达清楚,因为最初的目的,并不是教学,而是自己回顾和总结,优点可能在于他是比较系统化的展示出了web开发的演变过程,这其实有助于建立知识之间的联系和对web开发整体的理解。 后来我就考虑能否把文章的内容更加深入一些,用一套代码就能展现出这整个过程演变,而不是碎片化的资源罗列,把真正做成一个教学贴。但是因为拖延症一直没有完成,现在基本完成,我希望它会是一个好的学习指南,也希望读者能从学习这些代码的过程中,理解web开发的本质。
Nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。
每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。
我们一般通过 SSH 进行授权访问,通过 git:// 进行无授权访问,但是还有一种协议可以同时实现以上两种方式的访问。 设置 Smart HTTP 一般只需要在服务器上启用一个 Git 自带的名为 git-http-backend的 CGI 脚本。 该 CGI 脚本将会读取由 git fetch 或 git push 命令向 HTTP URL 发送的请求路径和头部信息,来判断该客户端是否支持 HTTP 通信(不低于 1.6.6 版本的客户端支持此特性)。 如果 CGI 发现该客户端支持智能(Smart)模式,它将会以智能模式与它进行通信,否则它将会回落到哑(Dumb)模式下(因此它可以对某些老的客户端实现向下兼容)。
众所周知IIS的性能令人诟病,早期VFP开发WEB也没更好的方案,采用了CGI的方式运行于IIS内,好处是每次WEB调用,VFP程序运行后就结束,不存在内存泄漏,变量冲突等,也不会引起宿主IIS崩溃,但坏处就是频繁的启动进程,性能不理想。但FastCGI程序不同,执行完请求后,不会立即结束,而是留在内存等待下一次请求,减少了大量进程初始化的过程,性能就大大提高,缺点就是VFP开发人员要注意,大量的全局变量,不规范的变量使用等,会“污染”下一次请求。
在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM、FastCGI和CGI 这几个概念。如果对它们一知半解,很难搭建出高性能的服务器;
讲Fastcgi之前需要先讲CGI,CGI是为了保证web server传递过来的数据是标准格式的,它是一个协议。每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。
多半是disable_functions惹的祸。查看phpinfo发现确实设置了disable_functions:
CGI全称是“公共网关接口”(Common Gateway Interface),http服务器与你的或其他机器上的程序进行“交谈”的一种工具,CGI程序须运行在网络服务器上。
欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/
PHP 项目使用 Nginx 时,一般通过 php-fpm Nginx+PHP-FPM 形式访问交互,本文将详细解读 Nginx 配置文件、PHP-FPM、PHP-CGI 和 fastCGI 的概念。
删除无用文件 操作目的 删除默认安装时的无用文件 检查方法 检查Apache目录下是否存在无用文件 加固方法 删除默认安装的HTML文件# cd /usr/local/apache2/htdocs/,
– step1:client发起http请求 – step2:dns服务器解析域名得到主机ip – step3:默认端口为80,通过ip+port建立tcp/ip链接 – step4:建立连接的tcp/ip三次握手,建立成功发送数据包 – step5:nginx匹配请求
前台(前端)后台(后端),在英语中即:Front-End,Back-End。广义上的前端包括客户端(PC、Android、IOS等),现在有个说法叫:大前端。后台即通常意义上的Server。没错,就是在互联网诞生之初即存在的C/S架构。服务的提供方称为Server,一般是一个偏中心化的服务集群。客户端Client为用户接入服务的控制重点。C/S架构有明显的主次之分,这与后来产生各类种子(BT、电驴)下载技术的P2P对等网络相对应。在P2P网络中不区分C或S,每个节点既是C也是S,这便是对等(Peer)网络。
之前分享的文章:常见的嵌入式web服务器有哪些?中分享了几种可以在嵌入式中使用的web服务器。
PHP在业界被调侃,是世界上最好的语言,PHP确实是Web开发里的利器,具体点说,就是一个用C语言实现包含大量组件模块的软件框架。是一个强大的UI框架。
为了减少频繁创建和销毁进程的开销,apache在启动之初,就预先fork一些子进程,然后等待请求进来。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。FastCGI致力于减少网页服务器与CGI程序之间交互的开销,从而使[服务器可以同时处理更多的网页请求。
一、PHP开发部分 1.合并两个数组有几种方式,试比较它们的异同 答:1、array_merge() 2、’+’ 3、array_merge_recursive array_merge 简单的合并数组 array_merge_recursive 合并两个数组,如果数组中有完全一样的数据,将它们递归合并 array_combine 和 ‘+’ :合并两个数组,前者的值作为新数组的键 2.请写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制、八进制、十进制、十六进制数字) 答:其实主要还是is_int和 floor 这个方法
正式说CGI之前,先来了解一下Web Server传递数据的另外一种方法:PHP Module加载方式。相信都会想起Apache吧,初学php时,在windows上安装完php和Apache之后,为了让Apache能够解析php代码,我们会在Apache的配置文件(httpd.conf)中添加如下配置:
本来想简单地写一写,结果发现越写越长,折腾了将近一个月,整出这篇 10000 多字的超长笔记。。。
SAPI是Server Application Programming Interface(服务器应用编程接口)的缩写。PHP通过SAPI提供了一组接口,供应用和PHP内核之间进行数据交互。
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
身为一名使用 PHP 语言开发后端服务的程序猿,我们每天都和 PHP 以及 Web 服务器产生无数次的亲密接触。得益于它们,我们才能够如此快速的构建出令人陶醉的 Web 产品。
Nginx 与 php-fpm 的结合 在 Linux 上,nginx 与 php-fpm 的通信有 tcp socket 和 unix socket 两种方式。 tcp socket 的优点是可以跨服务器,当 nginx 和 php-fpm 不在同一台机器上时,只能使用这种方式。 Unix socket 又叫 IPC (inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信,这种方式需要在 nginx 配置文件中填写 php-fpm 的 socket 文件位置。
后面就先按照这个图所展示出来的内容对Nginx的架构进行一次梳理,文中所涉及到的内容,主要都是针对Linux系统的。
了解关于cgi、fastCGI、php-cgi、php-fpm的概念更能加深理解。 下面是我查阅大量资料后整理的关系图供大家参考,也欢迎留言一起讨论
int socket(int domain, int type, int protocol) // 创建套接字描述符,成功返回非负数描述符,失败为-1 int connect(int clientfd, const struct sockaddr *addr, socklen_t addrlen) // 连接服务器,成功为 0,失败为 -1 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) // 连接客户端,成功为 0,失败为 -1 int listen(int sockfd, int backlog) // 等待客户端连接。此函数将主动套接字转化为监听套接字,成功为 0,失败为 -1 int accept(int listenfd, struct sockaddr *addr, socklen_t addrlen) // 等待来自客户端的连接,成功返回非负数连接描述符,失败为-1 int getaddrinfo(const char* host, const char* service, const struct addrinfo* hints, struct addrinfo** result) // 用于主机名,主机地址,服务名,端口号的字符串表示转换成 addrinfo // addrinfo 是一个列表,客户端调用 getaddrinfo 后需要遍历 result 这个列表,直到某个元素可以执行 socket 和 connect 成功 // host 可以是域名也可以是 ip 地址 // service 可以是服务名(http)或端口号 // hints 用于设置一些参数以便对返回的 result 列表做更好的控制 int getnameinfo(const struct sockaddr *sa, socklen_t salen, char* host, size_t hostlen, char *service, size_t servlen, int flags) // 用于 sockaddr 转换成 主机名,主机地址,服务名,端口号的字符串表示 // 简化版(非 Linux 内核内置) int open_clientfd(char *hostname, char *port) // 客户端连接服务器 int open_listenfd(char* port) // 服务器监听端口
把 php 当做 apache 的一个模块,实际上 php 就相当于 apache 中的一个 dll 或一个 so 文件,phpstudy 的非 nts 模式就是默认以 module 方式连接的:
GCI:CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。
在学习Python web开发时候,可能会遇到诸如uwsgi,wsgi等名词,下面通过梳理总结探究它们之间的关系。
nginx和fastcgi的通信方式有两种,一种是TCP的方式,一种是unix socke方式。两种方式各有优缺点,这里先给出两种的配置方法,然后再对性能、安全性等做出总结。
我一向以为,curl只是一个编程用的函数库。 最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法。 ===================================
参考和学习了以下文章: 1. mod_php和mod_fastcgi和php-fpm的介绍,对比,和性能数据 2. 实战Nginx_取代
上一篇我们已经基于我们的开发板搭好了一个基于boa的web服务器:实用 | 10分钟教你搭建一个嵌入式web服务器。这一篇接着分享如何使用网页来点灯。
Common Gateway Interface,HTTP 服务器与你的或其它机器上的程序进行“交谈”的一种协议,其程序须运行在网络服务器上。
PHP-FPM 是 PHP FastCGI Process Manager 的缩写,是 FastCGI 进程管理器。
虽然在Linux里传播的病毒不多,但也是存在一些。我从一些 安全网站搜集了一些资料。 1、病毒名称: Linux.Slapper.Worm 类别: 蠕虫 病毒资料: 感染系统:Linux 不受影响系统: Windows 3.x, Windows 95。 Windows 98, Windows NT, Windows 2000。 Windows XP, Windows Me, Macintosh 病毒传播: port:80, 443。 2002 感染目标:各版本号Linux系统上的Apache Web server 技术特征: 该蠕虫会试图不断连接80port。并向 server发送无效的“GET”请求,以识别Apache系统。一旦发现Apache系统,它会连接443port。并向远程系统上的监听SSL服务发送恶意代码。 此蠕虫利用了Linux Shell代码仅能在英特尔系统上执行的漏洞。
gi的通信依靠stdout与浏览器通信。 所以简单地在py-cgi-index.py里面写: #!/usr/bin/env python print 'hello world' 这样写是不对的。 cgi接口规定,cgi脚本输出的开头应该是http header。 而hello world这种字符无法被识别为任何有效的http header, 所以如果访问http://localhost/python-cgi,会返回500错误。 解决办法有两个: 1、写上http header。 header与body之间必须有一个空行,以识别前面的是header,后面的是body。 代码改成: #!/usr/bin/env python print 'Content-Type: text/html\n\nhello world' 2、空白http header。 不写http header的情况下,apache会自动补上header。 代码改成: #!/usr/bin/env python
1.php-fpm.conf:是PHP-FPM特有的配置文件,是PHP-FPM进程管理器的配置文件
CGI 是Web 服务器运行时外部程序的规范, 按CGI 编写的程序可以扩展服务器功能。
当咱们部署完一个应用程序,浏览网页时具体的过程是怎样的呢?首先咱们得有一个 Web 服务器来处理 HTTP 协议的内容,Web 服务器得到客户端的请求,交给应用程序,应用程序处理完,返回给 Web 服务器,这时 Web 服务器再返回给客户端。Web 服务器与应用程序之间显然要进行交互,这时就出现了不少 Web 服务器与应用程序之间交互的规范,最先出现的是 CGI,后来又出现了改进 CGI 性能的FasgCGI,Java 专用的 Servlet 规范,Python 专用的 WSGI 规范等等。有了统一标准,程序的可移植性就大大提升了。
CGI 即 Common Gateway Interface,译作“通用网关接口”。初次听闻,略感疑惑,实则每个字眼都值得玩味。
个人仓库:https://github.com/dopamine-joker/Mythhpd
第一步Boa程序的移植1、下载Boa源码 下载地址:http://www.boa.org/网络
SAPI 为 PHP 提供了一个和外部通信的接口, PHP 就是通过这个接口来与其它的应用进行数据交互的。常见的有:apache、apache2filter、apache2handler、cli、cgi、embed 、fast-cgi、isapi
领取专属 10元无门槛券
手把手带您无忧上云