Biến cấu hình Apache2 không được xác định


65

Tôi đã cài đặt apache2 trên Ubuntu 13.10. Nếu tôi cố gắng khởi động lại nó bằng cách sử dụng

sudo /etc/init.d/apache2 restart

Tôi nhận được tin nhắn này:

AH00558: apache2: Không thể xác định một cách đáng tin cậy tên miền đủ điều kiện của máy chủ, sử dụng 127.0.1.1. Đặt chỉ thị 'ServerName' trên toàn cầu để chặn thông báo này

Vì vậy, tôi đọc rằng tôi nên chỉnh sửa httpd.conftập tin của tôi . Nhưng, vì tôi không thể tìm thấy nó trong /etc/apache2/thư mục, tôi đã cố gắng xác định vị trí của nó bằng lệnh này:

/usr/sbin/apache2 -V

Nhưng đầu ra tôi nhận được là thế này:

[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Fri Nov 29 17:35:43.942560 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Fri Nov 29 17:35:43.942602 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Fri Nov 29 17:35:43.942613 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Fri Nov 29 17:35:43.942627 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.947913 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948051 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948075 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined

AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

Dòng 74 /etc/apache2/apache2.conflà đây:

Mutex file:${APACHE_LOCK_DIR} default

Tôi đã xem xét /etc/apache2/envvarhồ sơ của mình , nhưng tôi không biết phải làm gì với nó.

Tôi nên làm gì?


Có gì trong tập tin envvars của bạn?
etagenklo

Câu trả lời:


60
[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined

Thông báo này được hiển thị vì bạn trực tiếp thực hiện nhị phân apache2. Trong Ubuntu / Debian, cấu hình apache dựa trên tệp envvar chỉ được kích hoạt.

Nếu bạn bắt đầu apache với init script hoặc apachectl.

Vấn đề ban đầu của bạn là bạn không có tên máy chủ (fqdn) thích hợp cho máy của mình.

Nếu bạn không thể thay đổi nó, hãy thay đổi ServerNamebiến /etc/apache2/apache2.confthành localhosthoặc FQDN ưa thích của bạn.


1
Bạn nói đúng về tập lệnh init. Sau đó, tôi đã thêm ServerName localhostvào apache2.conf(vì httpd.confkhông phải lúc nào cũng được sử dụng trên Ubuntu) và bây giờ mọi thứ hoạt động như bình thường. Bạn có thể vui lòng thêm chi tiết vào câu trả lời của bạn để tôi có thể gắn cờ nó như được chấp nhận không?
Kurt Bourbaki

1
bắt đầu với apache2ctlviệc không làm việc cho tôi, tôi đã phải sử dụng dịch vụ :sudo service apache2 restart
Édouard Lopez

Nhưng tại sao họ lại phá apache2lệnh ngay từ đầu?
rebierpost

2
Giải pháp này chỉ giải quyết được AH00558: apache2: Could not reliably determine the server's fully qualified domain namenhưng không giải quyết được Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac

Đối với tôi cũng tôi thấy vấn đề tương tự.
Ấn Độwebdevil

84

Nguồn envvars của bạn bằng cách chạy nó như thế này:

source /etc/apache2/envvars

và sau đó

/usr/sbin/apache2 -V

Bạn sẽ nhận được:

el@apollo:/home/el$ apache2 -V
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Apr  3 2014 12:20:28
Server's Module Magic Number: 20120211:27
Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
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="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

/etc/apache2/envvarskhông tồn tại
Mark Richman

6
Tệp tồn tại trên hệ thống Ubuntu của tôi, nhưng trình bao không nhận ra nó là tập lệnh shell, vì vậy tôi cần điều này: source / etc / apache2 / envvars; apache2 -V
Ben Crowell

6
Chỉ có thể sử dụng apachectl -Vthay vì tải trong các biến môi trường bằng tay.
Sam Sehnert

Nếu vẫn không hoạt động, hãy thử source /etc/apache2/envvars && sudo -E apache2 -Vhoặc đăng nhập như rootvà làm theo câu trả lời ở trên. Cung cấp apache2 env cho một người dùng thông thường, những người sau đó cần sử dụng sudo sẽ không hoạt động với "-E". Perms người dùng thông thường không thể đọc thư mục riêng chứng chỉ trong số các vấn đề khác. Bạn sẽ nhận được một lỗi. Bạn cần sudo -E hoặc chạy hoàn toàn dưới tài khoản root.
bshea

Điều này rất hữu ích để chạy Apache dưới dạng docker fordround cmd. Ví dụ:CMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack

7

Kiểm tra /etc/apache2/envvarsAPACHE_LOCK_DIR của bạn . Trong Ubuntu 12.04 của tôi, đây là /var/lock/apache2$SUFFIX, SUFFIX thường trống.

Kiểm tra nếu thư mục tồn tại và có thể ghi.

Có thể là tập tin envvars không có nguồn gốc chính xác? Nếu bạn có một cái nhìn vào /etc/init.d/apache2bạn có thể thấy rằng nó có nguồn gốc.

Của tôi (mặc định) /etc/apache2/envvars:

# envvars - default environment variables for apache2ctl

# this won't be correct after changing uid
unset HOME

# for supporting multiple apache2 instances
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
    SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
    SUFFIX=
fi

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

## The command to get the status for 'apache2ctl status'.
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
#export APACHE_LYNX='www-browser -dump'

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

Nếu không có gì hoạt động tôi sẽ cố gắng cài đặt lại (các) gói.


2

Như đã nói, bạn phải tải (nguồn) môi trường của mình trước khi chạy trực tiếp. Tùy chọn khác là sử dụng: apache2ctlvd

sudo apache2ctl -S

để đổ máy chủ của tôi


2

TL; DR; Bạn nên bắt đầu apache2 bằng cách sử dụng những gì bạn đã có:

sudo /etc/init.d/apache2 {start|stop|restart}

Chi tiết:

AH00558: apache2: Không thể xác định một cách đáng tin cậy tên miền đủ điều kiện của máy chủ, sử dụng 127.0.1.1. Đặt chỉ thị 'ServerName' trên toàn cầu để chặn thông báo này

Thông báo này có nghĩa là bạn cần xác định tên máy chủ / tên miền của bạn. Không cần thiết phải làm điều đó cho localhost / thử nghiệm sản xuất, bạn không cần phải lo lắng về điều đó.

Khi bạn cố chạy nó theo cách khác, chỉ sử dụng apache2, bạn sẽ nhận được các thông báo lỗi đó vì những gì đã nói trước đó: các biến môi trường được xác định khi bạn bắt đầu sử dụng tập lệnh mặc định init.d.


-1

Có lẽ điều này sẽ giải quyết vấn đề của bạn

sudo bash -c '. /etc/apache2/envvars ; apache2'

1
đọc đầu tiên, chính xác dòng này đã được cung cấp và nó cũng đã được giải thích, tại sao nó không phải là một câu trả lời đúng.
asdmin

-2

Bạn cần cập nhật DocumentRoot từ /var/www/htmlđến/var/www

Chỉnh sửa tập tin /etc/apache2/sites-av Available / 000-default.conf như sau

DocumentRoot /var/www

-2

Điều này làm việc cho tôi

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"

Trong câu hỏi, có một vấn đề (thông báo lỗi về ServerName) và phương pháp gỡ lỗi không thành công (nguyên nhân là do không tìm nguồn cung ứng biến môi trường). Câu trả lời của bạn giải quyết phương thức gỡ lỗi chứ không phải câu hỏi.
asdmin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.