Помилка 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
Про це також згадується в документації по налаштуванню LAMP Ubuntu для усунення несправностей Apache . Там вони рекомендують створити файл /etc/apache2/conf.d/fqdn з ServerName localhostним
icc97

Дуже хороша відповідь - але я також рекомендую помістити його в каталог
conf.d

3
/etc/apache2/conf.d/не існує після мого встановлення lamp-server^14.04
redanimalwar

@redanimalwar Для 13.10 і новіших див. відповідь @ Starx нижче.
Дан

3
Для останнього кроку (створення символьної посилання в 14.04) я б рекомендував, sudo a2enconf fqdnхоча технічно він повинен бути таким же.
нуала

176

13.10 або новіші

Станом на Apache 2.4 - який доступний за замовчуванням з 13.10 - ви не можете використовувати метод додавання файлу конфігурації у conf.dкаталог.

Apache більше не використовує conf.dкаталог. Усі файли конфігурації зберігаються всередині /etc/apache2/conf-availableкаталогу, і всі файли конфігурації тепер повинні мати .confрозширення.

Для вирішення цього повідомлення в Apache 2.4, ми повинні створити файл конфігурації всередині доступного каталогу conf. Наприклад 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.confвам доведеться записати sudo a2enconf ngenericserver.

Після цього перезавантажте сервер, і вищезгадане повідомлення більше не буде вас помиляти.

sudo service apache2 reload

або

sudo apache2ctl graceful

Тепер після цього ви побачите, що повідомлення більше не відображатиметься і проблема буде вирішена.


3
Хтось знає, як змусити Apache сказати, з яким конфігураційним файлом у нього проблеми? Я не знаю, чому розробники ніколи не думають ставити це у своїх повідомленнях про помилки - навряд чи потрібно багато коду!
Джон Y

Якщо у мене є інтернет-файл fqdm для цього сервера, це місце його розмістити? тобто мені слід замінити myhost.org замість localhost?
CPBL

1
@CPBL Це буде ім'я сервера за замовчуванням для всіх сайтів. Якщо у вас є лише один сайт, то це все, що вам потрібно зробити. Якщо на вашому сервері є кілька сайтів, вам також потрібно буде додати директиву імені сервера для кожного сайту у відповідній конфігурації віртуального хоста.
День

1
Працює 14.04 LTS.
Парто

1
Ваше посилання, що цитується, здається мертвим, виправте.
Фредрік Гаус

28

Apache2 також може отримати FQDN від правильно налаштованого системного імені хоста, а не жорсткого коду у конфігураційний файл apache. Жорстке кодування також призведе до плутанини, якщо ім'я хоста зміниться. Насправді вам не потрібні ServerNameдирективи в httpd.confбудь-яких конфігураційних файлах apache.

Помістіть наступне /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 для ServerName"
David Winiecki

Це hostname localhostповинно бути myubuntuservername localhost? Або рядковий буквальний hostname localhost? Вам не було зрозуміло у своїй відповіді
Джонатан

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 рядок та місцевий хост оголошення до кінця цього рядка, якщо я побажання Я використав це: digitalocean.com/community/tutorials/…
NZ Dev

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.confабо httpd.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, яку не потрібно перезаписувати, слід створити новий файл. Ось "спосіб Debian", щоб змінити цю конфігурацію:

# 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

Це в основному те саме, що відповідь Старка, але у легкій для копіювання та вставки форми скрипту. Я спочатку опублікував це у запитанні, яке було позначене як дублікат: 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.