现在的位置: 首页 > 综合 > 正文

Apache学习笔记(三)Apache服务器的基本配置和维护

2017年11月28日 ⁄ 综合 ⁄ 共 13652字 ⁄ 字号 评论关闭

一、查看apache的相关信息

1、查看apache软件的版本信息:apachectl -V

[root@apache bin]# /usr/local/apache2/bin/apachectl -V
Server version: Apache/2.4.7 (Unix)
Server built: Mar 16 2014 21:09:47
Server's Module Magic Number: 20120211:27
Server loaded: APR 1.4.5, APR-UTIL 1.5.3
Compiled using: APR 1.4.5, APR-UTIL 1.5.3
Architecture: 32-bit ---->版本信息
Server MPM: worker
  threaded: yes (fixed thread count)
    forked: yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/apache2"
 -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
apachectl -v
[root@apache bin]# /usr/local/apache2/bin/apachectl -v
Server version: Apache/2.4.7 (Unix)
Server built: Mar 16 2014 21:09:47

2、查看已经被编译的模块:apachectl -l

[root@apache bin]# /usr/local/apache2/bin/apachectl -l
Compiled in modules: ----已经安装的模块
  core.c
  mod_so.c
  http_core.c
  worker.c

3、使用apachectl程序控制apache

[root@apache bin]# /usr/local/apache2/bin/apachectl -h
Usage: /usr/local/apache2/bin/httpd [-D name] [-d directory] [-f file]
                                    [-C "directive"] [-c "directive"]
                                    [-k start|restart|graceful|graceful-stop|stop]
                                    [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
  -D name : define a name for use in <IfDefine name> directives
  -d directory : specify an alternate initial ServerRoot
  -f file : specify an alternate ServerConfigFile
  -C "directive" : process directive before reading config files
  -c "directive" : process directive after reading config files
  -e level : show startup errors of level (see LogLevel)
  -E file : log startup errors to file
  -v : show version number
  -V : show compile settings
  -h : list available command line options (this page)
  -l : list compiled in modules
  -L : list available configuration directives
  -t -D DUMP_VHOSTS : show parsed vhost settings
  -t -D DUMP_RUN_CFG : show parsed run settings
  -S : a synonym for -t -D DUMP_VHOSTS -D DUMP_RUN_CFG
  -t -D DUMP_MODULES : show all loaded modules
  -M : a synonym for -t -D DUMP_MODULES
  -t : run syntax check for config files
  -T : start without DocumentRoot(s) check
  -X : debug mode (only one worker, do not detach)

      apachectl程序是apache服务器自带的一个脚本程序,被存放在配置文件httpd.conf指定的ServerRoot目录下的bin目录下,它是用于帮助管理员控制apache的后台程序httpd的工具。可以使用它来完成启动、停止、测试配置文件等工作。
补充说明:apachectl是slackware内附Apache HTTP服务器的script文件,可供管理员控制服务器,但在其他Linux的Apache HTTP服务器不一定有这个文件。

apachectl程序的参数如下:
(1)start:首先检查httpd的配置文件,如果没有问题,则启动httpd程序,如果已经启动了httpd,则会显示出错信息;
(2)stop:用于停止httpd程序,同样,如果已经停止了httpd,则会显示出错信息;
(3)restart:重启启动httpd,如果httpd没有启动则启动它。同样会在启动前检查httpd的配置文件;
(4)graceful:和start参数一样,区别在于它不会中断当前正在处理的连接,也不会关闭日志。推荐使用;
(5)graceful-stop:和stop参数一样,区别在于它不会中断当前正在处理的连接,也不会关闭日志。推荐使用;
(6)configtest:解析并检查配置文件语法。如果没有问题则报告Syntax OK,如果检查没有通过则显示出语法错误或者是其他详细信息;
(7)status:显示简要的状态报告,类似于fullstatus选项,区别在于省略了正在处理的请求;
(8)fullstatus:显示出由mod_status提供的状态报告,使用此功能需要启动mod_ststus模块,并且安装lynx浏览器。
(9)help:显示帮助信息;
(10)startssl、sshstart、start-SSL:此三项仅仅在早起版本中使用,现在已经废弃了,其作用主要是以SSL方式启动httpd。

二、httpd命令行参数

httpd是apache的主程序,由它来实现apache的所有功能,通过参数可以很好控制它。
(1)-D name:通过指定<IfDefine>容器的名称来确实是否使用<IfDefine>容器的内容。
(2)-d directory:指定一个新的ServerRoot目录。例如:
/usr/local/apache2/bin/httpd -C /home/lee
(3)-f file:使用指定的文件作为apache的配置文件。例如:
/usr/local/apache2/bin/httpd -f /usr/local/apache2/conf/httpd.conf
(4)-C "directive":在读取配置文件之前,先处理directive的配置。例如:
/usr/local/apache2/bin/httpd -C "DocumentHome" /home/lee
(5)-c "directive":在读取配置文件之后,再处理directive的配置。例如:
/usr/local/apache2/bin/httpd -c "DocumentHome" /home/lee
(6)-e level:设置LogLevel为level。临时增加出错信息的周详程度,以帮助排错。例如:
/usr/local/apache2/bin/httpd -e warn
(7)-E file:将出错信息送入到一个指定的文件中。例如:
/usr/local/apache2/bin/httpd -E /home/lee/log
(8)-v:显示版本信息及编译时间。例如:
[root@apache bin]# /usr/local/apache2/bin/httpd -v
Server version: Apache/2.4.7 (Unix)
Server built: Mar 16 2014 21:09:47
(9)-V:显示httpd的版本信息以及编译时的参数。例如:
(10)-h:显示命令行的帮助。
(11)-l:列出编译到的Apache中的模块。例如:
(12)-L:列出可以用到的指令的有效参数和使用区域。例如:
(13)-t -D DUMP_VHOSTS:分析配置文件(现在只用于虚拟主机的配置中)。
(14)-S:同-t -D DUMP_VHOSTS
(15)-t -D DUMP_MODULES:显示所有可供加载的模块。例如:

[root@apache ~]# /usr/local/apache2/bin/httpd -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_worker_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
 userdir_module (shared)

(16)-M:同-t -D DUMP_MODULES
(17)-t:测试配置文件。

三、httpd.conf配置文件

    httpd.conf是apache的配置文件,apache中的常见配置主要都是通过修改该文件来实现的,该文件更改后需要重启apache服务使更改的配置生效。
     httpd.conf配置文件的默认内容如下:

[root@apache conf]# cat httpd.conf
ServerRoot "/usr/local/apache2"

Listen 80

LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_socache_module modules/mod_authn_socache.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_dbd_module modules/mod_authz_dbd.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_form_module modules/mod_auth_form.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule allowmethods_module modules/mod_allowmethods.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule cache_disk_module modules/mod_cache_disk.so
#LoadModule cache_socache_module modules/mod_cache_socache.so
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule socache_dbm_module modules/mod_socache_dbm.so
#LoadModule socache_memcache_module modules/mod_socache_memcache.so
#LoadModule macro_module modules/mod_macro.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule buffer_module modules/mod_buffer.so
#LoadModule ratelimit_module modules/mod_ratelimit.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule request_module modules/mod_request.so
#LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule sed_module modules/mod_sed.so
#LoadModule deflate_module modules/mod_deflate.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_debug_module modules/mod_log_debug.so
#LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
#LoadModule remoteip_module modules/mod_remoteip.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_express_module modules/mod_proxy_express.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_dbd_module modules/mod_session_dbd.so
#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule unixd_module modules/mod_unixd.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule cgid_module modules/mod_cgid.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
#LoadModule rewrite_module modules/mod_rewrite.so

<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

ServerAdmin you@example.com

ServerName localhost:80

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" common
</IfModule>
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
<IfModule cgid_module>

</IfModule>

<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
<IfModule mime_module>

    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

(一)与apache网络和系统相关的选项如下:

ServerRoot "/usr/local/apache2" #使用ServerRoot参数设置apache安装目录
Listen 80 #使用Listen参数设置apache监听端口
<IfModule unixd_module>
User daemon #使用User参数设置apache进程的执行者
Group daemon #使用Group参数设置apache进程执行者所属的用户组
</IfModule>
ServerAdmin you@example.com#使用ServerAdmin参数设置网站管理员的邮箱地址

(二)与Apache文件和目录权限相关的选项如下:

#使用DocumentRoot参数设置网站根目录
DocumentRoot "/usr/local/apache2/htdocs"
#使用Directory段设置根目录权限
<Directory />
    AllowOverride none
    Require all denied
</Directory>
#使用Directory段设置/usr/local/apache2/htdocs目录权限
<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
#设置首页为index.html
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
#.ht后缀文件的访问权限控制
<Files ".ht*">
    Require all denied
</Files>

(三)与Apache日志相关的选项如下所示:

#使用ErrorLog参数设置错误日志的位置
ErrorLog "logs/error_log"
#使用LogLevel参数设置错误日志的级别
LogLevel warn
<IfModule log_config_module>
#使用LogFormat参数设置访问日志的格式模板
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
#使用CustomLog参数设置访问日志的位置和格式
    CustomLog "logs/access_log" common
</IfModule>
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
#使用Directory段设置/usr/local/apache2/cgi-bin目录权限
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
#mime模块的相关设置
<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
#ssl模块的相关设置
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

对一些httpd.conf配置文件中一些常用配置选项进行解释:
1、ServerRoot参数
ServerRoot指令用于定义服务器所在的目录,这个路径通常是在编译过程中由“-prefix=ServerRoot”选项来指定的,它作为apache的根目录会包含bin、conf、htdocs等文件夹。如果使用二进制包来安装,那么这个ServerRoot通常位于/etc/apache2目录下,例如:

ServerRoot /etc/apache2

也可以在启动apache时使用-d参数来指定一个ServerRoot的位置,不过通常只是用来测试同一个版本的apache在多个环境下的配置,因此在生产环境中不推荐使用这样的方法来启动apache。

2、Listen参数
用来定义apache的监听端口号,默认是80,端口号的范围是0~65535,但0~1024都是为系统服务所保留的,所以不推荐使用。

Listen:80

如果使用了除80外的其他端口,那么客户端就需要在访问服务器时加上端口号。

3、User和Group参数
用于定义运行apache服务器的账号和工作组,它用来定义用户请求时所创建的子进程的账号与工作组,并在所定义的账号与工作组的权利范围内工作。

User daemon
Group daemon

在Apache启动后可以使用如下命令来查看apache是否使用了daemon来启动子进程。如下:

[root@apache conf]# ps -ef | grep httpd
root 3478 1 0 Mar17 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 3481 3478 0 Mar17 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 3482 3478 0 Mar17 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 3484 3478 0 Mar17 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
root 3836 3778 0 00:35 pts/1 00:00:00 grep httpd

注意:
上述列表中有一个httpd的进程的权限是root,这个是apache的主进程。这个进程不响应任何请求,它只是负责通过建立子进程来响应用户请求。

4、ServerAdmin参数
ServerAdmin用于定义当服务器出现错误后提示给客户端的管理员邮件地址。

ServerAdmin lee@mail.com

5、DocumentRoot参数
DocumentRoot用于指定apache所提供页面服务的根目录,这个目录包含了apache所收到的URL请求的根(/)目录。

DocumentRoot /srv/www/httpd/

此路径需要使用绝对路径来表示,而不能使用相对路径。如果路径中有空格,那么必须使用引号将它括起来。

6、ErrorLog参数
该参数用于指定记录Apache运行过程中所产生的错误信息的日志文件位置。参数格式如下:
ErrorLog [文件的绝对或者相对路径]

7、LogLevel参数
该参数用于指定LogLevel文件中记录的错误信息的级别,设置不同的级别,输出日志信息的详细程度也会有所变化,参数值设置越往右边,则错误的输出信息越简单,建议值为warn。参数格式如下所示:

LogLevel [debug/info/notice/warn/error/crit/alert/emerg]

四、配置文件的修改

修改配置文件后需要重启Apache服务才能使更改生效。在进行配置文件httpd.conf修改后,为方便用户验证httpd.conf配置文件中的参数是否配置正确,可以使用如下的命令进行测试:

apachectl -configtest

如果配置文件没有错误,则返回Syntax OK。
如果配置文件出现错误,则会返回如下类似的错误:

Syntax error on line XXXXXXXX
具体的出错信息


抱歉!评论已关闭.