Помилка 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.