ไม่ได้กำหนดตัวแปรการกำหนดค่า Apache2


65

ฉันติดตั้ง apache2 บน Ubuntu 13.10 หากฉันพยายามรีสตาร์ทโดยใช้

sudo /etc/init.d/apache2 restart

ฉันได้รับข้อความนี้:

AH00558: apache2: ไม่สามารถกำหนดชื่อโดเมนที่ผ่านการรับรองโดยสมบูรณ์ของเซิร์ฟเวอร์ได้อย่างน่าเชื่อถือโดยใช้ 127.0.1.1 ตั้งค่าคำสั่ง 'ServerName' ทั่วโลกเพื่อไม่ให้แสดงข้อความนี้

ดังนั้นฉันจึงอ่านว่าฉันควรแก้ไขhttpd.confไฟล์ของฉัน แต่เนื่องจากฉันหามันไม่เจอใน/etc/apache2/โฟลเดอร์ฉันจึงพยายามหามันโดยใช้คำสั่งนี้:

/usr/sbin/apache2 -V

แต่ผลลัพธ์ที่ฉันได้รับคือ:

[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}

บรรทัด 74 ของ/etc/apache2/apache2.confคือ:

Mutex file:${APACHE_LOCK_DIR} default

ฉันดู/etc/apache2/envvarไฟล์ของฉันแต่ฉันไม่รู้จะทำอย่างไรกับมัน

ฉันควรทำอย่างไร?


ไฟล์ envvars ของคุณคืออะไร?
etagenklo

คำตอบ:


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

ข้อความนี้จะปรากฏขึ้นเพราะคุณดำเนินการ apache2 ไบนารีโดยตรง ใน Ubuntu / Debian การตั้งค่า apache ขึ้นอยู่กับไฟล์ envvar ที่เปิดใช้งานเท่านั้น

หากคุณเริ่ม apache ด้วยสคริปต์เริ่มต้นหรือ apachectl

ปัญหาดั้งเดิมของคุณคือคุณไม่มีชื่อโฮสต์ (fqdn) ที่เหมาะสมสำหรับเครื่องของคุณ

หากคุณไม่สามารถเปลี่ยนได้ให้เปลี่ยนServerNameตัวแปร/etc/apache2/apache2.confเป็นlocalhostหรือ FQDN ที่คุณต้องการ


1
คุณพูดถูกเกี่ยวกับสคริปต์เริ่มต้น แล้วฉันจะเพิ่มServerName localhostไปapache2.conf(เพราะhttpd.confไม่ได้ใช้เสมอในอูบุนตู) และตอนนี้ทุกอย่างทำงานตามที่ควร คุณช่วยเพิ่มรายละเอียดลงในคำตอบของคุณเพื่อให้ฉันสามารถตั้งค่าสถานะเป็นที่ยอมรับได้หรือไม่?
Kurt Bourbaki

1
เริ่มต้นด้วยapache2ctlไม่ทำงานสำหรับฉันฉันต้องใช้บริการ :sudo service apache2 restart
Édouard Lopez

แต่ทำไมพวกเขาถึงทำลายapache2คำสั่งตั้งแต่แรก?
reinierpost

2
โซลูชันนี้แก้ไขได้เพียงAH00558: apache2: Could not reliably determine the server's fully qualified domain nameแต่ไม่สามารถแก้ไขConfig variable ${APACHE_LOCK_DIR} is not definedได้
Vladimir Vukanac

สำหรับฉันฉันยังเห็นปัญหาเดียวกัน
indianwebdevil

84

หาแหล่งที่มาของคุณโดยใช้มันเช่นนี้

source /etc/apache2/envvars

แล้ว

/usr/sbin/apache2 -V

คุณควรได้รับ:

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/envvarsไม่มีอยู่
Mark Richman

6
ไฟล์มีอยู่ในระบบอูบุนตูของฉัน แต่เชลล์ไม่รู้จักว่าเป็นเชลล์สคริปต์ดังนั้นฉันจึงต้องการสิ่งนี้: source / etc / apache2 / envvars; apache2 -V
Ben Crowell

6
สามารถใช้apachectl -Vแทนการโหลดในตัวแปรสภาพแวดล้อมด้วยตนเอง
Sam Sehnert

