• 【高可用HA】Apache (1) —— Mac下安装Apache Httpd到自定义路径(非/etc/apache2)


    Mac下安装Apache Httpd


    httpd版本: httpd-2.4.17

    参考来源:

    Tomcat Clustering - A Step By Step Guide

    Apache HTTP Server Version 2.4 - Compiling and Installing

    Stackoverflow - configure: error: C compiler cannot create executables

    Problems with compiling apache2 on Mac OS X Mountain Lion

    安装

    Download	$ lynx http://httpd.apache.org/download.cgi
    Extract		$ gzip -d httpd-NN.tar.gz
    $ tar xvf httpd-NN.tar
    $ cd httpd-NN
    Configure	$ ./configure --prefix=PREFIX
    Compile		$ make
    Install		$ make install
    Customize	$ vi PREFIX/conf/httpd.conf
    Test		$ PREFIX/bin/apachectl -k start
    

    运行错误

    C compiler cannot create executables
    $ sudo ./configure --prefix=/httpd-2.4.17-a
    checking for chosen layout... Apache
    checking for working mkdir -p... yes
    checking for grep that handles long lines and -e... /usr/bin/grep
    checking for egrep... /usr/bin/grep -E
    checking build system type... x86_64-apple-darwin14.4.0
    checking host system type... x86_64-apple-darwin14.4.0
    checking target system type... x86_64-apple-darwin14.4.0
    configure: 
    configure: Configuring Apache Portable Runtime library...
    configure: 
    	checking for APR... yes
    	setting CC to "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc"
    	setting CPP to "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc -E"
    	setting CFLAGS to " "
    	setting CPPFLAGS to " -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -DDARWIN_10"
    	setting LDFLAGS to " "
    configure: 
    configure: Configuring Apache Portable Runtime Utility library...
    configure: 
    	checking for APR-util... yes
    	checking for gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc
    	checking whether the C compiler works... no
    configure: error: in `/Users/Richard/Documents/Dev/servers/cluster/httpd/httpd-2.4.17-a':
    configure: error: C compiler cannot create executables
    See `config.log' for more details
    

    一个可行的解决办法

    依次在Terminal中执行下面三行命令:

    $ sudo xcode-select -switch /
    

    .

    sudo mkdir -p /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin
    

    .

    sudo ln -s /usr/bin/cc /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc
    

    注意上面OSX10.10的版本号与本机操作系统的保持一致,可以在上面错误日志中找到

    编译与安装

    $ make
    

    .

    $ make install
    

    当运行make时,Mac会提示错误

    make: command not found
    

    这是因为Mac下默认没有安装make,可以通过打开xcode,preferences -> Downloads -> Components,Command Line Tools安装

    (Xcode5.1后不再支持通过此方式安装,需要访问Downloads for Apple Developers选择正确版本安装)

    再运行make是,Mac会提示错误

    make: *** No targets specified and no makefile found.  Stop.
    

    查看之前的./configure 执行的log发现最后执行出错"libpcre not found"

    checking whether /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc accepts -g... yes
    checking for /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc option to accept ISO C89... none needed
    checking how to run the C preprocessor... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc -E
    checking for /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc option to accept ISO C99... none needed
    checking for pcre-config... false
    configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
    

    pcre的编译安装

    $ tar -zxvf pcre-8.10.tar.gz
    $ cd pcre-8.10
    $ ./configure
    $ make 
    $ make install
    
    注意:此处要安装pcre,pcre2不适用

    安装成功之后,在httpd目录下重新运行./configure(配置httpd到自定义目录)

    $ ./configure --prefix=/Users/Richard/Documents/Dev/servers/cluster/httpd/node-a
    

    执行结果末尾几行的输出:

    config.status: creating support/split-logfile
    config.status: creating build/rules.mk
    config.status: creating build/pkg/pkginfo
    config.status: creating build/config_vars.sh
    config.status: creating include/ap_config_auto.h
    config.status: executing default commands	
    

    运行

    $ make
    

    执行结果末尾几行输出:

    /usr/share/apr-1/build-1/libtool --silent --mode=link /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc             -o mod_rewrite.la -rpath /Documents/Dev/servers/cluster/httpd/httpd-2.4.17-b/modules -module -avoid-version  mod_rewrite.lo 
    

    关于make可能也会输出以下信息(可以暂时忽略,稍后再关注此问题)

    Building shared: mod_status.la mod_autoindex.la mod_info.la mod_cgid.la
    make[4]: Nothing to be done for `local-shared-build'.
    Building shared: mod_dav_fs.la
    make[4]: Nothing to be done for `local-shared-build'.
    Building shared: mod_vhost_alias.la mod_negotiation.la mod_dir.la mod_actions.la mod_speling.la mod_userdir.la mod_alias.la mod_rewrite.la
    make[4]: Nothing to be done for `local-shared-build'.	
    

    运行(sudo)

    $ make install
    

    执行结果末尾几行输出:

    Installing man pages and online manual
    mkdir /Documents/Dev/servers/cluster/httpd/httpd-2.4.17-b/man
    mkdir /Documents/Dev/servers/cluster/httpd/httpd-2.4.17-b/man/man1
    mkdir /Documents/Dev/servers/cluster/httpd/httpd-2.4.17-b/man/man8
    mkdir /Documents/Dev/servers/cluster/httpd/httpd-2.4.17-b/manual
    
    *查看端口占用
    lsof -n -i TCP:80
    

    测试

    编译成功后,我们可以在编译的目标目录(此处为./cluster/httpd/node-a)下找到:

    $ ls
    httpd-2.4.17	node-a
    $ cd node-a
    $ ls
    bin	build	cgi-bin	conf	error	htdocs	icons	include	logs	man	manual	modules
    

    先使用默认的httpd.conf配置,在/bin下执行

    apachectl -k start
    

    运行结果中会提示两个错误AH00558和AH00072

    $ apachectl -k start
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using weizhedeMacBook-Pro.local. Set the 'ServerName' directive globally to suppress this message
    (13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
    (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
    no listening sockets available, shutting down
    AH00015: Unable to open logs
    

    修改./cluster/httpd/node-a/conf/httpd.conf,加入配置ServerName

    #ServerName www.example.com:80
    ServerName localhost
    

    然后再运行相同命令,仍然报相同错误。

    如果对etc/apache2/conf/httpd.conf进行修改,再运行相同命令,发现AH00558错误解决,但AH00072错误仍然存在。

    此处怀疑命令的权限不够

    Apache error – (13)Permission denied: make_sock: could not bind to address,可以通过sudo运行,或者修改Apache的权限。此处暂时使用sudo

    $ sudo apachectl -k start
    

    然后AH00072错误没有了,用浏览器尝试访问localhost

    此处怀疑当前运行的apachectl命令仍然使用Mac默认路径etc/apache2下的apache

    为了验证这个想法,我们查看etc/apache2/conf/httpd.conf文件发现其DocumentRoot为:

    DocumentRoot "/Library/WebServer/Documents"
    <Directory "/Library/WebServer/Documents">
    

    我们在该路径下(Command+Shift+G),找到文件index.html.en并修改

    <html><body><h1>It works! Apache2 Default</h1></body></html>
    

    然后通过浏览器重新访问localhost得到运行结果

    问题来了

    如何才能运行我们自定义目录下的httpd呢?

    因为默认情况下,运行apachectl或者httpd命令会指向系统自带的etc/apache2目录。

    如果要运行我们自行安装的./node-a/httpd实例

    $ ./bin/httpd -k start
    

    默认情况下命令回去尝试寻找"/Documents/Dev/servers/cluster/httpd/node-a/conf/httpd.conf",而出错(为什么待解)

    httpd: Could not open configuration file /Documents/Dev/servers/cluster/httpd/node-a/conf/httpd.conf: No such file or directory
    

    我们用"-f"指定conf文件

    $ ./bin/httpd -f /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/conf/httpd.conf -k start
    

    这时可能会遇到错误

    [Tue Dec 08 14:20:58.432961 2015] [core:error] [pid 18447:tid 4381061120] (13)Permission denied: [client ::1:50428] AH00035: access to / denied (filesystem path '/Users/Richard/Documents/Dev') because search permissions are missing on a component of the path
    [Tue Dec 08 14:20:58.601201 2015] [core:error] [pid 18447:tid 4381061120] (13)Permission denied: [client ::1:50428] AH00035: access to /favicon.ico denied (filesystem path '/Users/Richard/Documents/Dev') because search permissions are missing on a component of the path, referer: http://localhost:81/
    

    可以通过Httpd Wiki上的说明,

    • AH00132: file permissions deny server access
    • AH00035: access denied because search permissions are missing on a component of the path

    查看"./node-a/htdocs/index.html"的授权

    ls -l index.html
    

    如果需要可以通过以下命令修正

    chmod 644 index.html	
    

    最后我们修改"./node-a/htdocs/index.html"的内容

    <html><body><h1>It works! Node-a</h1></body></html>
    

    然后通过浏览器访问localhost:81

    这样一个自定义路径的httpd实例就安装测试成功了

  • 相关阅读:
    2020.10.25【NOIP提高A组】模拟 总结
    6831. 2020.10.24【NOIP提高A组】T1.lover
    枚举一个数$n$的所有质因子
    gmoj 6832. 2020.10.24【NOIP提高A组】T2.world
    2020.10.24【NOIP提高A组】模拟 总结
    2020.10.17【NOIP提高A组】模拟 总结
    jQuery EasyUI Portal 保存拖动位置,仿谷歌DashBoard效果的
    SQLMAP注入教程-11种常见SQLMAP使用方法详解
    Windows下sqlmap的安装图解
    swap file "*.swp" already exists!的解决方法
  • 原文地址:https://www.cnblogs.com/richaaaard/p/5029212.html
Copyright © 2020-2023  润新知