apache2: ไม่สามารถกำหนดชื่อโดเมนแบบเต็มของเซิร์ฟเวอร์ได้อย่างเชื่อถือได้โดยใช้ 127.0.1.1 สำหรับ ServerName


73

ฉันได้รับคำเตือนนี้ต่อเมื่อฉันเริ่ม Apache

* 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 [ OK ]

นี่คือเนื้อหาของetc/hostsไฟล์ของฉัน:

#127.0.0.1  hpdtp-ubuntu910
#testproject.localhost  localhost.localdomain   localhost
#127.0.1.1  hpdtp-ubuntu910

127.0.0.1   localhost
127.0.0.1   testproject.localhost
127.0.1.1   hpdtp-ubuntu910



# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

นี่คือเนื้อหาของ/etc/apache2/sites-enabled/000-defaultไฟล์ของฉัน:

<VirtualHost *:80>
  ServerName testproject.localhost
  DocumentRoot "/home/morpheous/work/websites/testproject/web"
  DirectoryIndex index.php
  <Directory "/home/morpheous/work/websites/testproject/web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf /lib/vendor/symfony/symfony-1.3.2/data/web/sf
  <Directory "/lib/vendor/symfony/symfony-1.3.2/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

เมื่อฉันไปที่http://testproject.localhostฉันได้รับหน้าว่าง

ทุกคนสามารถสังเกตเห็นสิ่งที่ฉันทำผิดได้หรือไม่?

คำตอบ:


52

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

ในการแก้ไขให้เพิ่มคำสั่ง ServerName นอกโฮสต์เสมือนใด ๆ - เช่นใน/etc/apache2/httpd.confหรือตั้งค่าการตอบกลับ DNS สำหรับที่อยู่ IP หลักของคุณ - ในกรณีนี้ 127.0.1.1

เป็นเรื่องที่ดีมากที่จะไม่สนใจมัน


3
สิ่งนี้ตอบโต้ได้ง่าย หากฉันเพิ่มชื่อเซิร์ฟเวอร์นอกโฮสต์เสมือนใด ๆ - ฉันจะให้บริการโฮสต์เสมือนหลายแห่งจากเซิร์ฟเวอร์ Apache เดียวกันได้อย่างไร (นี่คือทั้งหมดเป็นจุดเซิร์ฟเวอร์เสมือนที่มีชื่อ) - จนกว่าคุณจะบอกว่าฉันสามารถมีมากกว่า 1 รายการชื่อเซิร์ฟเวอร์ใน (พูด) /etc/apache2/httpd.conf
user35402

7
จากนั้นคุณสามารถเพิ่ม ServerName / ServerAlias ​​ภายในบล็อก VirtualHost เพื่อให้ VirtualHost นั้นตรงกับชื่อโฮสต์ที่คุณต้องการ อ่านhttpd.apache.org/docs/2.2/mod/core.html#servernameสำหรับ low-down
crb

ฉันค้นหาคำตอบนี้มานานกว่าหนึ่งชั่วโมง อึมากบนอินเทอร์เน็ตที่เกี่ยวข้องกับเรื่องนี้ แต่นี้แก้ไขปัญหาของฉัน ขอบคุณ
Mike

@ ไมค์คุณและคนอื่น ๆ เป็นอัจฉริยะ! ฉันค้นหาคำตอบนี้สี่วัน (ตกลงไม่ใช่วันทำงานอย่างเต็มที่) +1 เพราะนี่เป็นคำตอบแรกที่อธิบายว่าฉันสามารถเพิ่มคำสั่ง ServerName นอกโฮสต์เสมือนโดยไม่ส่งผลกระทบต่อพวกเขา เมื่อคำนึงถึงวิธีการแก้ปัญหา ReinoutS ก็ใช้งานได้สำหรับฉัน (+1 ให้กับเขาเช่นกัน)
Sony Santos

27

นี่คือการแก้ไขอย่างรวดเร็ว:

echo ServerName $HOSTNAME > /etc/apache2/conf.d/fqdn

