Ошибка Apache «Не удалось надежно определить полное доменное имя сервера»


432

Когда я перезагружаю свой сервер 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 LAMP для устранения неполадок 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хотя технически он должен быть таким же.
Нуала

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команда включения файла конфигурации в Apache 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 Это будет имя сервера по умолчанию для всех сайтов. Если у вас есть только один сайт, то это все, что вам нужно сделать. Если на вашем сервере несколько сайтов, вам также необходимо добавить директиву servername для каждого сайта в соответствующей конфигурации виртуального хоста.
Дан

1
Работает на 14.04 LTS.
Парто

1
Ваша цитируемая ссылка кажется мертвой, пожалуйста исправьте.
Фредрик Гаусс

28

Apache2 также может получить полное доменное имя из правильно настроенного имени системного хоста, а не жестко запрограммировать его в конфигурационном файле 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полное доменное имя вашей машины.

Наряду с правильно настроенным именем хоста в /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
Это должен быть принятый ответ. Кажется, что вам может потребоваться связать полное доменное имя со статическим IP-адресом, а не 127.0.0.1, хотя.
Скиппи ле Гран Гуру

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 нет доступных прослушивающих сокетов, завершение работы невозможно Невозможно открыть журналы. Действие «start» не выполнено. Журнал ошибок Apache может содержать больше информации. [сбой] ** @ green7
Дипу

попробуйте '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 для добавления строки в конец файла. Эхо автоматически вставляет новую строку, так что все готово.


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 service apache2 restart

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.