หากยังใช้งานไม่ได้ให้ลองsource /etc/apache2/envvars && sudo -E apache2 -Vหรือเข้าสู่ระบบด้วยrootและทำตามคำตอบด้านบน การจัดหา apache2 env ให้กับผู้ใช้ทั่วไปที่ต้องการใช้ sudo จะไม่ทำงานโดยไม่มี "-E" ผู้ใช้ปกติไม่สามารถอ่านโฟลเดอร์ส่วนตัวของใบรับรองท่ามกลางปัญหาอื่น ๆ คุณจะได้รับข้อผิดพลาด คุณต้อง sudo -E หรือทำงานภายใต้บัญชีผู้ใช้รากอย่างสมบูรณ์
bshea

สิ่งนี้มีประโยชน์มากสำหรับการเรียกใช้ Apache ในฐานะที่เป็นพื้นหน้านักเทียบท่า cmd เช่นCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack

7

ตรวจสอบ/etc/apache2/envvarsAPACHE_LOCK_DIR ของคุณ ใน Ubuntu 12.04 ของฉันนี่เป็น/var/lock/apache2$SUFFIXSUFFIX ปกติแล้วจะว่างเปล่า

ตรวจสอบว่ามีไดเร็กทอรีอยู่หรือไม่และสามารถเขียนได้

อาจเป็นได้ว่าไฟล์ envvars ไม่ได้รับแหล่งที่มาอย่างถูกต้อง? หากคุณมีลักษณะที่/etc/init.d/apache2คุณจะเห็นว่ามันมา

ของฉัน (เริ่มต้น) /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'

หากไม่ทำงานฉันจะลองติดตั้งแพ็กเกจใหม่


2

ดังที่คนอื่น ๆ กล่าวว่าคุณต้องโหลด (แหล่งที่มา) สภาพแวดล้อมของคุณก่อนที่จะเรียกใช้โดยตรงตัวเลือกอื่นคือการใช้: apache2ctlเช่น

sudo apache2ctl -S

เพื่อทิ้งโฮสต์ของฉัน


2

TL; DR; คุณควรเริ่ม apache2 โดยใช้สิ่งที่คุณมีอยู่แล้ว:

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

รายละเอียด:

AH00558: apache2: ไม่สามารถกำหนดชื่อโดเมนที่ผ่านการรับรองโดยสมบูรณ์ของเซิร์ฟเวอร์ได้อย่างน่าเชื่อถือโดยใช้ 127.0.1.1 ตั้งค่าคำสั่ง 'ServerName' ทั่วโลกเพื่อไม่ให้แสดงข้อความนี้

ข้อความนี้หมายความว่าคุณต้องกำหนดชื่อเซิร์ฟเวอร์ / ชื่อโดเมนของคุณ ไม่จำเป็นต้องทำเพื่อโฮสต์ในพื้นที่ / ทดสอบการผลิตคุณไม่จำเป็นต้องกังวลเกี่ยวกับมัน

เมื่อคุณพยายามที่จะเรียกใช้วิธีการอื่น ๆ โดยใช้เพียงapache2คุณจะได้รับข้อความแสดงข้อผิดพลาดเหล่านั้นเพราะสิ่งที่ถูกกล่าวก่อน: init.dตัวแปรสภาพแวดล้อมที่กำหนดไว้เมื่อคุณเริ่มใช้สคริปต์เริ่มต้นใน


-1

บางทีนี่อาจช่วยแก้ปัญหาของคุณได้

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

1
อ่านก่อนตรงบรรทัดนี้มีให้แล้วและมันก็อธิบายว่าทำไมมันไม่ใช่คำตอบที่ถูกต้อง
asdmin

-2

คุณต้องอัปเดต DocumentRoot จาก/var/www/htmlเป็น/var/www

แก้ไขไฟล์/etc/apache2/sites-available/000-default.confดังนี้

DocumentRoot /var/www

-2

มันใช้งานได้สำหรับฉัน

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

ในคำถามมีปัญหา (ข้อความแสดงข้อผิดพลาดเกี่ยวกับ ServerName) และวิธีการตรวจแก้จุดบกพร่องที่ล้มเหลว (ซึ่งเกิดจากการไม่ได้จัดหาตัวแปรสภาพแวดล้อม) คำตอบของคุณระบุวิธีการตรวจแก้จุดบกพร่องไม่ใช่คำถาม
asdmin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.