windows server 2008是基于NT6 平台的新型操作系统,其对硬件性能的发挥比起其它NT平台来说有了质的飞跃,已经开始普及到了广大用户中,而且操作较2003来说更为直观和简单,受到越来越多的好评。在这里我们要介绍windows server 2008中的php环境搭建。
1.安装IIS
windows server 2008的IIS版本为7.0,包括fastcgi,安装十分方便。
打开“开始”菜单→“服务器管理”,出现服务器管理界面(图1)
图1 - 服务器管理
滚动条下翻,或者点击主菜单的“角色”,然后点击“添加角色”,出现向导页面后点击下一步,选择“web服务器(IIS)”(图2)
图2-添加角色
点击“下一步”之后,需要选择功能,这里需要比默认选项多增加一个“cgi”(图3)
图3-选择功能
点击“下一步”,将会需要确认一下安装的内容,此时点击安装,即可将IIS安装在操作系统中。
安装好IIS之后,需要进行一个测试,在浏览器地址栏中输入“http://localhost/”,如果出现IIS7的欢迎页则说明正常。接下来需要配置一个新网站,首先打开IIS管理器(“开始”→“所有程序”→“管理工具”→“internet 信息服务(IIS)管理器”)。
然后删除默认网站,在主菜单中,展开网站菜单,然后再网站名称上右键,点击删除即可(图4)
图4-删除默认网站
再新建一个网站,在“网站”上右击,点击添加网站,会出现信息网站添加的表单,首先输入网站名称,例如“dedecms”,路径选择为网站存放的路径,单IP的服务器可以不必选择IP,主机头填写为localhost,然后点击确定。
图5-添加网站
添加好网站后,打开网站目录,新建一个index.html,然后用记事本打开,输入“hello dede”做测试。
还需要配置权限,回到IIS管理器中,在网站“dedecms”上右键,点击“编辑权限”,进入后点击“安全”选项卡,再点击其中的“编辑”(图6)
图6-编辑权限
打开“编辑”窗口后点击“添加”按钮。添加一个“IUSR”到权限用户列表中,然后为其勾选除了“完全控制”之外的权限。然后点击“确定”。(图7)
图7-添加权限
还需要在“属性”窗口再次点确定,否则权限无法保存。
结束此步骤后,就可以访问本地地址“http://127.0.0.1”进行测试了,网页上显示出了“hello dede”,说明配置成功。
图8-测试网页
2.php安装。
在前面已经提过,IIS7中不必单独安装fastcgi,所以,我们只需要下载php安装包进行安装即可,下载地址:http://windows.php.net/downloads/releases/archives/
下载好后,打开安装程序,经过引导,配置好路径,来到选择“web server setup”的地方,在这里我们选择“IIS fastcgi”(图9)
图9-选择IIS FastCGI
然后点击“next”按钮,到了选择安装选项的步骤,一般安装默认的就可以了,如果要添加的话需要点击一下前面的磁盘小图标,然后选择安装,第一项是只安装选中的项目,第二项是安装所有该项目的子项目。(图10)配置好后进入下一步
图10-安装选项
配置好后,点击“next”然后点击“install”即可安装php。
安装完成后,我们还是需要测试一下,打开刚才新建的网站目录,新建一个test.php文件,用记事本打开,输入
<?php
echo phpinfo();
?>
保存退出,再从浏览器中访问http://127.0.0.1/test.php
显示出php信息,说明php环境安装成功。
3.mysql 安装
windows server 2008中mysql的安装和windows server 2003中完全一样,请参阅windows server 2003 php环境搭建中的mysql 安装(点击这里查看)
Apache服务器全局配置之服务器标识配置篇
服务器标识相关指令:
ServerName
ServerAdmin
ServerSignature
ServerTokens
UseCanonicalName
UseCanonicalPhysicalPort
ServerAdmin和ServerTokens指令控制有关服务器的哪些信息将出现在服务器生成的文档中(如错误消息)。ServerTokens指令设置服务器HTTP响应头字段的值。
ServerName、UseCanonicalName、 UseCanonicalPhysicalPort指令用来决定怎样构建自引用URL,譬如,某客户端对一个目录发出请求,但没有包含目录名最后的斜线"/",Apache将重定向客户端到包含"/"的全名,以使客户端可以正确解析文档中的相对引用。
ServerName指令
语法:ServerName [scheme://] FQDN [:port]
这个指令用来设置服务器用于辨识自己的主机名和端口号。主要用于创建重定向URL。
例如,你的web服务器的主机名为example.bob.com,但你的web服务器同时在DNS服务器中拥有一个DNS别名www.bob.com。而你希望web服务器更显著一点,你可以在http.conf中使用ServerName指令来实现:
ServerName www.bob.com:80
当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。如果在ServerName中没有指定端口号,服务器会监听所有端口。为了加强可靠性和可预测性,应该使用ServerName显示的指定一个主机名和端口号。
如果使用的是基于域名的虚拟主机,在<VirtualHost>段中的ServerName将是为了匹配这个虚拟主机,在“Host:”请求头中必须写主机名。
ServerAdmin指令
语法:ServerAdmin email-address|URL
这个指令用来设置服务器返回给客户端的错误信息中包含的管理员邮件地址。便于用户在收到错误信息后能及时与管理员取得联系。
ServerAdmin bob@126.com
ServerSignature指令
语法:ServerSignature . | Off | Email
默认:ServerSignature Off
这个指令用来配置服务器端生成文档的页脚(错误信息、mod_proxy的FTP目录列表、mod_info的输出)。使用该指令来启用这个页脚主要在于处于一个代理服务器链中的时候,用户基本无法辨识出究竟是链中的哪个服务器真正产生了返回的错误信息。
http.conf中该指令默认是Off的,这样就没有错误行;使用On会简单的增加一行关于服务器版本和正在提供服务的ServerName;
例如,我使用ServerSignature .后,在没有打开web页面时出现下面的信息:
Apache/2.2.11 (Unix) PHP/5.2.8 Server at 192.168.120.240 Port 80
对于2.0.44以后的版本,显示详细的服务器版本号将由ServerTokens指令控制。
ServerTokens指令
语法:ServerTokens Major | Minor | Min[imal] | Prod[uctOnly] | OS | Full
默认:ServerTokens Full
这个指令用来控制服务器回应给客户端的“Server:”应答头是否包含关于服务器操作系统类型和编译进的模块描述信息。
注意:在使用ServerTokens指令时要先启用ServerSignature指令。
ServerTokens Prod[uctOnly]:服务器会发送(比如):Apache
Apache Server at 192.168.120.240 Port 80
ServerTokens Major:服务器会发送(比如):Apache/2
Apache/2 Server at 192.168.120.240 Port 80
ServerTokens Minor:服务器会发送(比如):Apache/2.2
Apache/2.2 Server at 192.168.120.240 Port 80
ServerTokens Min[imal]:服务器会发送(比如):Apache/2.2.11
Apache/2.2.11 Server at 192.168.120.240 Port 80
ServerTokens OS:服务器会发送(比如):Apache/2.2.11(Unix)
Apache/2.2.11 (Unix) Server at 192.168.120.240 Port 80
ServerTokens Full:服务器会发送(比如):Apache/2.2.11(Unix)PHP/5.2.8
Apache/2.2.11 (Unix) PHP/5.2.8 Server at 192.168.120.240 Port 80
UseCanonicalName指令
语法:UseCanonicalName On | Off | DNS
默认:UseCanonicalName Off
这个指令用来构造Apache的自引用URL(一个指回相同服务器的URL)。
UseCanonicalName .:会将ServerName设置的域名用于所有的自引用URL、SERVER_NAME、CGI中的SERVER_PORT。比如:如果你的web服务器有自己的域名,并且在DNS中有对应的NS记录,而且httpd.conf将ServerName设置了域名,那么你在浏览器中输入http://192.168.120.240/bbs,它会自动将这个IP地址变成其对应的域名,比如http://www.bob.com/bbs/ 。此时,如果其他客户端的电脑不能正确的解析web服务器的这个域名,那么在访问这个web服务器时将会出现问题。因为web服务器会自动将IP地址转变成域名。
UseCanonicalName Off:如果客户端提供了主机名和端口,Apache将会使用客户端提供的这些信息来构建自引用URL。这些值与用于实现基于域名的虚拟主机的值相同,并且对于同样的客户端可用。CGI变量SERVER_NAME和SERVER_PORT也会由客户端提供的值来构建。
UseCanonicalName DNS:本设置用于为大量基于IP的虚拟主机支持那些不提供“Host:“头的浏览器使用。使用这个选项时,Apache将对客户端连入的服务器的IP地址进行DNS反向解析,以构建自引用URL。
UseCanonicalPhysicalPort指令
语法:UseCanonicalPhysicalPort . | Off
默认:UseCanonicalPhysicalPort Off
这个指令用来配置服务器如何确定自己的端口。
UseCanonicalPhysicalPort .:Apache有可能在构造服务器的规范端口时为了符合UseCanonicalName指令而使用实际的物理端口号。
UseCanonicalPhysicalPort Off:Apache不会使用实际的物理端口号,而是依赖所有已经配置的信息来构造一个合法的端口号。
注意:
决定使用物理端口号的次序如下:
UseCanonicalName .
Servername指定的端口号
物理端口号
默认端口号
UseCanonicalName Off | DNS
“Host:”请求头提供的端口号
物理端口号
Servername指定的端口号
默认端口号
在UseCanonicalPhysicalPort Off的情况下,物理端口号将会从上述顺序中剔除。
Apache服务器全局配置之文件定位配置篇
文件定位相关指令:
CoreDumpDirectory
DocumentRoot
ErrorLog
LockFile
PidFile
ScoreBoardFile
ServerRoot
这些指令控制Apache正常工作所需的各种文件的定位。如果路径名不以斜线“/”开头,那么就认为该文件是相对于ServerRoot的相对路径。
CoreDumpDirectory指令
语法:CoreDumpDirectory directory-path
这个指令用来控制Apache使用的内核转储目录,该转储目录默认位于“ServerRoot”下。因为这个目录通常对于运行服务器的用户是不可写的,内核转储一般也不会写入内容。如果你在调试中需要内核转储,那么你可以用这个指令来指定另外一个目录。
DocumentRoot指令
语法:DocumentRoot directory-path
这个指令用来设置httpd提供服务的目录。在没有使用类似Alias这样的指令的情况下,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。
例如:
DocumentRoot “/usr/local/httpd/htdocs”
那么在访问http://192.168.120.240/bbs/index.html时,实际上就是访问/usr/loca/httpd/htdocs/bbs/index.html。
如果directory-path不是绝对路径,则就会被假定为相对于ServerRoot的路径。
例如:
ServerRoot “/usr/local/httpd/”
DocumentRoot “htdocs”
那么在访问http://192.168.120.240/bbs/index.html时,实际上还是会被定位到/usr/loca/httpd/htdocs/bbs/index.html。
ErrorLog指令
语法:ErrorLog file-path | syslog[:facility]
默认:ErrorLog “logs/error_log”
这个指令用来设置当服务器遇到错误时记录错误日志的文件。如果file-path不是以/开头的绝对路径,那么将会被认为是一个相对于ServerRoot的相对路径。
LockFile指令
语法:LockFile filename
这个指令设置当AcceptMutex指令的值是fcntl或flock的时候,Apache使用的锁文件的位置。一般保持默认值。改变默认值的主要原因是logs目录位于一个NFS文件系统上,因为锁文件必须位于本地磁盘上。主服务器进程的PID会自动添加到文件名后面。
注意:不要将该锁文件放在任何人都有写权限的目录中,因为别人可以通过建立一个与服务器企图建立的锁文件同名的文件,来阻止服务器启动。
PidFile指令
语法:PidFile filename
默认:PidFile “logs/httpd.pid”
这个指令用来设置服务器记录父进程(监控进程)PID的文件。
如果指定的不是绝对路径,那么将会被认为是一个相对于ServerRoot的相对路径。
ScoreBoardFile指令
语法:ScoreBoardFile file-path
这个指令用来设置存储子进程协调数据的文件。Apache使用记分板(scoreboard)在父进程和子进程之间进行通信。一些体系机构要求有一个文件来帮助通信。如果未指定这个文件,Apache会首先尝试在匿名共享内存中建立完整的记分板。如果失败,将继续尝试使用基于文件的共享存储器在磁盘上建立这个文件。若利用这个指令指定这个文件的位置,则Apache将总是在磁盘上建立这个文件。
将ScoreBoardFile放置在RAM DISK中对访问速度有很大帮助。但是要注意放置的位置以及权限。
ServerRoot指令
语法:ServerRoot directory-path
这个指令用来设置Apache服务器所在的目录。一般包含conf/、logs/等子目录。其他配置文件的相对路径一般都是基于此目录的。
例如:
ServerRoot “/usr/local/httpd/”
Apache服务器全局配置之资源限制配置篇
资源限制相关指令:
LimitRequestBody
LimitRequestFields
LimitRequestFieldsize
LimitRequestLine
RLimitCPU
RLimitMEM
RLimitNPROC
ThreadStackSize
LimitRequest*系列指令用来限制Apache在读取客户端请求的过程中使用的资源数量。通过限制这些值,可以减轻某些拒绝服务(DOS)攻击。
RLimit*系列指令用来限制Apache子进程所派生的进程使用的资源数量。通常,这些指令用来控制CGI脚本和SSI exec命令所使用的资源。
ThreadStackSize指令在某些平台上用来控制堆栈大小。
LimitRequestBody指令
语法:LimitRequestBody bytes
默认值:LimitRequestBody 0
这个指令用来设置客户端发送的HTTP请求的最大字节数。LimitRequestBody指令可以作用于整个服务器、特定目录、特定文件、特定位置。如果客户端的请求超出了LimitRequestBody设置的值,那么服务器会回应一个错误信息给客户端,而不会去处理这个请求。
Bytes在0(不限制)到2147483647(2GB)之间。
比如:你允许客户端将文件上传到某个位置,并且希望将上传文件的大小限制为500K,
LimitRequestBody 512000
LimitRequestFields指令
语法:LimitRequestFields number
默认:LimitRequestFields 100
这个指令用来设置客户端向服务器请求中HTTP请求头域的数量。一般一个客户端请求头域的数量很少大于20,但是客户端的不同这个数字也将有很大的差异。这个经常取决于用户配置他们的浏览器扩展以支持更详细的内容协商。可选的HTTP扩展经常使用请求头域来实现。
number是一个0(不限制)到32767之间的整数。默认值为编译时的常量DEFAULT_LIMIT_REQUEST_FIELDS(发布值为100)。
LimitRequestFieldsize指令
语法:LimitRequestFieldsize bytes
默认:LimitRequestFieldsize 8190
这个指令用来设置客户端发送的HTTP请求头的最大字节数。一般来说,服务器需要此值够大,以适应普通客户的的任何请求的头域大小。头域的大小一般与浏览器支持的内容协议有密切关系。
一般情况下,不要更改这个值,使用默认即可。
LimitRequestLine指令
语法:LimitRequestLine bytes
默认:LimitRequestLine 8190
这个指令用来设置客户端发送的HTTP请求行的最大字节数。请求行包括HTTP方法、URL、协议版本等。因此LimitRequestLine指令能够限制URL的长度,服务器会需要这个值足够大以装载它所有的资源名,包括可能在GET请求中所传递的查询部分的所有信息。
一般情况下,不要更改这个值,使用默认即可。
RLimitCPU指令
语法:RLimitCPU seconds | max [seconds|max]
默认:未定义,使用操作系统默认值
这个指令用来设置Apache子进程派生的进程占用CPU的最大秒数。
这里可以设置一个或者两个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。两个参数均可设置为一个数值或者是“max”(表示设置为操作系统允许的最大值)。要增大此资源限制最大值需要以root运行服务器或是在初始化启动语句中进行设置。
这个指令只作用于Apache子进程所派生的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,不包括所有从Apache父进程派生出的进程。比如管道日志。
CPU资源限制表示每进程占用的秒数。
RLimitMEM指令
语法:RLimitMEM bytes | max [bytes|max]
默认:未定义,使用操作系统默认值
这个指令用来设置Apache子进程派生的进程占用内存的最大字节数。
这里可以设置一个或者两个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。两个参数均可设置为一个数值或者是“max”(表示设置为操作系统允许的最大值)。要增大此资源限制最大值需要以root运行服务器或是在初始化启动语句中进行设置。
这个指令只作用于Apache子进程所派生的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,不包括所有从Apache父进程派生出的进程。比如管道日志。
内存资源限制表示为每进程占用的字节数。
RLimitNPROC指令
语法:RLimitNPROC number | max [number|max]
默认:未定义,使用操作系统默认值
这个指令用来设置Apache子进程派生的进程数目。
这里可以设置一个或者两个参数。第一个参数设置所有进程的软资源限制,第二个参数设置最大资源限制。两个参数均可设置为一个数值或者是“max”(表示设置为操作系统允许的最大值)。要增大此资源限制最大值需要以root运行服务器或是在初始化启动语句中进行设置。
这个指令只作用于Apache子进程所派生的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,不包括所有从Apache父进程派生出的进程。比如管道日志。
进程限制控制了每个用户的进程数。
ThreadStackSize指令
语法:ThreadStackSize size
默认:NetWare上为65536,其他平台上等于操作系统默认值
这个指令用来设置处理客户端连接(包括调用模块以协助处理)的线程允许使用的最大栈尺寸(字节)。
大多数情况下,操作系统默认的栈尺寸很合理。但是在某些情况下,需要调整这个值:
在默认栈尺寸较小的平台上(比如HP-UX),Apache可能会在使用一些需要较大栈尺寸的第三方模块时崩溃。这样的问题可以通过将ThreadStackSize设置为一个较大的值来解决。这种调整应当仅仅在第三方模块提供者明确要求的情况下才需要,或者是您通过诊断确定是由于栈空间太小而导致崩溃。
在某些平台上,如果默认的栈空间大于服务器运行所需空间,那么将ThreadStackSize值降低到小于操作系统默认值可以让每个进程中允许生成的最大线程数量增加。这种类型的调整应该仅在测试环境中使用,并且对所有服务器进程进行充分的测试,因为处理某些罕见的请求需要较大的栈空间。一个很小的服务器配置变化就有可能使得当前的ThreadStackSize设置变得不合适。
1、打开httpd.conf,查找Listen:80,在下面一行加入Listen:8080;
2、查找#Include conf/extra/httpd-vhosts.conf,将此行前面的#去掉;
3、打开httpd.conf文件目录下面的extra文件夹下面的httpd-vhosts.conf文件;
4、查找NameVirtualHost *:80,在下面一行增加NameVirtualHost *:8080;
5、复制httpd-vhosts.conf文件最下面的如下代码,并且在下面粘贴一份:
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.abc.com
DocumentRoot "G:\PHP"
ServerName dummy-host.abc.com
ServerAlias www.dummy-host.abc.ccom
ErrorLog "logs/dummy-host.abc.com-error.log"
CustomLog "logs/dummy-host.abc.com-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.abc.com
DocumentRoot "G:\PHP"
ServerName dummy-host2.abc.com
ErrorLog "logs/dummy-host2.abc.com-error.log"
CustomLog "logs/dummy-host2.abc.com-access.log" common
</VirtualHost>
6、将上面代码修改为:
<VirtualHost *:8080>
ServerAdmin webmaster@dummy-host.abc.com
DocumentRoot "G:\PHP\abc"
ServerName dummy-host.abc.com
ServerAlias www.dummy-host.abc.ccom
ErrorLog "logs/dummy-host.abc.com-error.log"
CustomLog "logs/dummy-host.abc.com-access.log" common
</VirtualHost>
<VirtualHost *:8080>
ServerAdmin webmaster@dummy-host2.abc.com
DocumentRoot "G:\PHP\abc"
ServerName dummy-host2.abc.com
ErrorLog "logs/dummy-host2.abc.com-error.log"
CustomLog "logs/dummy-host2.abc.com-access.log" common
</VirtualHost>
7、保存并重启apache。
备注:
1、以上代码主要是修改了端口和目录,80端口对应的目录为G:\PHP,8080端口对应的目录为G:\PHP\abc;
2、新增加的端口对应的目录必须在Apache目录下面;
3、打开http://localhost:8080即可访问G:\PHP\abc目录。
下面是一些补充资料:
在我们想 配置多个虚拟机主机的时候 而且又想端口不一样的情况下 我在网上 找了很多 都是扯淡了...今天下午我就总结了一下午 终于把 多个端口的 apache 配置搞定了./
首先在http.conf 下面加个Include /etc/httpd/conf/51buyhost.conf 这句话 等会就知道了..呵呵
下面接着往下看...
NameVirtualHost *:8080
#
Listen 8080
<VirtualHost *:8080>
DocumentRoot "/var/www/html/goodfoison"
#ServerName (注释了暂时不用,因为只用ip去访问)
ServerName 192.168.0.50
ServerAlias 192.168.0.50
<Directory "/var/www/html/goodfoison">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
#szlise.com
Listen 8081
<VirtualHost *:8081>
DocumentRoot "/var/www/html/szlise"
#ServerName (注释了暂时不用,因为只用ip去访问)
ServerName 192.168.0.50
ServerAlias 192.168.0.50
<Directory "/var/www/html/szlise">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
:wq 退出
自己慢慢研究哦....
然后在防火墙里面开启相对应的端口就行