Mic*_*żko 2 apache macos apache2 apache2.4 macos-sierra
我在中定义了所有配置文件和虚拟主机/etc/apache2/
。
但是,当我运行时,apachectl -V
我得到以下输出:
Server version: Apache/2.4.26 (Unix)
Server built: Jul 8 2017 19:15:17
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.6.2, APR-UTIL 1.6.0
Compiled using: APR 1.6.2, APR-UTIL 1.6.0
Architecture: 64-bit
Server MPM: prefork
threaded: no
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/Cellar/httpd24/2.4.26"
-D SUEXEC_BIN="/usr/local/Cellar/httpd24/2.4.26/bin/suexec"
-D DEFAULT_PIDLOG="/usr/local/var/run/apache2/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/usr/local/etc/apache2/2.4/mime.types"
-D SERVER_CONFIG_FILE="/usr/local/etc/apache2/2.4/httpd.conf"
Run Code Online (Sandbox Code Playgroud)
显然,这是使用其他我不知道的apache2配置文件。如何强制apache2使用正确的配置文件?
小智 7
您可能已经在计算机上安装了apache,然后安装了另一个版本。在这种情况下,您可能有多个apachectl二进制文件。不同的apachectl二进制文件将被编译为与不同的配置文件一起使用。
做:
find /usr -name apachectl
Run Code Online (Sandbox Code Playgroud)
这将在/ usr目录中找到名称为apachectl的所有内容。我的输出是:
/usr/local/bin/apachectl
/usr/local/Cellar/httpd/2.4.27/bin/apachectl
/usr/sbin/apachectl
Run Code Online (Sandbox Code Playgroud)
现在,使用-V查看每个可执行文件的信息,直到找到使用所需配置文件编译的版本:
/usr/sbin/apachectl -V
Run Code Online (Sandbox Code Playgroud)
出:
...
...
...
-D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"
Run Code Online (Sandbox Code Playgroud)
现在我们知道您要优先哪个。这就是您设置优先级的方式。
即使有多个具有相同名称的二进制文件,当您在终端上键入“ apachectl”时,也没有“奋斗”来确定执行哪个二进制文件,因为优先级由以下各项确定:
您有几种选择:
A)(不推荐)您可以更改/ etc / paths文件以反映您希望apachectl的一个版本优先于另一个版本
paths文件用于整个文件层次结构的一般优先级。您会说:“通常,当有多个同名二进制文件时,请首先在此目录层次结构中执行一个。”。因此,该文件非常简单,只是目录的排序。我的看起来像这样:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Run Code Online (Sandbox Code Playgroud)
我不会更改路径文件,因为这有点像通过撕掉整个指甲来摆脱指甲。
B)您可以通过在终端中键入以下内容来更改优先级(对于单个终端会话):
export PATH="/usr/sbin/apachectl:$PATH"
Run Code Online (Sandbox Code Playgroud)
这将导出一个带有/ usr / sbin / apachectl的新PATH变量,该变量位于$ PATH中已经存在的所有其他变量之前。这会将可执行文件的路径放在该路径的开头,从而使其优先于所有其他可能的可执行文件。因此,当系统从终端获得对apachectl二进制文件的调用时,它会检查路径,并在遇到指向可执行文件的直接路径时停止检查,这是Path中的第一件事。这不会超出一个会话。因此,如果关闭终端,则PATH将恢复为原来的状态。
C)您可以通过将先前的导出命令添加到您的〜/ .bashrc文件(或在Mac上为〜/ .bash_profile)中,使此设置永久生效:
export PATH="/usr/sbin/apachectl:$PATH"
Run Code Online (Sandbox Code Playgroud)
将其保存在.bashrc文件中将使该语句在每次开始新会话时都执行,因为那是在读取配置文件时。
如果您的配置文件中有另一行故意给出其他版本的apachectl优先级,则可以将其删除,或者只是确保在文件中紧随其后的是export ...行。
D)您可以创建一个别名,以直接引用此可执行文件。
别名是一个单词,您可以用来引用位于特定位置的可执行文件。每次键入别名时,都将在该确切位置引用该确切的可执行文件。我建议首先进行以下操作:
alias apachectl_a1='/usr/sbin/apachectl'
Run Code Online (Sandbox Code Playgroud)
这也需要放在您的〜/ .bashrc文件中(在Mac上为〜/ .bash_profile),以保持单个会话结束。
归档时间: |
|
查看次数: |
1522 次 |
最近记录: |