ข้อผิดพลาดของ Apache“ ไม่สามารถระบุชื่อโดเมนแบบเต็มของเซิร์ฟเวอร์ได้อย่างน่าเชื่อถือ”


431

เมื่อฉันรีสตาร์ทเซิร์ฟเวอร์ Apache โดยใช้คำสั่ง

sudo /etc/init.d/apache2 restart

ฉันได้รับข้อผิดพลาดต่อไปนี้:

Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2:
Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

เซิร์ฟเวอร์ใช้ 127.0.1.1 แทนที่จะเป็น 127.0.0.1 หรือไม่ อะไรทำให้เกิดข้อผิดพลาดนี้

คำตอบ:


509

6 # 13.04 ขึ้นไป

นี่เป็นเพียงคำเตือนที่เป็นมิตรและไม่เป็นปัญหาจริงๆ

ถ้าคุณไปที่:

/etc/apache2/apache2.conf

และแทรก:

ServerName localhost   

จากนั้นรีสตาร์ท apache โดยพิมพ์ลงในเทอร์มินัล:

sudo systemctl reload apache2

การแจ้งเตือนจะหายไป

หากคุณมีชื่ออยู่ภายใน/etc/hostnameคุณสามารถใช้ชื่อนั้นแทนlocalhostได้


และมันจะใช้127.0.1.1ถ้ามันอยู่ในตัวคุณ/etc/hosts:

127.0.0.1 localhost
127.0.1.1 myhostname

วิธีที่ต้องการ

การแก้ไขปัญหา Apache

หากคุณได้รับข้อผิดพลาดนี้:

apache2: Could not determine the server's fully qualified domain name, 
using 127.0.0.1 for ServerName

จากนั้นใช้โปรแกรมแก้ไขข้อความเช่น "sudo nano" ที่บรรทัดคำสั่งหรือ "gksudo gedit" บนเดสก์ท็อปเพื่อสร้างไฟล์ใหม่

sudo nano /etc/apache2/conf.d/fqdn

หรือ

gksu "gedit /etc/apache2/conf.d/fqdn"

จากนั้นเพิ่ม

ServerName localhost

ไปที่ไฟล์และบันทึก ทั้งหมดนี้สามารถทำได้ในคำสั่งเดียวด้วยต่อไปนี้:

 echo "ServerName localhost" | sudo tee /etc/apache2/conf.d/fqdn

แต่ใน Ubuntu 14.04:

 echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf
 sudo a2enconf fqdn

อย่าลืม ".conf" (หากไม่มีจะไม่ทำงาน)


2
นอกจากนี้ยังเป็นที่กล่าวถึงในเอกสารการติดตั้ง Ubuntu โคมไฟสำหรับการแก้ไขปัญหา Apache พวกเขาแนะนำให้สร้างไฟล์ /etc/apache2/conf.d/fqdn ServerName localhostในนั้น
icc97

คำตอบที่ดีมาก - แต่ฉันยังอยากจะแนะนำให้วางไว้ในไดเรกทอรี conf.d :)
CWD

3
/etc/apache2/conf.d/ไม่มีอยู่หลังจากการติดตั้งของฉันlamp-server^ใน 14.04
redanimalwar

@redanimalwar สำหรับ 13.10 และใหม่กว่าโปรดดูคำตอบของ @ Starxด้านล่าง
ด่าน

3
สำหรับขั้นตอนสุดท้าย (การสร้าง sym-link ใน 14.04) ฉันขอแนะนำsudo a2enconf fqdnแม้ว่ามันควรจะเป็นในทางเทคนิค
nuala

176

13.10 หรือใหม่กว่า

ในฐานะของ Apache 2.4 - ซึ่งเป็นค่าเริ่มต้นตั้งแต่ 13.10 - คุณไม่สามารถใช้วิธีการเกี่ยวกับการเพิ่มไฟล์กำหนดค่าในconf.dไดเรกทอรี

Apache ไม่ใช้conf.dไดเรกทอรีอีกต่อไป ไฟล์การกำหนดค่าทั้งหมดจะถูกเก็บไว้ใน/etc/apache2/conf-availableไดเรกทอรีและไฟล์การกำหนดค่าทั้งหมดควรมี.confนามสกุล

เพื่อแก้ปัญหาข้อความนี้ใน Apache 2.4 เราต้องสร้างไฟล์กำหนดค่าภายในไดเรกทอรี conf-available servername.confเช่น

sudo vi /etc/apache2/conf-available/servername.conf

และภายในนี้เราแค่ต้องเพิ่มหนึ่งบรรทัด

