Home > php教程 > php手册 > 超级服务器apache+mysql+php+ssl之完全安装攻略(2)

超级服务器apache+mysql+php+ssl之完全安装攻略(2)

WBOY
Release: 2016-06-21 09:08:43
Original
1341 people have browsed it

apache|mysql|服务器|攻略

PHP安装(UNIX)

现在安装PHP语言。你下载了最新的beta版,但是你可能必须下载非beta版本。记住beta版本需要GNU make。

你仍然假定是root,如果不是,su回到root。

PHP要求你已经预先配置好的Apache,以便它能知道所需的东西在哪儿。在以后你安装Apache服务器时,你将会回到这里。改变到你有源代码的目录。

# cd /tmp/DOWNLOAD

# gunzip -c apache_1.3.x.tar.gz | tar xf -

# cd apache_1.3.x

# ./configure

# cd ..

好的,现在你可以开始PHP的安装。提取源代码文件并进入其目录。如果你下载了版本3,在数字和命令上有一个改变,不大的改变。

# gunzip -c php-4.0.x.tar.gz | tar xf -

# cd php-4.0.x

如果你正在编译代码,configure将永远是你的朋友。:-) 因此,configure有很多选项。使用configure --help确定你想要增加哪些。我只是需要MySQL和LDAP,并且当然Apache。

# ./configure --with-mysql=/usr/local/mysql

--with-xml

--with-apache=../apache_1.3.x

--enable-track-vars

--with-ldap

make并安装二进制代码。

# make

# make install

拷贝ini文件到lib目录。

# cp php.ini-dist /usr/local/lib/php.ini

你可以编辑PHP文件来设置PHP选项,如你可以通过在你的php.ini文件中插入下列行,增加php的max_execution_time。

max_execution_time = 60;

注意:php3用户将使用php3.ini,而php4用户将使用php.ini文件。

Apache 与 Mod_SSL

该配置并安装mod_ssl和Apache了。对此,你将需要有rsaref-2.0文件。在http://ftpsearch.lycos.com/上搜索“rsaref20.tar.Z”。如果你不喜欢Lycos,你可以选择其他搜索引擎来搜索文件。当然只有你在美国才需要这个文件。(管它呢,你也可从别处下载,首先在http://ftpsearch.ntnu.no/查找“rsaref20.tar.Z”,好多啊!。)

创建rasref目录,你将在该目录提取文件。注意。这假定你下载了一个临时目录,而你就在此目录。

# mkdir rsaref-2.0

# cd rsaref-2.0

# gzip -d -c ../rsaref20.tar.Z | tar xvf -

现在配置并构造OpenSSL库。

# cd rsaref-2.0

# cp -rp install/unix local

# cd local

# make

# mv rsaref.a librsaref.a

# cd ../..

安装OpenSSL。记住,你将用它来创建临时证书和CSR文件。--prefix选项指定主安装目录。

# cd openssl-0.9.x

# ./config -prefix=/usr/local/ssl

-L`pwd`/../rsaref-2.0/local/ rsaref -fPIC

现在make、测试并安装它。

# make

# make test

# make install

# cd ..

我们将配置MOD_SSL模块,然后用Apache配置指定它为一个可装载的模块。

# cd mod_ssl-2.5.x-1.3.x

# ./configure

--with-apache=../apache_1.3.x

# cd ..

现在我们可以把更多的Apache模块加到Apache源代码树中。可选的--enable-shared=ssl选项使得mod_ssl构造成为一个DSO“libssl.so”。关于在Apache支持DSO的更多信息,阅读Apache源代码树中的INSTALL和 htdocs/manual/dso.html文档。我强烈建议ISP和软件包装维护者为了最灵活地使用mod_ssl而使用DSO工具,但是注意,DSO不是在所有平台上的Apache都支持。

# cd apache_1.3.x

# SSL_BASE=../openssl-0.9.x

RSA_BASE=../rsaref-2.0/local

./configure --enable-module=ssl

--activate-module=src/modules/php4/libphp4.a

--enable-module=php4 --prefix=/usr/local/apache

--enable-shared=ssl

[...你可加入更多的选项...]

生成Apache,然后生成证书,并安装...

# make

如果你已正确地完成,你将得到类似于以下的信息:

+-----------------------------------------------------------------------+

| Before you install the package you now should prepare the SSL |

| certificate system by running the "make certificate" command. |

| For different situations the following variants are provided: |

| |

| % make certificate TYPE=dummy (dummy self-signed Snake Oil cert) |

| % make certificate TYPE=test (test cert signed by Snake Oil CA) |

| % make certificate TYPE=custom (custom cert signed by own CA) |

| % make certificate TYPE=existing (existing cert) |

| CRT=/path/to/your.crt [KEY=/path/to/your.key] |

| |