ขอบคุณ ไม่มีการแก้ไขใด ๆ ที่ใช้ / etc / hosts หรือ httpd.conf ใช้งานไม่ได้สำหรับฉัน
Ryan

1
แก้ไขใน Ubuntu 13.04 ที่ทำงาน apache2 ขอบคุณ!
dmanexe

16

ทางรอบคำเตือนว่าก็คือการใส่ชื่อโดเมนที่มีคุณสมบัติครบถ้วนในสายของ127.0.1.1 /etc/hostsไม่จำเป็นต้องเป็น fqdn ที่สามารถแก้ไขสิ่งใด ๆ บนเซิร์ฟเวอร์ dns ได้

127.0.1.1  hpdtp-ubuntu910.lan  hpdtp-ubuntu910

จะทำเคล็ดลับในขณะที่ยังรักษาลักษณะการทำงานของโปรแกรมใด ๆ .lanที่ไม่ได้คาดหวังว่าพิเศษ คำสั่งซื้อเป็นสิ่งสำคัญ ควรระบุชื่อที่มีระดับมากกว่าก่อนเช่นในตัวอย่างนี้ที่มีที่.lanอยู่ก่อนที่อยู่อื่น


7

โซลูชันนี้ใช้ได้กับความต้องการในการพัฒนาของฉัน:

พื้นหลัง:

Debian Linux Sid:
การพัฒนา VirtualHost: ฉันมี 10 ชื่อเซิร์ฟเวอร์ (10 รายการโฮสต์โฮสต์ภายในไซต์พร้อมใช้งาน)

ฉันได้กำหนดที่อยู่ IP localhost ที่ไม่ซ้ำกันภายใน/etc/hosts:

127.0.0.1   joe   localhost.localdomain   localhost
127.0.1.1   joe
127.0.1.2   joomla
127.0.1.3   schmoo
127.0.1.4   forrest
127.0.1.5   store
127.0.1.6   publisher
127.0.1.7   studios
127.0.1.8   drupal
127.0.1.9   graphics
127.0.1.10  wordpress
...

The following lines are desirable for IPv6 capable hosts

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

หากคุณกำลังจะเพิ่ม virtualhost อื่น (ฉันมีไม่กี่อย่างสำหรับการพัฒนา) เพิ่มรายการไปยังที่อยู่ IP localhost อื่นและเปิดใช้งานไซต์ก่อนที่จะเริ่ม Apache 2.2 ใหม่:

127.0.0.11 *newhost*

สำหรับทุกรายการที่คุณต้องการเปิดใช้งานเป็นไฟล์ VirtualHost:

/ etc / apache2 / เว็บไซต์ที่มีอยู่ /

joe joomla schoo forrest ร้านค้าผู้เผยแพร่สตูดิโอ drupal graphics wordpress

virtualhosts ทั้งหมดเปิดใช้งาน / ปิดใช้งานผ่านชื่อโฮสต์ a2ensite / a2dissite

เพื่อระงับข้อผิดพลาด

การเริ่มต้นเว็บเซิร์ฟเวอร์ใหม่: apache2apache2: ไม่สามารถกำหนดชื่อโดเมนแบบเต็มของเซิร์ฟเวอร์ได้อย่างเชื่อถือได้โดยใช้ 127.0.0.1 สำหรับชื่อเซิร์ฟเวอร์ ... กำลังรอ apache2: ไม่สามารถกำหนดชื่อโดเมนแบบเต็มของเซิร์ฟเวอร์ได้อย่างเชื่อถือได้ใช้ 127.0.0.1 สำหรับ ServerName ''

แก้ไขhttpd.confใน/etc/apache2/httpd.conf[ไฟล์ที่ว่างเปล่าใน Debian]:

ServerName 127.0.1.1

เงยหน้าขึ้นมองได้รับการแก้ไขแล้วสำหรับชื่อทั้งหมดที่คุณเพิ่ม , ความคิดเห็นออกหรือปิดการใช้งานลงเส้น