ServerName localhost

คุณสามารถรวมสองคำสั่งก่อนหน้าในหนึ่งเดียวกับ:

echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf

หากคุณต้องการใช้ชื่อโดเมนหรือชื่ออื่นขึ้นอยู่กับความต้องการของคุณให้ใช้แทนlocalhostสิ่งที่คุณต้องการ ถัดไปคุณต้องเปิดใช้งานการกำหนดค่านี้ สำหรับสิ่งนี้คุณต้องเรียกใช้คำสั่งต่อไปนี้:

sudo a2enconf servername

a2enconfเป็นคำสั่งให้เปิดใช้งานไฟล์กำหนดค่าใน Apaches 2.4 นอกจากนี้ทราบว่าในคำสั่งดังกล่าวนั้นมาจากชื่อของแฟ้มการกำหนดค่าservername servername.confถ้าแฟ้มการกำหนดค่าของคุณแล้วคุณจะต้องเขียนngenericserver.confsudo a2enconf ngenericserver

หลังจากนี้โหลดเซิร์ฟเวอร์และข้อความข้างต้นจะไม่ผิดพลาดคุณ

sudo service apache2 reload

หรือ

sudo apache2ctl graceful

หลังจากนี้คุณจะเห็นว่าข้อความจะไม่ถูกแสดงอีกและปัญหาจะได้รับการแก้ไข


3
ไม่มีใครรู้วิธีที่จะทำให้อาปาเช่บอกว่าที่ไฟล์ config ก็มีปัญหาเกี่ยวกับอะไร? ฉันไม่รู้ว่าทำไมนักพัฒนาไม่เคยคิดที่จะใส่ข้อความนี้ไว้ในข้อความแสดงข้อผิดพลาด - ใช้รหัสน้อยมาก!
John Y

หากฉันมีอินเทอร์เน็ต fqdm สำหรับเซิร์ฟเวอร์นี้นี่คือที่ที่จะวางไว้หรือไม่ ฉันควร substitude myhost.org แทน localhost หรือไม่
CPBL

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

1
ใช้งานได้กับ 14.04 LTS
Parto

1
ลิงค์ที่ยกมาของคุณดูเหมือนจะตายแล้วโปรดแก้ไข
Fredrick Gauss

28

Apache2 ยังสามารถรับ FQDN จากชื่อโฮสต์ของระบบที่กำหนดค่าไว้อย่างเหมาะสมแทนที่จะใช้ฮาร์ดโค้ดลงในไฟล์ apache config การเข้ารหัสด้วย Hardcoding จะทำให้เกิดความสับสนหากชื่อโฮสต์เปลี่ยนไป จริงๆแล้วคุณไม่จำเป็นต้องมีServerNameคำสั่งhttpd.confใด ๆ หรือไฟล์ apache config ใด ๆ

ใส่ต่อไปนี้ใน/etc/hosts:

# IPv4 and IPv6 localhost aliases
127.0.0.1 hostname.domainname.com  hostname  localhost
::1       hostname.domainname.com  hostname  localhost

ที่hostname.domainname.comเป็น FQDN ของเครื่องของคุณ

นอกจากชื่อโฮสต์ที่กำหนดค่าไว้อย่างถูกต้องใน/etc/hostname/หรือด้วยhostnamectlสิ่งนี้จะช่วยให้บริการอื่น ๆ ในเครื่องของคุณทำงานได้อย่างถูกต้อง (เช่นพรอมต์ล็อกอินแสดงThis is hostname.domainname.comแทนThis is hostname.unknown_domain)


5
+1 สำหรับ "ชื่อโฮสต์ระบบที่กำหนดค่าอย่างเหมาะสม" ฉันต้องการกำหนดค่าเซิร์ฟเวอร์อย่างถูกต้อง สิ่งนี้ยังแก้ไขข้อผิดพลาดของฉันในล็อก[warn] RSA server certificate CommonName (CN) <fqdn> does NOT match server name!?
ทรานซิสเตอร์ 1

คุณคิดว่าสิ่งนี้จะทำงานกับ Apache 2.2.22 ได้หรือไม่? ฉันยังคงได้รับ "ไม่สามารถระบุชื่อโดเมนแบบเต็มของเซิร์ฟเวอร์ได้อย่างเชื่อถือได้โดยใช้ 127.0.1.1 สำหรับชื่อเซิร์ฟเวอร์"
David Winiecki

คือhostname localhostควรจะเป็นmyubuntuservername localhost? หรือตัวอักษรสตริงhostname localhost? คุณยังไม่ชัดเจนในคำตอบของคุณ
Jonathan

2
นี่ควรเป็นคำตอบที่ยอมรับได้ ดูเหมือนว่าคุณอาจจำเป็นต้องเชื่อมโยงกับ FQDN ไปยังที่อยู่ IP แบบคงที่มากกว่า127.0.0.1แม้ว่า
Skippy le Grand Gourou

1
นี่คือคำตอบที่ดีที่สุดสำหรับฉันใน Ubuntu 18.04 ฉันหวังว่าเอกสารจะมีความสอดคล้องกันแม้ว่าชื่อโดเมนที่ผ่านการรับรองจะไม่เหมือนกันทุกคำศัพท์ที่นี่หรือที่ใดก็ตาม ถ้าชื่อโดเมนแบบเต็มของฉันคือ google.com และชื่อเซิร์ฟเวอร์ของฉันคือ google รายการของฉันใน / etc / hosts จะเป็น 127.0.0.1 google.com google ฉันสามารถแทนที่ localhost line และ host local ad จนจบบรรทัดนี้ถ้าฉัน ประสงค์. ฉันใช้สิ่งนี้: digitalocean.com/community/tutorials/…
นิวซีแลนด์

26
  • เปิดเทอร์มินัล
  • เปิด/etc/apache2/httpd.confไฟล์:

    sudo editor /etc/apache2/httpd.conf # [1]
    
  • โดยค่าเริ่มต้นมันจะว่างเปล่า เพียงเพิ่มบรรทัดต่อไปนี้:

    ServerName localhost
    
  • บันทึกไฟล์และออก

  • รีสตาร์ทเซิร์ฟเวอร์

    sudo service apache2 restart
    

[1] เรียกใช้เครื่องมือแก้ไขเริ่มต้นโปรดดู sudo update-alternatives --config editor


หลังจากดำเนินการคำสั่งสุดท้ายเกิดข้อผิดพลาดต่อไปนี้ ** การรีสตาร์ทเว็บเซิร์ฟเวอร์ apache2 / usr / sbin / apache2ctl: 87: ulimit: ข้อ จำกัด การตั้งค่าข้อผิดพลาด (ไม่อนุญาตการดำเนินการ) / usr / sbin / apache2ctl: 87: ulimit: ข้อ จำกัด การตั้งค่า ได้รับอนุญาต) (13) ปฏิเสธการอนุญาต: make_sock: ไม่สามารถผูกกับที่อยู่ 0.0.0.0:80 ไม่มีซ็อกเก็ตฟังที่มีอยู่ปิดตัวเองไม่สามารถเปิดบันทึกการกระทำ 'เริ่มต้น' ล้มเหลว บันทึกข้อผิดพลาด Apache อาจมีข้อมูลเพิ่มเติม [ล้มเหลว] ** @ green7
Deepu

ลอง 'sudo service apache2 restart'
waterloo2005

20

ในเวอร์ชันใหม่ของ apache2 คุณเพียงแค่ทำตามคำสั่งเช่นนี้:

sudo nano /etc/apache2/apache2.conf

เพิ่มไฟล์ท้ายบรรทัดใหม่ต่อไปนี้:

ServerName localhost

จากนั้นรีสตาร์ท apache2:

sudo service apache2 restart

มันจบแล้ว.


6

ฉันคิดว่ามันเป็นบิตดีกว่าที่จะสร้างไฟล์ใหม่ใน/etc/conf.dที่การปรับเปลี่ยนอย่างใดอย่างหนึ่งหรือapache2.confhttpd.conf

เป็นการตั้งค่าส่วนตัวที่ทำให้การเปลี่ยนแปลงการกำหนดค่าของฉันแยกออกจากแพ็คเกจการแจกจ่าย ดังนั้นการอัพเดทจึงมีความซับซ้อนน้อยลง

ฉันสร้างไฟล์/etc/apache2/conf.d/AAserverNameและมันมีเพียง:

ServerName myhost.mycomain.tld

คำแนะนำอื่น ๆ ก็ใช้ได้เช่นกัน



1

เพิ่ม ServerName localhost

ไปยัง

 sudo leafpad /etc/apache2/apache2.conf

 sudo leafpad /etc/apache2/httpd.conf

มันไม่ใช่ข้อผิดพลาด .. มันเป็นเพียงแค่เตือนเพื่อน


1

การระบุServerName localhostในไฟล์กำหนดค่าของคุณนอกส่วนโฮสต์เสมือนเป็นวิธีการทำเช่นนี้