| Use TYPE=dummy when you’re a vendor package maintainer, |

| the TYPE=test when you’re an admin but want to do tests only, |

| the TYPE=custom when you’re an admin willing to run a real server |

| and TYPE=existing when you’re an admin who upgrades a server. |

| (The default is TYPE=test) |

| |

| Additionally add ALGO=RSA (default) or ALGO=DSA to select |

| the signature algorithm used for the generated certificate. |

| |

| Use "make certificate VIEW=1" to display the generated data. |

| |

| Thanks for using Apache & mod_ssl. Ralf S. Engelschall |

| rse@engelschall.com |

| www.engelschall.com |

+-----------------------------------------------------------------------+

现在你可以创建一个定制的证书。该选项将提示输入你的地址、公司、和其他一些东西。关于证书,请参阅本文的结尾。

# make certificate TYPE=custom

现在安装Apache...

# make install

如果一切正常,你应该看到类似于以下的信息:

+----------------------------------------------------------------------------------+

| You now have successfully built and installed the |

| Apache 1.3 HTTP server. To verify that Apache actually |

| works correctly you now should first check the |

| (initially created or preserved) configuration files |

| |

| /usr/local/apache/conf/httpd.conf |

| and then you should be able to immediately fire up |

| Apache the first time by running: |

| |

| /usr/local/apache/bin/apachectl start |

| Or when you want to run it with SSL enabled use: |

| |

| /usr/local/apache/bin/apachectl startssl |

| Thanks for using Apache. The Apache Group |

| http://www.apache.org / |

+----------------------------------------------------------------------------------+

现在验证Apache和PHP是否正在工作。然而,我们需要编辑srm.conf和httpd.conf保证我们把PHP类型加到了配置中。查看httpd.conf并去掉下列行的注释。如果你精确地遵循了本文的指令,你的httpd.conf文件将位于/usr/local/apache/conf目录。文件有一行针对php4的addtype加了注释,现在就去掉注释。httpd.conf 文件--片断

>

> # And for PHP 4.x, use:

> #

---> AddType application/x-httpd-php .php

---> AddType application/x-httpd-php-source .phps

>

>

现在我们准备启动Apache服务器看它是否在工作。首先我们将启动不支持SSL的服务器看它是否启动了。我们将检查对PHP的支持,然后我们将停止服务器并且启动启用了SSL支持的服务器并检查我们是否一切正常。configtest 将检查所有配置是否正确设置。

# cd /usr/local/apache/bin

# ./apachectl configtest

Syntax OK

# ./apachectl start

./apachectl start: httpd started

测试我们的工作

Apache 正在工作吗?

如果它工作正常,当你用Netscape连接服务器时,你将看见一幅类似于这幅屏幕捕获的屏幕。这是基本上 是Apache缺省安装的页面。

注意:你可以用域名或机器实际的IP地址与服务器连接。检查这两种情形,确保一切工作正常。

PHP支持正在工作吗??

现在将测试PHP支持……创建一个文件(名为:test.php ),它有下列信息。文件需要位于文档根路径下,它应该缺省设置为/usr/local/apache/htdocs。注意这依赖于我们以前选择的前缀,然而,这可在 httpd.conf中改变。设置多个虚拟主机将在另一篇文章加少,请留意,因为它将涉及安装Apache和它的指令的一些很基本的选项。

test.php 文件



phpinfo();

?>

它将显示有关服务器、php和环境的信息。下面是输出页面的顶部的屏幕抓取。

很酷吧,PHP起作用了。

SSL 选择正在工作吗??

好了,现在我们准备测试SSL了。首先停止服务器,并以启用SSL的选项重启它。

# /usr/local/apache/bin/apachectl stop

# /usr/local/apache/bin/apachectl startssl

测试它是否工作:通过用一个Netscape与服务器连接并且选择https协议,即:https://youserver.yourdomain.com 或 http://yoursever.yourdomain.com:443 ,也可以再试一下你的服务器的 ip地址,即:https://xxx.xxx.xxx.xxx和 http://xxx.xxx.xxx.xxx:443 。

如果它起作用了,服务器将把证书发送到浏览器以建立一个安全连接。这将让浏览器提示你接受自己签署的证书。,如果它是来自VeriSign或Thawte的一张证书,那么浏览器将不提示你,因为证书来自一个可信的证书授权机构(CA)。在我们的情况中,我们创建并签署我们自己的证书……我们不想马上买一个。首先,我们想要保证我们能使一切正常。

你在Netscape中将看见启用了下列选项。这就告诉你一个安全的连接已经建立起来了。

PHP和MySQL能一起工作吗??