ในกรณีที่คุณลืม: รายการ VirtualHost *: 80 จะต้องอยู่ในไฟล์ports.confเท่านั้น

/etc/apache2/ports.conf

**NameVirtualHost *:80**
Listen 80

<IfModule mod_ssl.c>
   # If you add NameVirtualHost *:443 here, you will also have to change
   # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
   # to <VirtualHost *:443>
   # Server Name Indication for SSL named virtual hosts is currently not
   # supported by MSIE on Windows XP.
   Listen 443
</IfModule>

<IfModule mod_gnutls.c>
   Listen 443
</IfModule>

ภายในรายการ VirtualHost ของคุณให้ปล่อยออกVirtualHost *: 80

ตัวอย่าง: virtualhost joe

<VirtualHost *:80>
    **ServerAlias joe**
    **...**
</VirtualHost>

6

การตั้งค่าServerNameใน httpd.conf ไม่ทำงานสำหรับฉัน ฉันคงได้โดยการตั้งค่าในServerName 127.0.0.1/etc/apache2/conf.d/name

ฉันใช้ Ubuntu 12.10 Alpha3 และServerNameกำหนดไว้ในทั้งสองจุด

ที่มา: http://linuxconfig.net/manual-howto/error-solution-could-not-reliably-determine-the-servers-fully-qualified-domain-name.html


เจ๋งมันใช้ได้กับฉันเหมือนกันมีปัญหาเดียวกัน
Priyank Bolia

5

คุณไม่มีรายการ ServerName ระดับการกำหนดค่าเซิร์ฟเวอร์ คุณต้องมีรายการ ServerName นอกโฮสต์ใด ๆ เพื่อให้ Apache ใช้เป็นค่าเริ่มต้น

การใส่รายการ ServerName ไว้ใน VirtualHost จะไม่สามารถแก้ไขปัญหาได้ ดูServerName Directive


3

หากต้องการแก้ไขเราต้องแก้ไข /etc/apache2/httpd.conf หรือ /etc/apache2.conf และเพิ่มบรรทัดต่อไปนี้:

ServerName nameofserver

1
คุณถูก! แต่คำตอบนี้ซ้ำกับเนื้อหาของคำตอบ crb โดยไม่ต้องให้ข้อมูลใหม่หรือข้อมูลเชิงลึกใด ๆ ฉันจะลองลบมันหรือเพิ่มรายละเอียดที่แตกต่างจากคำตอบของคนอื่น
Royce Williams

1

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


ฉันไม่เข้าใจความคิดเห็นของคุณ ฉันมีชื่อเซิร์ฟเวอร์ในไฟล์ของฉันแล้ว: <VirtualHost 127.0.0.1:8080> ชื่อเซิร์ฟเวอร์ mysite.localhost คุณช่วยอธิบายให้คุณฟังได้ไหม?

1
สำหรับ -default- virtualhost ไม่ใช่เพียง virtualhost เฉพาะ
Kzqai

0
  1. คุณต้องเพิ่ม ServerName ในไฟล์ httpd.confของคุณโดยใช้ขั้นตอนต่อไปนี้

    sudo gedit /etc/apache2/httpd.conf
    

    โดยhttpd.confไฟล์เริ่มต้นจะว่างเปล่า ตอนนี้เพียงเพิ่มบรรทัดต่อไปนี้ลงในไฟล์

    ServerName localhost
    

    geditบันทึกไฟล์และการออกจาก ในที่สุดรีสตาร์ทเซิร์ฟเวอร์

    sudo /etc/init.d/apache2 restart
    

2) เพิ่มInclude httpd.confเมื่อสิ้นสุดapache2.conf


-1

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


-1

Is / etc / hosts ยังคงมีรายการเหล่านี้ (ฉันข้ามคำตอบไปด้านบน)

127.0.0.1 localhost 127.0.0.1 testproject.localhost

ทั้งที่อยู่ IP 127.0.0.1 เหมือนกันที่นี่

ให้ที่อยู่ IP ที่แตกต่างกันเพื่อ testproject.localhost จาก loopback ip subnet

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