您的位置:首页 > 运维架构 > Apache

Apache静态编译与动态编译详解

2016-07-14 01:45 489 查看
Apache拥有4层结构,从核心到外层的module。而外层的module可以用通过静态和动态两种方式与Apache共同工作。这也就引入下文的“动态”和“静态”两种编译安装方式:

静态编译:

编译的时候,所有的模块自己编译进 httpd 这个文件中 ,启动Apache的时候这些模块就已经加载进来了,可以直接来使用,而不用再 httpd.conf 中在 LoadModule 来加载,只要在 <ifmodule></ifmodule> 中来配置就可以了。

动态编译:

编译的时候,使用enable-MODULE=shared 或者enable-mods-shared=MODULE来动态编译。 动态显然就不编译到httpd里面去了,启动的时候根本不会加载这个模块, 而是给你一个module.so 文件。你想用,就在httpd.conf中使用 loadmodule 这个语法来加载,这个模块才有效。

区别是:

静态的模块通常在http.conf中用<ifmodule></ifmodule> 来配置,动态的要先loadmoule来加载,然后再<ifmodule></ifmodule>配置。

官方说静态的比动态的在性能方面多5%左右。

相对来说,静态的效率高些,而动态方式配置方面灵活。想想如果编译进去的C这个module你想升级或者去掉,静态方式的就只能重新编译Apache了。

下面这句在Apache源文件夹下运行,可以查看默认情况下Apache都给你装了那些module进去:

./configure –help | grep disable

让Apache日后可以动态编译和加载模块:

如果想让Apache日后可以支持动态编译(DSO)更多的module,需要在初次安装时把so这个模块编译到核心(即,静态编译)。

如果编译中包含任何DSO模块,则mod_so会被自动包含进核心。如果希望核心以后能够装载DSO,但不实际编译任何DSO模块,则需明确指定:

针对apache1.x: --enable-module=so

针对apache2.x: --enable-so=static

Apache模块的类型:

基本(B)模块默认包含,必须明确禁用;

扩展(E)/实验(X)模块默认不包含,必须明确启用。

那么,针对以上这些类型的模块,有以下几种操作方式:

--disable-MODULE

禁用MODULE模块(仅用于基本模块)

--enable-MODULE=shared

将MODULE编译为DSO(可用于所有模块)

--enable-MODULE=static

将MODULE静态连接进核心(仅用于扩展和实验模块)

--enable-mods-shared=MODULE-LIST

将MODULE-LIST中的所有模块都编译成DSO(可用于所有模块)

--enable-modules=MODULE-LIST

将MODULE-LIST静态连接进核心(可用于所有模块)

针对--enable-modules和--enable-mods-shared有两个懒办法就是 most参数和all参数,分别表示“很多的”和“所有”。

例如:

mod_alias是个基本模块,不想安装的话就: --disable-alias

mod_rewrite是个扩展模块,想动态加载它:--enable-rewrite=shared,想静态加载就是:--enable-rewrite=static

想静态编译mod_alias和mod_rewrite:--enable-modules='alias rewrite'

想动态编译mod_alias和mod_rewrite:--enable-mods-shared='alias rewrite'

针对Apache2.2.x的一些例子:

最大化静态安装Apache:

./configure --prefix=/usr/local/apache --enable-modules=all

最大化动态安装Apache:

./configure --prefix=/usr/local/apache --enable-mods-shared=all

静态安装rewrite、动态安装deflate以及headers

./configure --prefix=/usr/local/apache --enable-rewrite=static --enable-deflate=shared --enable-headers=shared

不安装基本的alais,保留以后的扩展DSO能力:

./configure --prefix=/usr/local/apache --enable-so=static --disable-alias


在Apache的源码目录,运行命令 ./configure -help 可查看所有编译参数解释

[root@localhost ~]# cd /usr/local/src/httpd-2.2.22
[root@localhost httpd-2.2.22]# ./configure -help
`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-reqtimeout     Limit time waiting for request from client
--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
--disable-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-scgi     Apache proxy SCGI 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|winnt}
--with-module=module-type:module-file
Enable module-file in the modules/<module-type>
directory.
--with-program-name     alternate executable name
--with-suexec-bin       Path to suexec binary
--with-suexec-caller    User allowed to call SuExec
--with-suexec-userdir   User subdirectory
--with-suexec-docroot   SuExec root directory
--with-suexec-uidmin    Minimal allowed UID
--with-suexec-gidmin    Minimal allowed GID
--with-suexec-logfile   Set the logfile
--with-suexec-safepath  Set the safepath
--with-suexec-umask     umask for suexec'd process

Some influential environment variables:
CC          C compiler command
CFLAGS      C compiler flags
LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS        libraries to pass to the linker, e.g. -l<library>
CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP         C preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to the package provider.
[root@localhost httpd-2.2.22]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: