标题: PHP教程之apache+mysql+php+ssl办事器之完整装置... [打印本页] 作者: 愤怒的大鸟 时间: 2015-2-3 23:52 标题: PHP教程之apache+mysql+php+ssl办事器之完整装置... 一下弹出N多页面!很明显,你的留言本并没有做好安全防范,被人用JS代码小小的耍了一下,我很同情你这个时候的感受,但是没有别的办法了,继续努力吧! 目标咱们的方针是装置一个答应咱们托管多个网站的web办事器,个中一些是针对电子商务的平安处理计划,而大局部网站是经由过程毗连一个数据库办事器而且提取其数据的剧本驱动的。
为了这个义务所需的东西是:
Apache-一个网站办事器
Mod_SSL-一个平安套接字层(SSL)的模块
OpenSSL-开放源代码东西箱(mod_ssl所需)
RSARef-仅对美国用户
MySQL-一个数据库办事器
PHP-一种剧本言语
“条条亨衢通罗马”……因而这只是良多能到达咱们请求的设置装备摆设之一。我选择如许的设置装备摆设,是由于它是最复杂和最快的一种。选择Mod_SSL/OpenSSL的缘由是由于我有它的先前经历,是最快设置装备摆设和最轻易装置的一种。为了彼此便利地与Apache集成,我选择了PHP和MySQL。记住,Perl能做到你想要做任何任务,但是,PHP对任何想进修它地法式员来讲复杂而且轻易。
但愿你将在停止这个复杂的指南后能胜利地完成以下方针。
装置并设置MySQL数据库办事器
o 晓得如何反省MySQL办事器的形态
o 晓得如何利用号令行客户法式存取MySQL办事器
o 晓得如何从web存取你的DB办事器
装置并设置具有SSL的Apache网站办事器
o 设置装备摆设一个复杂的虚拟网站
o 晓得如何中断并启动办事器
o 晓得如何做一些根基的主机托管设置装备摆设
装置并设置装备摆设办事器端剧本的PHP 4.0超文本预处置器
o 晓得如何编写复杂的php代码
o 晓得如何利用php毗连一个DB
o 创立一个启用PHP地复杂网站与一个数据库沟通
发明一些样本证书用于Apache SSL
o 晓得如何发生一个CSR文件
o 晓得如何加密一个键码
o 晓得如何 签订你本人的证书
本文将掩盖大批的信息。本指南作为一个入门性地的指南,让你步入电子商务、网站剧本和平安套接字层 (SSL)的世界,目标是匡助你创立由存储在数据库中的静态信息驱动的平安网站。
本文绝非是一个具体周全的文档,它固然将有一些毛病(但愿最小),在你浏览它时请记住这一点。但是,它将激起你的热忱并运转后面提到的产物,但愿让你更好了解这些器材是如何任务的。不需求之前的编程常识,但假定你有点盘算机常识后台。我的方针是编写这个文档以便任何老手能了解我正在议论的器材。假如我到达了,那末我做了一件功德。假如你垂手可得地创立了电子商务站点,比我做的更精彩:-) 给我一些注释。
假定
本文假定你已把以下软件装置在你的体系上了。
Perl (最好是ver 5+)
gzip或gunzip
gcc 和 GNU make
假如你没有装置好这些,你将需求接纳需要的步调在注释本文的任何进程前把他们装置好。
你也需求对UNIX号令、HTML、和SQL的一个根基懂得。你应当有如何办理你的Linux机械的一个根基懂得。你也需求一个完整正常的Linux机械,你将在它下面装置软件。固然你将需求在后面列出的需要的软件包以编译源代码,而且最初,包管你还没有在Linux机械中预装了MySQL、Apache、或PHP。
MySQL源代码装置(UNIX)
你必需用来履行装置MySQL源代码分发的根基号令是(自一个没解开“tar”文件):
经由过程利用su成为 root用户。
$su
直接进入你有tar文件的目次。(利用一个一时目次。这里利用 /tmp/download/ )
#cd /tmp/download/
利用以下号令提取文件。
# gunzip -d -c mysql-3.22.xx.tar.gz | tar xvf -
改动到新目次,它在提取时代创立。
# cd mysql-3.22.xx
如今你可以入手下手“设置装备摆设”MySQL办事器。你可以用configure指定良多选项,利用configure --help检查一切的选项。我已选择--prefix指定到装置地址的直接途径。configure将反省你的编译器和一些其他器材。假如你有任何毛病,你可以反省config.cache文件检查毛病。
# configure --prefix=/usr/local/mysq
在你完成了设置装备摆设今后,你可以履行以下号令make真实的二进制代 码。
# make
如今你已筹办好装置一切的二进制代码。运转以下号令在你用configure --prefix选项指定的目次下装置二进制代码。
# make install
在你装置好二进制代码后,如今是创立用于界说权限的mysql表的时分了。
# scripts/mysql_install_db
# cd /usr/local/mysql/bin
# ./safe_mysqld &
# ./mysqladmin -u root password "new-password"
注重:/usr/local/mysql是我选择装置MySQL办事器的目次。你可以经由过程改动目次选择别的的中央。
你可以经由过程运转一些复杂的测试来验证办事器正在任务以确保MySQL正在运转。输入应当相似于上面所示的:BINDIR=/usr/local/mysql/bin。BINDIR依附于你在下面的前缀选择的目次。
# BINDIR/mysqlshow -p
+---------------+
| Databases |
+---------------+
| mysql |
+---------------+
一旦你装置好MySQL,它将主动地创立2个数据库。一个mysql表,它掌握在实践的办事器顶用户、主机和 数据库权限;另外一个是一个test数据库,咱们能利用test数据库。但是,咱们想给你一个疾速而复杂的MySQL可用的一些号令行选项的概述。这也将包管root被设置了对DB办事器的全体存取权限,即:root有创立数据库、数据库表等的允许,因而咱们将创立一个test2数据库,在今后咱们用它停止咱们的测试。在你经由过程号令行进入MySQL前,你将被提醒root用户的新口令。记住你之前改动了它。
# mysql -u root -p
mysql> show databases;
+----------------+
| Database |
+----------------+
| mysql |
| test |
+----------------+
mysql> create database test2;
Query OK, 1 row affected (0.00 sec)
如今选择新的数据库利用,并创立一个名为tst_tbl的新表, 有以下2个字段。字段1是是一个id字段,答应你晓得纪录的id。本色上为了简化这只是的一个行号。第二个字段是你一个name字段,存储书名信息。这些字段的格局是:字段1(id)是一个长度为3的整数(int),而字段2(name)是一个长度为50的字符(char)字段。为搜刮和索引数据,咱们指定id为键码。
mysql> use test2;
Database changed
mysql> CREATE TABLE books ( id int(3) not null
-> auto_increment, name char(50) not null,
-> unique(id), primary key(id));
Query OK, 0 rows affected (0.00 sec)
如今咱们用以下号令验证一切准确无误。
mysql> show tables
+---------------------+
| Tables in test2 |
+---------------------+
| books |
+---------------------+
1 row in set (0.00 sec)
mysql> describe books;
+-------+-------------+------+------+----------+------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+------+----------+------------------------+
| id | int(3) | | PRI | 0 | auto_increment |
| name | char(50) | | | | |
+-------+-------------+------+------+----------+------------------------+
2 rows in set (0.00 sec)
注重到describe号令根基上“描写”了表的结构。相当不错吧!
好,该试一些的确有效的SQL号令,拔出并从数据库当选择数据,如今把几个纪录加到新表中。记住这些是复杂的书名纪录,然而一旦你取得了SQL足够的经历,你可觉得一些大的电子商务站点创立的确庞杂的数据库。让咱们创立2本设想的书的2笔记录。第一笔记录是我在未来某天写的一本书的名字-“PHP 4 Newbies”,另外一本是一个很有效的Linux书,“Red Hat Linux 6 Server”, 由Mohammed J. Kabir所著。
mysql> INSERT INTO books (name) values("PHP 4 Newbies");
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO books (name) values("Red Hat Linux 6 Server");
Query OK, 1 row affected (0.00 sec)
如今咱们可以反省新记载,收回一条“选择一切”号令
mysql> SELECT * from books;
+----+----------------------------------+
| id | name |
+----+----------------------------------+
| 1 | PHP for Newbies |
| 2 | Red Hat Linux 6 Server |
+----+----------------------------------+
2 rows in set (0.00 sec)
很好,MySQL办事器完整起感化了。咱们可以持续到场,然而此时没甚么意义。注重到当你向数据库中拔出纪录时,你如何不用指定id号,这是由于你创立了启用auto_increment选项的id字段。
让我演示一下若何做一个疾速删除。这只是让你晓得,记住,你可在MySQL的网站http://www.mysql.com上找到所需的有关mysql号令和办事器的一切信息。
mysql> delete from books where id=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from books;
+----+-----------------------------------+
| id | name |
+----+-----------------------------------+
| 2 | Red Hat Linux 6 Server |
+----+-----------------------------------+
1 row in set (0.00 sec)
好了,加入MySQL,持续装置。你可在完成一切装置而且一切任务正常后玩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. |
| |www.knowsky.com
| 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: |
| |www.knowsky.com
| /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处置一些虚拟主机的工夫了。因为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的文章中会商,本文只是一个入门性指南。