Linux系列-Red Hat5平台下的LAMP网站服务搭建(一) 编译安装Apache服务器&httpd服务的基本配置 LAMP架构是目前最为成熟的一种企业网站应用模式,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开民环境。LAMP这个词是一个缩写,具体包括:Linux操作系统,作为LAMP架构运行的基础;Apache网站服务器作为LAMP架构的前端;MySQL数据库服务器作为LAMP架构的后端;PHP(或Perl、Python)编写语言,作为三种开发动态网页的编程语言。LAMP平台具有成本低廉、可定制、易于开发、方便使用、安全和稳定等优势。 从本次开始我将会和大家共同探讨Red Hat5平台下的LAMP网站服务搭建,其中包括编译安装Apache服务器、httpd服务的基本配置、使用awstats分析Web日志、httpd服务的访问控制、MySQL数据库的安装和管理、构建PHP环境、常见论坛搭建等。因为涉及的内容较多,所以大家可能也看到标题上多了序号和子标题。 第一部分:安装httpd服务器 在配置Apache Web服务器之前,需要正确安装好httpd服务器软件。在RHEL5系统中, 可以选择两种方式行安装,第一种方式是通过RHEL5系统光盘自带的RPM包安装,第二种方式就是下载最新版本的httpd源代码,释放后进行编译安装。前者简单、快速,但在功能上存在局限性,实际的生产环境中,编译安装的方式应用要更加广泛。本次我们主要介绍源码编译安装。 1. 获取软件包 获取软件包可发通过Apache服务软件的下载页面:http://httpd.apache.org/download.cgi下载到各个版本的httpd软件包,或者使用wget工具下载httpd-2.2.9.tar.gz源码包文件 wget http://archive.apache.org/dist/httpd/httpd-2.2.9.tar.gz 2. 解压并释放源码包 说明:将httpd源码包解压并释放到/usr/src/目录中,执行cd命令切换到展开的源码目录。 3. 配置编译选项 在配置前可以先执行“./configure –help”命令查看各种配置项的详细信息,以便实现更灵活,更丰富的功能定制配置。 说明:--prefix用于指定httpd服务程序将要安装到的系统目录,这里设置的是缺省目录“/usr/local/apache2”;--enable-so用于能够使httpd服务动态加载模块的功能;--enable-rewrite用于能够使httpd服务具有rewrite网页地址重写功能。 4.编译服务器程序 说明:完成配置以后,需要执行“make”命令进行编译,将源代码转换为可执行的程序。 5.安装已编译完成的程序 说明:执行“make install”命令完成最后的安装过程,将已经编译完的httpd程序及相关目录、文件复制到预设的安装目录中。 第二部分:httpd.conf配置文件解析 Httpd.conf文件是httpd服务的主配置文件,其中包含的配置项直接决定着Web服务器的各项运行参数及服务器性能。要做姨LAMP,我们必须了解httpd.conf中的常用配置项的功能及作用。 1. httpd.conf配置文件的结构 httpd.conf文件由注释行和设置行两部分组成,注释行以“#”开始,包含了对配置行说明和解释的内容,并不是有效的配置项;设置行不以“#”开始,是配置文件中真正有效的设置内容。配置文件中大量的注释行虽然对理解配置项的含义有所帮助,但是过多的注释行也会对配置文件的阅读造成一定的干扰,我们可以使用如下的命令去除掉注释行。 [root@www ~]# cd /usr/local/apache2/conf/ [root@www conf]# cp httpd.conf httpd.conf.bak [root@www conf]# grep -v '#' httpd.conf.bak | grep -v '^$' > httpd.conf 2. httpd.conf中的全局配置、 httpd.conf配置文件中包括有相当数量的全局配置项,这些配置项不包括在任何区域中,决定了Apache服务器的全局参数。以下是httpd.conf文件中常用到的全局配置项内容及注解。 ServerRoot "/usr/local/apache2" //用于设置httpd服务器的根目录 Listen 80 //用于设置监听的端口号 User daemon //用于设置运行htttpd进程时的用户身份 Group daemon //用于设置运行htttpd进程时的组身份 ServerAdmin web@zpp.com //用于设置管理员的E-mail地址 ServerName www.zpp.com //用于设置FQDN DocumentRoot "/usr/local/apache2/htdocs" //用于设置网页文档根目录 DirectoryIndex index.html index.php //用于设置网站的默认首页 ErrorLog "logs/error_log" //用于设置错误日志文件的路径和文件名 LogLevel warn //用于设置记录的级别,默认为Warn(警告) CustomLog logs/access_log common //用于设置访问日志文件的路径和格式类型 PidFile logs/httpd.pid //用于设置保存httpd服务器程序进和号(PID)文件 Timeout 300 //用于设置服务器与浏览器之间网络连接的超时时间 KeepAlive On //用于设置是否使用保持连接功能 MaxKeepAliveRequests 100 //用于设置客户端每次连接允许请求响应的最大文件数 KeepAliveTimeout 15 //用于设置保持连接的超时秒数 Include conf/extra/httpd-vhosts.conf //用于包含另一个配置文件的内容 … … 3. httpd.conf中的区域设置 除了全局设置项外,htttpd.conf文件中的在多数配置都是包括在区域中的,区域设置使用一对组合标记,限定了配置项的作用范围,例如,配置文件中常用的目录区域的形式如下: <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> 说明:在以上的区域定义中,使用<Directory />定义区域的开始,使用</Directory>定义该区域的结束,其间的设置内容只作用于区域内部,而不会在全局或其它区域中生效。目录区域设置主要用于为特定的目录,设置访问控制权限。除了目录区域外,经常会设置如“<VirtualHost>… …</VirtualHost>”这样的虚拟主机等的区域。第三部分:web站点的故障排错与性能测试 1.检查httpd.ocnf文件的语法设置 在对httpd.conf文件进行修改后,建议使用带“-t”选项的apachetl命令对配置内容进行语法检查(也可发使用“httpd –t”命令)。如果没有语法错误,将会显示“syntax OK”的信息。否则,需要根据错误信息中的提示,将语法错误修正后再重新检查。用法如下图: [root@www conf]# /usr/local/apache2/bin/apachectl –t Syntax OK [root@www conf]# /usr/local/apache2/bin/httpd –t Syntax OK [root@www conf]# 2.启动、终止及重启httpd服务 使用带“start”选项的apachectl命令可发启动htttpd服务。 例如:使用apachectl脚本程序启动httpd服务,并观察httpd服务的监听状态。 [root@www ~]# /usr/local/apache2/bin/apachectl start [root@www ~]# netstat -anpt | grep :80 tcp 0 0 :::80 :::* LISTEN 21669/httpd [root@www ~]# 说明:将上述apachectl脚本命令的“start”选项替换为“stop”、“restart”时,可分别用于终止、重启httpd服务。若希望在服务器开机后自动运行httpd服务,可以将对应的启动命令写入到“/etc/rc.d/local”文件中。 3.排除httpd服务的个别启动状态 1>.无法确定Web服务器主机名的故障 当httpd服务识别的主机名与服务器实际的主机名不一致时,可能导致启动httpd服务的时侯反应非常缓慢,且出现如下命令提示信息。 [root@www ~]# /usr/local/apache2/bin/apachectl –t httpd: apr_sockaddr_info_get() failed for www.zpp.com httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName Syntax OK [root@www ~]# 参考下列步骤可发解决这个问题。 编辑httpd.conf主配置文件,添加配置行“ServerName www.zpp.com”,指定完整的主机名。若缺少“ServerName”配置行,httpd服务器可能会将“127.0.0.1”作为主机名。 编辑“/etc/sysconfig/network”文件,修改主机名,例如“HOSTNAME=www.zpp.com”。 编辑“/etc/hosts”文件,添加服务器的主机名、IP地址记录,如“192.168.1.1 www.zpp.com ”。 2>.TCP80端口已被占用的故障 当启动httpd服务的时侯出现“… …could not bind to adderss [::]:80”的提示信息时,则表示使用的端口(默认为80)已经被其它进程占用。这时只需要执行“netstat –anpt | grep :80”命令,找出占用80端口的进程并关闭掉即可。很多时侯是系统原有RPM方式安装的httpd服务进程造成的,只要停用原有的httpd服务,并将自启动状态设置为关闭即可。 如下图所示是此类故障的效果及解决办法。 [root@www ~]# /usr/local/apache2/bin/apachectl start (98)Address already in use: make_sock: could not bind to address [::]:80 (98) Address already in use: make_sock:could not bind to address 0.0.0.0:80 no listening sockets available,shutting down Unable to open logs [root@www ~]# netstat -anpt | grep :80 tcp 0 0 :::80 :::* LISTEN 21669/httpd [root@www ~]# killall -9 httpd [root@www ~]# chkconfig --level 35 httpd off [root@www ~]# /usr/local/apache2/bin/apachectl start 4.测试httpd服务器的性能 Httpd服务自带了一个压力测试工具AB(Apache Benchmark,Apache基准测试工具),用于检测Web站点的性能表现,如并发平均响应时间、速度以及并发连接处理能力等。AB命令工具位于安装目录中的“bin/”文件夹下,使用该命令的简单格式如下: Ab [-q] –c 并发请求数 –n 总的请求数 [http://] 域名 [:端口]/路径 说明:使用-q选项时,将不显示测试进度信息,当测试的目标是Web站点的根路径时,注意最后的“/”符号不能省略。指定的并发请求数不能大于总的请求数。下面我们来举例说明ab命令的使用方法。 1>.使用ulimit命令修改最大文件数限制 在RHEL5系统中,默认允许打开的最大文件数为1024.由于使用AB测试工具时可能需要同时打开更多的文件,因此需要使用ulimit命令突破这个限制。Ulimt是一个Bash内部的命令,可以用于对Shell进程使用的系统资源进行限制。 说明:使用ulimit命令将允许打开的最大文件数修改为10000 注意:如果不更改最大文件数限制,在使用AB工具时可能会出现“socket:Too many open files(24)”的错误提示信息,导致测试无法进行。2>.使用AB命令进行压力测试 执行AB测试命令后,通过命令输出的结果判断Web服务器的响应情况及性能表现 [root@www ~]# /usr/local/apache2/bin/ab -q -c 2000 -n 4000 http://www.zpp.com/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.zpp.com (be patient).....done Server Software: Apache/2.2.9 Server Hostname: www.zpp.com Server Port: 80 Document Path: / Document Length: 44 bytes Concurrency Level: 2000 //用于并发连接测试的请求数 Time taken for tests: 3.309 seconds //测试过程消耗的时间 Complete requests: 4000 //测试过程中总共完成的请求数 Failed requests: 0 //失败的请求数量 Write errors: 0 Total transferred: 1190484 bytes //测试过程中的网络传输量 HTML transferred: 179388 bytes //测试过程中的HTML内容传输量 Requests per second: 1208.97 [#/sec] (mean) //服务器平均每秒响应的请求数 Time per request: 1654.301 [ms] (mean) //服务器平均每请求的响应时间 Time per request: 0.827 [ms] (mean, across all concurrent requests) Transfer rate: 351.38 [Kbytes/sec] received Connection Times (ms) //连接时间统计信息 min mean[+/-sd] median max Connect: 0 212 690.9 39 3131 Processing: 1 158 33.3 163 292 Waiting: 0 88 38.8 101 205 Total: 84 370 685.6 204 3200 Percentage of the requests served within a certain time (ms) 50% 204 66% 211 75% 230 80% 244 90% 292 95% 3152 98% 3180 99% 3188 100% 3200 (longest request) 第四部分:Web站点的典型应用 一. 构建虚拟Web主机 虚拟Web主机指的是在同一台服务器中运行多个Web站点的应用,其中的每一个站点并不独立占用一台真正的计算机。例如,当用户访问两个不同的网站www.zou.com、www.pan.com时,所看到的网页内容也不相同,而如果这两个网站实际上是在同一台服务器中运行的,那么就可以称为是“虚拟的”Web主机,一般简称“虚拟主机”。 1. 构建基于域名的虚拟主机 本实验以实现两个虚拟Web主机www.zou.com和www.pan.com为例,其对应的服务器IP地址为192.168.1.1。构建过程参考如下: 1>.确定服务器的主机名、IP地址等参数。 向域名注册机构申请Web站点的域名,使得所有的用户在访问域名www.zou.com、www.accp.com时,指向的IP地址对应为192.168.1.1. 2>.分别准备两个虚拟站点的网页文件 说明:此处我们为了稍后的测试分别建立了“/usr/local/apache2/htdocs/zoucom/index.html”和“/usr/local/apache2/htdocs/pancom/index.html”两个虚拟站点的默认首页3>.修改httpd.conf文件,添加虚拟主机配置 编辑httpd.conf文件,使用“Name VirtualHost”配置项指定运行虚拟主机的服务器IP地址,并为每一个虚拟站点增加一段“<VirtualHost虚拟主机IP地址>… …</VirtualHost>”区域设置,其中至少包括虚拟主机的域名、网页文档根目录的配置行,其他的设置内容可发参考httpd.conf文件中的全局配置。如果虚拟主机数较多,建议为每一个虚拟主机使用独立的访问日志和错误日志文件。 4>.重新启动httpd服务 5>在客户机浏览器中访问虚拟Web站点 首先要确保客户机能够正确解析这两个虚拟主机的域名,并能够连接到该服务器,如果在实验中没有搭建可用的DNS服务器,也可通过修该客户机的hosts文件来完成域名解析——如果是Linux客户机,则修改“/etc/hosts”文件;如果是windows客户机,则修改“C:\WINDOWS\system32\drivers\hosts”文件,添加相应域名到IP地址的映射记录即可。 在客户端浏览器中分别访问两个虚拟主机站点www.zou.com、www.pan.com,将会看到不同的网页内容 浏览网站www.zou.com所看到的效果: 浏览网站www.pan.com所看到的效果: 2. 构建基于IP地址的虚拟主机 构建基于IP地址的虚拟主机服务器时,与构建基于域名虚拟主机的过程基本类似。只不过中httpd.conf文件中的配置稍微有些区别:不再需要指明“NameVirtualHost”配置行,每个虚拟主机的“<VirtualHost虚拟主机IP地址>… …</VirtualHost>”区域设置中,也要改为各自域名对应的IP地址。 下面以域名www.zou.com对应的IP地址为1.1.1.1,www.pan.com对应的IP地址为2.2.2.2为例,在httpd.conf文件中的设置形式如下图: 3. 构建基于端口的虚拟主机 构建基于端口的虚拟主机服务器时,httpd服务监听的IP地址、端口号需要与各虚拟主机使用的IP地址、端口号相对应,一般也无需指定“NameVirtualHost”配置行。 下面以访问80端口时对应站点www.zou.com,访问8080端口时对应站点www.pan.com为例,在httpd.conf文件中的设置形式如下: 二. 建立系统用户的个人主页 Httpd服务自带的个为主页功能,可以非常方便地为Linux系统用户提供Web站点服务。服务器吕启用该功能参后,每个系统用户只需在宿主目录中的相应位置(默认为public_html子目录)建立网页文件,就可以在浏览器中访问自己的个人主页了。 下面我们以为Linux系统用户zpp建立个人主页为例,讲解在httpd服务器中实现个人主页服务的过程 1. 修改httpd文件,启用个人主页功能 添加“UserDir public_html”配置行,并添加“<Directory“/home/*/public_html”>… …</Directory>”目录区域设置,以便允许客户机访问系统用户的个人网页目录。 2. 建立个人主页测试文件 切换为目标用户zpp,在宿主目录中建立public_html文件夹,并添加测试网页文件。 由于Linux系统对用户宿主目录默认设置了较严格的访问权限,因此还需要为其他用户增加执行权限,以便运行Web服务的程序用户有权限访问用户宿主目录中的public_html子目录。 3. 重启httpd服务 4. 在客户机浏览器中访问个人主页 OK!通过本次对编译安装Apache服务器和httpd服务的基本配置,我们已经对这个神秘的东西有所了解,但这还远远不够,我们的目的是让整个LAMP网站服务平台,健康稳定的运行下去,接下来更精彩!拭目以待吧! 本文出自 “zpp” 博客,请务必保留此出处http://zpp2009.blog.51cto.com/730423/270044 `configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local/apache2] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/apache2/bin', `/usr/local/apache2/lib' etc. You can specify an installation prefix other than `/usr/local/apache2' using `--prefix', for instance `--prefix=$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-layout=LAYOUT --enable-v4-mapped Allow IPv6 sockets to handle IPv4 connections --enable-exception-hook Enable fatal exception hook --enable-maintainer-mode Turn on debugging and compile time warnings --enable-pie Build httpd as a Position Independent Executable --enable-modules=MODULE-LIST Space-separated list of modules to enable | "all" | "most" --enable-mods-shared=MODULE-LIST Space-separated list of shared modules to enable | "all" | "most" --disable-authn-file file-based authentication control --enable-authn-dbm DBM-based authentication control --enable-authn-anon anonymous user authentication control --enable-authn-dbd SQL-based authentication control --disable-authn-default authentication backstopper --enable-authn-alias auth provider alias --disable-authz-host host-based authorization control --disable-authz-groupfile 'require group' authorization control --disable-authz-user 'require user' authorization control --enable-authz-dbm DBM-based authorization control --enable-authz-owner 'require file-owner' authorization control --enable-authnz-ldap LDAP based authentication --disable-authz-default authorization control backstopper --disable-auth-basic basic authentication --enable-auth-digest RFC2617 Digest authentication --enable-isapi isapi extension support --enable-file-cache File cache --enable-cache dynamic file caching --enable-disk-cache disk caching module --enable-mem-cache memory caching module --enable-dbd Apache DBD Framework --enable-bucketeer buckets manipulation filter --enable-dumpio I/O dump filter --enable-echo ECHO server --enable-example example and demo module --enable-case-filter example uppercase conversion filter --enable-case-filter-in example uppercase conversion input filter --enable-ext-filter external filter module --disable-include Server Side Includes --disable-filter Smart Filtering --enable-substitute response content rewrite-like filtering --disable-charset-lite character set translation --enable-charset-lite character set translation --enable-deflate Deflate transfer encoding support --enable-ldap LDAP caching and connection pooling services --disable-log-config logging configuration --enable-log-forensic forensic logging --enable-logio input and output logging --disable-env clearing/setting of ENV vars --enable-mime-magic automagically determining MIME type --enable-cern-meta CERN-type meta files --enable-expires Expires header control --enable-headers HTTP header control --enable-ident RFC 1413 identity check --enable-usertrack user-session tracking --enable-unique-id per-request unique ids --disable-setenvif basing ENV vars on headers --enable-version determining httpd version in config files --enable-proxy Apache proxy module --enable-proxy-connect Apache proxy CONNECT module --enable-proxy-ftp Apache proxy FTP module --enable-proxy-http Apache proxy HTTP module --enable-proxy-ajp Apache proxy AJP module --enable-proxy-balancer Apache proxy BALANCER module --enable-ssl SSL/TLS support (mod_ssl) --enable-distcache Select distcache support in mod_ssl --enable-optional-hook-export example optional hook exporter --enable-optional-hook-import example optional hook importer --enable-optional-fn-import example optional function importer --enable-optional-fn-export example optional function exporter --enable-static-support Build a statically linked version of the support binaries --enable-static-htpasswd Build a statically linked version of htpasswd --enable-static-htdigest Build a statically linked version of htdigest --enable-static-rotatelogs Build a statically linked version of rotatelogs --enable-static-logresolve Build a statically linked version of logresolve --enable-static-htdbm Build a statically linked version of htdbm --enable-static-ab Build a statically linked version of ab --enable-static-checkgid Build a statically linked version of checkgid --enable-static-htcacheclean Build a statically linked version of htcacheclean --enable-static-httxt2dbm Build a statically linked version of httxt2dbm --enable-http HTTP protocol handling --disable-mime mapping of file-extension to MIME --enable-dav WebDAV protocol handling --disable-status process/thread monitoring --disable-autoindex directory listing --disable-asis as-is filetypes --enable-info server information --enable-suexec set uid and gid for spawned processes --disable-cgid CGI scripts --enable-cgi CGI scripts --disable-cgi CGI scripts --enable-cgid CGI scripts --enable-dav-fs DAV provider for the filesystem --enable-dav-lock DAV provider for generic locking --enable-vhost-alias mass virtual hosting module --disable-negotiation content negotiation --disable-dir directory request handling --enable-imagemap server-side imagemaps --disable-actions Action triggering on requests --enable-speling correct common URL misspellings --disable-userdir mapping of requests to user-specific directories --disable-alias mapping of requests to different filesystem parts --enable-rewrite rule based URL manipulation --enable-so DSO capability Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-included-apr Use bundled copies of APR/APR-Util --with-apr=PATH prefix for installed APR or the full path to apr-config --with-apr-util=PATH prefix for installed APU or the full path to apu-config --with-pcre=PATH Use external PCRE library --with-port=PORT Port on which to listen (default is 80) --with-sslport=SSLPORT Port on which to securelisten (default is 443) --with-z=DIR use a specific zlib library --with-sslc=DIR RSA SSL-C SSL/TLS toolkit --with-ssl=DIR OpenSSL SSL/TLS toolkit --with-mpm=MPM Choose the process model for Apache to use. MPM={beos|event|worker|prefork|mpmt_os2} --with-module=module-type:module-file Enable module-file in the modules/ |
2010年10月10日日曜日
Linux推荐-Red Hat5平台下的LAMP网站服务搭建(一)apache configure
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