现在,我们可以确定php能与MySQL一起工作,通过创建一个简单的脚本,对“test2”数据库做一些插入和数据删除操作。只是一个简单的脚本以测试它是否工作了。在另一篇文章中我们将讨论PHP脚本连接一个 MySQL数据库。还记得我们已经创建立了数据库和一张表。我们可以现在完成它,但是我选择不。我想要再检查一次root有权限创建立数据库和表,然而,PHP提供了对MySQL的提供,因此我能很容易地编写代码以创建一个测试数据库和若干条记录。

记得我们以前创建了书籍数据库。如果你跳过了以前的内容,这部分将不工作。我们创建了有一个“books”表的test2数据库,并且为一本书插入了一条记录。

这个脚本基本上浏览该表并列出所有字段名,它的确很简单。



$dbuser = "root";

$dbhost = "localhost";

$dbpass = "password";

$dbname = "test2";

$dbtble = "books";

$mysql_link = mysql_connect($dbhost,$dbuser,$dbpass);

$column = mysql_list_fields($dbname,$dbtble,$mysql_link);

for($i=0; $i
{

print mysql_field_name($column,$i )."
";

}

?>


一个更复杂的例子将向你演示PHP某些绝妙的功能。






Example 2 -- more details







$dbuser = "root";

$dbhost = "localhost";

$dbpass = "password";

$dbname = "test2";

$dbtable = "books";

//------ DATABASE CONNECTION --------//

$mysql_link = mysql_connect($dbhost,$dbuser,$dbpass);

$column = mysql_list_fields($dbname,$dbtable,$mysql_link);

$sql = "SELECT * FROM $dbtable";

$result = mysql_db_query($dbname,$sql);

?>















注意,我们竟能在同一文件中同时有HTML和PHP命令。这就是PHP脚本的奇妙之处。

虚拟主机的设置

现在是设置Apache处理一些虚拟主机的时间了。由于Apache提供的灵活性,虚拟主机可很简单地做到。首先你需要一个DNS服务器把虚拟主机的域名指向web服务器的IP地址。在DNS使用一个CNAME记录把 your_virtual_domain.com指向服务器的IP。其次你需要修改Apache的配置文件httpd.conf以增加新的虚拟域名。记住,这只是一个很基本的例子,你有勇气读一下Apache的指令。

让我们看一个 httpd.conf 的例子。

httpd.conf 片断

#--------------------------------------------------------#

# VIRTUAL HOST SECTION NON-SSL

#--------------------------------------------------------#

# VirtualHost directive allows you to specify another virtual

# domain on your server. Most Apache options can be specified

# within this section.

# Mail to this address on errors

ServerAdmin webmaster@domain1.com

# Where documents are kept in the virtual domain

# this is an absolute path. So you may want to put

# in a location where the owner can get to it.

DocumentRoot /home/vhosts/domain1.com/www/

# Since we will use PHP to create basically

# all our file we put a directive to the Index file.

DirectoryIndex index.php

# Name of the server

ServerName www.domain1.com

# Log files Relative to ServerRoot option

ErrorLog logs/domain1.com-error_log

TransferLog logs/domain1.com-access_log

RefererLog logs/domain1.com-referer_log

AgentLog logs/domain1.com-agent_log


# Use CGI scripts in this domain. In the next case you

# can see that it does not have CGI scripts. Please

# read up on the security issues relating to CGI-scripting.

ScriptAlias /cgi-bin/ /var/www/cgi-bin/domain1.com/

AddHandler cgi-script .cgi

AddHandler cgi-script .pl

# This is another domain. Note that you could host

# multiple domains this way...

# Mail to this address on errors

ServerAdmin webmaster@domain2.com

# Where documents are kept in the virtual domain

DocumentRoot /virtual/domain2.com/www/html

# Name of the server

ServerName www.domain2.com

# Log files Relative to ServerRoot option

ErrorLog logs/domain2.com-error_log

TransferLog logs/domain2.com-access_log

RefererLog logs/domain2.com-referer_log

AgentLog logs/domain2.com-agent_log

# No CGI’s for this host

# End: virtual host section

使用上述例子在你的服务器上创建你自己的虚拟主机。如果你想从Apache网站上阅读每一条指令,它的网址是:http://www.apache.org。

SSL虚拟主机

创建SSL虚拟主机类似非SSL。除了你需要指定另外的指令,还有,你需要增加一个DNS记录并且修改 httpd.conf。这里有一个例子。

#--------------------------------------------#

# SSL Virtual Host Context

#--------------------------------------------#

# General setup for the virtual host

DocumentRoot /usr/local/apache/htdocs

ServerAdmin webmaster@securedomain1.com

ServerName www.securedomain1.com

ErrorLoglogs/domain1.com-error_log

TransferLog logs/domain1.com-transfer_log

# SSL Engine Switch:

# Enable/Disable SSL for this virtual host.

SSLEngine on

# Server Certificate:

# Point SSLCertificateFile at a PEM encoded certificate. If

# the certificate is encrypted, then you will be prompted for a

# pass phrase. Note that a kill -HUP will prompt again. A test

# certificate can be generated with `make certificate’ under

# built time. Keep in mind that if you’ve both a RSA and a DSA

# certificate you can configure both in parallel (to also allow

# the use of DSA ciphers, etc.)

# Note that I keep my certificate files located in a central

# location. You could change this if you are an ISP, or ASP.

SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt


# Server Private Key:

# If the key is not combined with the certificate, use this

# directive to point at the key file. Keep in mind that if

# you’ve both a RSA and a DSA private key you can configure

# both in parallel (to also allow the use of DSA ciphers, etc.)

SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key

# Per-Server Logging:

# The home of a custom SSL log file. Use this when you want a

# compact non-error SSL logfile on a virtual host basis.

CustomLog /usr/local/apache/logs/ssl_request_log

"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"

记住你有很多指令可以指定。我们将在另一篇有关配置Apache的文章中讨论,本文只是一个入门性指南。

生成证书

这是如何生成证书的按部就班的描述。

为你的Apache服务器创建一个RSA私用密钥(被Triple-DES加密并且进行PEM格式化):

# openssl genrsa -des3 -out server.key 1024

请在安全的地方备份这个server.key文件。记住你输入的通行短语(pass phrase)!你可以通过下面的命令看到这个RSA私用密钥的细节。

# openssl rsa -noout -text -in server.key

而且你可以为这个RSA私用密钥创建一个加密的PEM版本(不推荐),通过下列命令:


# openssl rsa -in server.key -out server.key.unsecure


用服务器RSA私用密钥生成一个证书签署请求(CSR-Certificate Signing Request)(输出将是PEM格式的):

# openssl req -new -key server.key -out server.csr

当OpenSSL提示你“CommonName”时,确保你输入了服务器的FQDN("Fully Qualified Domain Name") ,即,当你为一个以后用https://www.foo.dom/访问的网站生成一个CSR时,这里输入"www.foo.dom"。你可借助下列命令查看该CSR的细节:

# openssl req -noout -text -in server.csr

将CSR发到一个CA

现在你必须发送该CSR到一个CA以便签署,然后的结果才是可以用于Apache的一个真正的证书。

有两种选择:

第一种,你可以通过一个商业性CA如Verisign 或 Thawte签署证书。那么你通常要将CSR贴入一个web表格,支付签署费用并等待签署的证书,然后你可以把它存在一个server.crt文件中。关于商业性CA的更多信息,请参见下列链接:

Verisign - http://digitalid.verisign.com/server/apacheNotice.htm

Thawte Consulting - http://www.thawte.com/certs/server/request.html

CertiSign Certificadora Digital Ltda. - http://www.certisign.com.br

IKS GmbH - http://www.iks-jena.de/produkte/ca /

Uptime Commerce Ltd. - http://www.uptimecommerce.com

BelSign NV/SA - http://www.belsign.be

你自己的CA

第二种,你可以利用自己的CA并由该CA签署CSR。你可以创建自己的认证中心来签署证书。最简单的方法是利用OpenSSL提供的CA.sh或 CA.pl脚本。比较复杂而且是手工的方法是:

为你的CA创建一个RSA私用密钥( 被Triple-DES加密并且进行PEM格式化的):

# openssl genrsa -des3 -out ca.key 1024

请在安全的地方备份这个ca.key文件。记住你输入的通行短语(pass phrase)!你可以通过下面的命令看到这个RSA私用密钥的细节。

# openssl rsa -noout -text -in ca.key

而且你可以为这个RSA私用密钥创建一个加密的PEM版本(不推荐),通过下列命令:

# openssl rsa -in ca.key -out ca.key.unsecure

利用CA的RSA密钥创建一个自签署的CA证书(X509结构)(输出将是PEN格式的):

# openssl req -new -x509 -days 365 -key ca.key -out ca.crt

你可以通过下列命令查看该证书的细节:

# openssl x509 -noout -text -in ca.crt

准备一个签署所需的脚本,因为"openssl ca"命令有一些奇怪的要求而且缺省的OpenSSL配置不允许简单地直接使用"openssl ca"命令,所以一个名为sign.sh的脚本随mod_ssl分发一道发布(子目录pkg.contrib/)。 使用该脚本进行签署。

现在你可以使这个CA签署服务器的CSR,以便创建用于Apache服务器内部的真正的SSL证书(假定你手头已经有一个server.csr):

# ./sign.sh server.csr

它签署服务器的CSR并且结果在一个server.crt文件中。

现在你有两个文件:server.ket和server.crt。在你的Apache的httpd.conf文件中,如下使用它们:

SSLCertificateFile /path/to/this/server.crt

SSLCertificateKeyFile /path/to/this/server.key

server.csr不再需要了。



Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template