บางคำตอบอื่น ๆ /etc/apache2/httpd.confขอแนะนำว่าคุณควรแก้ไข ไฟล์นี้จะถูกเขียนทับเมื่อ apache ได้รับการอัพเกรดจาก apt สำหรับการกำหนดค่า Apache ที่คุณไม่ต้องการเขียนทับคุณควรสร้างไฟล์ใหม่ นี่คือ "วิธีเดเบียน" เพื่อทำการเปลี่ยนแปลงการกำหนดค่านี้:

# create the configuration file in the "available" section
echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf
# enable it by creating a symlink to it from the "enabled" section
sudo a2enconf servername
# restart the server
sudo service apache2 restart

นี่เป็นคำตอบเดียวกับ Stark แต่ในรูปแบบสคริปต์ที่ง่ายต่อการคัดลอกและวาง ฉันเคยโพสต์สิ่งนี้ในคำถามที่มีการทำเครื่องหมายว่าซ้ำกัน: https://askubuntu.com/a/432408


1

บนUbuntu 16.04 :

เพิ่มServerName localhostไปยังไฟล์httpd.confโดยใช้คำสั่งต่อไปนี้

sudo vi  /etc/apache2/httpd.conf

จากนั้นให้รวมบรรทัดนี้Include httpd.confไว้ท้ายไฟล์นี้

sudo vi /etc/apache2/apache2.conf

ตรวจสอบข้อผิดพลาดทางไวยากรณ์อีกครั้ง

sudo apache2ctl configtest

ตอนนี้คุณควรจะได้รับ

Syntax OK

ตอนนี้คุณสามารถรีสตาร์ทเซิร์ฟเวอร์ได้อย่างสง่างามโดยการโหลดการกำหนดค่าใหม่

sudo service apache2 reload

หรือหยุดกระบวนการและเริ่มต้นอีกครั้ง

sudo service apache2 restart

0

ใน Ubuntu 11.10 ฉันเห็นข้อความนี้พร้อมกับการบู๊ตที่เกิดขึ้นเนื่องจากดิสก์เต็ม หนึ่งในแฟ้มบันทึกได้ไปโกง อาจเป็นไปได้ว่าไม่มีปัญหากับ Apache จริงๆ แต่ข้อความนี้เป็นเบาะแสสุดท้ายที่ได้รับก่อนที่บูตจะหยุดทำงาน

เพื่อแก้ไขปัญหาฉันต้องบูตเข้าสู่โหมดการกู้คืนและลบไฟล์บันทึกเอาแต่ใจ


0

หากคุณกำลังใช้ bash และต้องการการอ้างอิงน้อยที่สุด (และต้องการเพียงหนึ่งซับสำหรับสคริปต์จุดเข้าใช้งานของคุณหากคุณใช้ Dockerอย่างฉัน) ตัวเลือกทั้งสองนี้จะทำงานได้

ถ้าคุณต้องการ localhost:

echo "ServerName localhost" >> /etc/apache2/apache2.conf

หากคุณต้องการชื่อโฮสต์ที่มีอยู่:

echo "ServerName $(cat /etc/hostname)" >> /etc/apache2/apache2.conf

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


0

เรียกใช้คำสั่งต่อไปนี้:

apachectl -t -D DUMP_INCLUDES

เพื่อกำหนดพา ธ ไปยังhttpd.confไฟล์กำหนดค่าของคุณจากนั้นแก้ไขไฟล์นั้นและยกเลิกหมายเหตุ / แก้ไขบรรทัดที่ระบุค่าสำหรับServerNameตัวเลือกเช่น

ServerName localhost

สำหรับเว็บเซิร์ฟเวอร์ให้ใช้ชื่อ DNS ที่ลงทะเบียน (เช่นexample.com)

หากโฮสต์ของคุณไม่มีชื่อ DNS ที่ลงทะเบียนให้ป้อนที่อยู่ IP ของที่นี่


0

บนUbuntu 16.04 :

เพิ่มServerName localhostไปยังไฟล์httpd.confโดยใช้คำสั่งต่อไปนี้

sudo vi  /etc/apache2/httpd.conf

จากนั้นให้รวมบรรทัดนี้Include httpd.confไว้ท้ายไฟล์นี้

sudo vi /etc/apache2/apache2.conf

ตรวจสอบข้อผิดพลาดทางไวยากรณ์อีกครั้ง

sudo apache2ctl configtest

ตอนนี้คุณควรจะได้รับ

Syntax OK

ตอนนี้คุณสามารถรีสตาร์ทเซิร์ฟเวอร์ได้อย่างสง่างามโดยการรีโหลดการบริการ sudo apache2 การรีสตาร์ท

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