IIS安装
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。
接下来介绍如何在Win10下安装IIS服务。打开控制面板,选择程序-程序和功能,选择左边的“启用或关闭Windows功能”,勾选Internet Information Service的内容,其中Web管理工具和万维网服务必须勾选,且需要勾选万维网服务-应用程序开发功能中的CGI,IASAPI项目。
值得注意的是,默认选择Web管理工具和万维网服务时,系统不会选择IIS管理控制台,这会影响到后面对IIS的配置,需要手动勾选。需保证万维网服务中“安全性-请求筛选”,“常见HTTP功能”中除了“重定向”和“WebDAV”发布之外的内容以及“应用程序开发功能”中的CGI和ISAPI扩展,其他功能可以按需要添加。
除此之外,要确认.Net Framework 3.5已经成功安装,否则IIS无法正常工作。确定后等待安装完成。
打开IIS有两种方法:一是直接使用Cortana搜索管理工具,打开选择Internet Information Services(IIS)管理器,或者直接搜索IIS;二是用组合键win+R打开运行,输入inetmgr打开。
IIS配置
IIS是集成于Windows操作系统中的web服务器。Win10下IIS的配置主要可以分为以下三步:
IIS 的作用是发布网站,首先要将虚拟的网络空间映射到物理目录,也可用添加虚拟目录,如下图所示在 IIS 中选择默认网站,右键高级设置可修改站点物理路径。如下图:
虚拟目录就是站点物理路径下的一个文件夹,同一站点可以创建多个虚拟目录,分别存放不同内容的文件。虚拟目录的物理目录不一定要在站点的物理路径下,这就是虚拟目录达到的效果。
IIS中选择默认网站,右键添加虚拟目录。如下图所示:
别名是虚拟目录在IIS中站点的物理路径下显示的名称,可以与物理路径的名称不同,别名的功能更有利于IIS站点下目录的管理。
在物理路径的文件夹内新建test.html,写入内容并保存:
`<html>
DOM Tutorial
Hello world!
</html>`
此时在网页中输入127.0.0.1/test/test.html,会提示错误:HTTP 错误 401.3 – Unauthorized。
错误的原因是test文件夹的权限没有开放。找到目录,右键->安全->添加->查找 :找到everyone ,然后设置其权限,完全开放,相当于Linux设置权限为777。
其实不一定要选择所有人的权限,如果因为安全的需要,可以选择IUSR用户组,这样可以保证网页能够正常访问,而不会开放过多权限给其他人。
此时再输入127.0.0.1/test/test.html,结果如下图,测试IIS的html文件发布与虚拟目录成功。
PHP 安装与配置
PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP在Apache服务器上简便易用,开发效率非常高,但是在IIS服务器上则需要进行一定的安装和配置。
1. ISAPI和FastCGI
在WindowsIIS6.0下配置PHP,通常有CGI、ISAPI和FastCGI三种配置方式,这三种方式均可以实现IIS对PHP的支持,但这三种方式对应于不同的PHP版本,在性能上也存在差异。
CGI即通用网关接口(Common Gateway
Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。
CGI程序一般是个可执行程序。编译好的CGI程序一般要集中放在一个目录下。具体存放的位置随操作系统的不同而不同。CGI程序的执行一般有两种调用方式:第一种是通过URL直接调用,如:“http://202.114.2.182/cgi-win/cgi.exe”,在浏览器的URL栏里直接写入上述描述就可以调用该程序;另一种方式,也是主要的方式,是通过交互式主页里的FORM栏调用,通常都是用户在填完一张输入信息Form后按确认按钮启动CGI程序。
CGI工作的主要流程是:1.一个用户请求激活一个CGI应用程序;2.CGI应用程序将交互主页里的用户输入信息提取出来;3.将用户输入的信息传给服务器主机应用程序(如数据库查询);4.将服务器处理结果通过HTML文件返回给用户;5.CGI进程结束。
CGI的跨平台性能极佳,几乎可以在任何操作系统上实现,如DOS、WINDOWS、UNIX、OS/2、Macintosh等。实现CGI的编程语言也有很多选择。CGI的应用程序一般都是一个独立的可执行程序,和WWW服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样,每有一个用户请求,都会激活一个CGI进程,当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute模式)。它还支持分布式的运算,即FastCGI程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。
ISAPI即Internet Server
Application Program Interface,是微软提供的一套面向Internet服务的API接口,它能实现CGI能提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI服务器扩展是可以被HTTP服务器加载和调用的DLL。Internet服务器扩展也称为Internet服务器应用程序(ISA),用于增强符合Internet服务器API(ISAPI)的服务器的功能。ISA通过浏览器应用程序调用,并且将相似的功能提供给通用网关接口(CGI)应用程序。
ISAPI的工作原理和CGI大体上是相同的,都是通过交互式主页取得用户输入信息,然后交服务器后台处理。但是二者在实现机制上大相庭径。ISAPI与CGI最大的区别在于:不同于CGI,在ISAPI下建立的应用程序是以动态连接库的形式存在;而CGI的应用程序一般都是可执行程序。
ISAPI应用的工作流程与CGI有一些不同。ISAPI应用的DLL不仅可以像CGI程序一样被用户请求激活,还可以被系统预先激活来监视用户输入;对于被用户激活的DLL,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入,直到过了一段时间后一直没有用户输入。
一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。不过ISAPI的平台兼容性较差,目前只能用于微软自己的Windows95和NT操作系统上,服务器平台也仅限于IIS(Internet Information Server)和MSpersonalwebserver以及Workstation上的peer webserver。
以ISAPI模式运行PHP的,这种方式最大的缺点就是稳定性不好,当PHP出错的时候,Apache进程也死掉。
FastCGI模式运行PHP的优点很多,首先就是PHP出错的时候不会搞垮Apache,只是PHP自己的进程当掉(但FastCGI会立即重新启动一个新PHP进程来代替当掉的进程);其次FastCGI模式运行PHP比ISAPI模式性能更好;最后,就是可以同时运行PHP5和PHP4。FastCGI模式也有一些缺点,用FastCGI模式更适合生产环境的服务器,但对于开发用机器来说就不太合适。因为当使用Zend
Studio调试程序时,由于FastCGI会认为PHP进程超时,从而在页面返回500错误。
2. PHP安装与配置
PHP是基于Linux/Unix系统的一款编程语言,最初的版本不支持windows。从2000年10月20日发布的第一个Windows版的PHP3.0.17开始,PHP都具有线程安全,这是因为Linux/Unix系统是采用多进程的工作方式,而Windows系统是采用多线程的工作方式。如果IIS以CGI方式运行PHP,效率将会较低,原因是CGI模式是多进程,而windows则是多线程。如果将PHP配置成以ISAPI的方式来运行,ISAPI是多线程的,效率会提高较大,但存在一个问题,很多常用的PHP扩展是以Linux/Unix多进程思想来开发的,这些扩展在以ISAPI的方式运行时就会出错,很可能将IIS进程搞崩溃,因此对于IIS来说,CGI模式才是PHP运行的最安全的方式,只不过CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,消耗巨大。为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求重新加载,同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式的线程安全优势。
在官方网站上下载PHP并安装后,安装目录下若有php-cgi.exe则支持FastCGI。
PHP目录下有两个.ini文件,二者不同之处在于 php.ini-development 适合开发程式使用(测试用),而php.ini-production 拥有较高的安全性设定,则适合上线当产品使用。本次实验使用php.ini-production。将其备份后,修改文件的内容。将extension=curl前的分号去掉。然后修改date.timezone=PRC。
值得注意的是,新版的php是默认开启curl模块的,这种情况下去掉分号会导致反复加载curl的报错。这时把分号加回即可。
CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使用它来发送HTTP请求。它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。CURL可以根据URL前缀是“HTTP” 还是“HTTPS”自动选择是否加密发送内容。
此时运行php.exe会出现找不到curl模块的错误。
这是因为extension_dir默认在根目录下,而Windows的版本中extension_dir在.\ext中。打开找到"extension_dir",去掉注释符,将值改为"PHP安装路径\ext",修改完成后,将其保存为php.ini。PHP配置完毕。
在Windows中IIS配置PHP,通常有CGI、ISAPI和FastCGI三种接口,检查php目录下的文件以确认是那种接口。配置的方法有两种,phpmanager的配置与手动配置。
在默认网站右面的程序选项中选择处理程序映射,新增模块映射,如果在低版本IIS,则在默认网站-属性-配置,然后新增处理程序,新增模块映射,对四个选择框进行设置即可,其中第一个选择框为映射程序格式,第二个选择框为接口方式,第三个选择框为处理程序,exe文件在php的安装目录下。
在iis.net找到对应IIS版本的phpmanager,安装后在在IIS的功能视图中能找到该服务,打开后点击register new PHP version,填入php-cgi.exe的位置,确定后点击Check phpinfo(),选择默认网站,点击确定可验证php是否配置成功。
手动配置和自动配置的差异是phpmanager可以自动为用户配置模块映射。
在默认网站所影射的目录中新建文件index.php(与index.html在相同目录)。在浏览器输入localhost/index.php(新建的文件),或者直接输入localhost。
将index.php改为index.html也能被解析,说明curl模块已成功安装。
在计算机网络中,localhost(意为“本地主机”,指“这台计算机”)是给回路网络接口(loopback)的一个标准主机名,相对应的IP地址为127.0.0.1(IPv4)和[::1](IPv6)。
拓展
除了IIS以外,流行的web服务器还有Apache和Nginx。IIS是集成于Windows操作系统中的组件,只能在windows操作系统上使用IIS搭建服务器;而Apache和Nginx可以支持Linux等各类操作系统。
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
Nginx("enginex")是一款是由俄罗斯的程序设计师IgorSysoev所开发高性能的Web和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
参考:
https://blog.csdn.net/hhy_9288/article/details/80540057
http://www.cnblogs.com/itech/archive/2009/05/06/1450811.html
https://baike.baidu.com/item/PHP/9337