Вопрос или проблема
В моем экземпляре EC2 Ubuntu 18.04 я создал файл django.conf в /etc/nginx/sites-available
Файл .conf выглядит так:
server {
listen 80;
server_name *[url_name]*;
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/ZTS-JOBCARDS/app.sock;
}
}
И когда я выполнил sudo nginx -t
перед тем, как попытаться связать файлы с /etc/nginx/sites-enabled/, результат оказался положительным
Однако, после того, как я связал файлы таким образом: sudo ln -s django.conf /etc/nginx/sites-enabled/
Команда nginx -t
возвращает следующую ошибку;
nginx: [emerg] open() “/etc/nginx/sites-enabled/django.conf” failed
(40: слишком много уровней символических ссылок) в /etc/nginx/nginx.conf:62
nginx: тест конфигурационного файла /etc/nginx/nginx.conf не прошел
Что могло вызвать эту ошибку и есть ли какие-нибудь руководства по ее исправлению?
Вы связали django.conf
с самими собой. В файле нет данных, только ссылка на сам себя.
Эта команда,
ln -s django.conf /etc/nginx/sites-enabled/ # Неправильно
создает символическую ссылку в /etc/nginx/sites-enabled
с именем django.conf
, указывающую на django.conf
. Вы можете увидеть это с помощью ls -l /etc/nginx/sites-enabled/django.conf
.
То, что вы намеревались сделать, это создать символическую ссылку в /etc/nginx/sites-enabled
с именем django.conf
, указывающую на относительное местоположение, ../sites-available/django.conf
cd /etc/nginx/sites-enabled && ln -s ../sites-available/django.conf
Если вы хотите избежать изменения текущего каталога, оберните пару команд в скобки
( cd … && ln … )
Использование принятого ответа оставило меня с той же ошибкой (слишком много уровней символических ссылок). Мне пришлось использовать два абсолютных пути, чтобы ссылка работала.
sudo ln -s /etc/nginx/sites-available/siteconfig /etc/nginx/sites-enabled/siteconfig
.
Ответ или решение
Решение проблемы "Too many levels of symbolic links" в Ubuntu 10.04 на AWS EC2
При работе с конфигурацией Nginx на Ubuntu, вы можете столкнуться с ошибкой "Too many levels of symbolic links" (Ошибка 40). Эта ошибка относится к неправильной настройке символических ссылок, которая происходит, когда ссылка указывает на себя или образует бесконечный цикл.
Проблема
В приведенном вами сценарии вы создали конфигурационный файл django.conf
в директории /etc/nginx/sites-available
, а затем выполнили команду:
sudo ln -s django.conf /etc/nginx/sites-enabled/
Эта команда создала символическую ссылку django.conf
, указывающую на сам файл django.conf
, находящийся в директории /etc/nginx/sites-enabled
. В результате, при выполнении команды nginx -t
возникает ошибка, поскольку Nginx не может правильно интерпретировать такую ссылку, что приводит к бесконечному циклу самой ссылки.
Решение
Для устранения этой проблемы вам необходимо создать символическую ссылку на правильный путь. Выполните следующие шаги:
-
Удалите неправильную ссылку:
sudo rm /etc/nginx/sites-enabled/django.conf
-
Создайте корректную символическую ссылку:
Вам следует использовать относительный путь к файлу
django.conf
в директорииsites-available
. Вы можете сделать это двумя способами:- Первый способ: Измените директорию и создайте ссылку:
cd /etc/nginx/sites-enabled && sudo ln -s ../sites-available/django.conf
- Второй способ: Используйте полный путь к файлу:
sudo ln -s /etc/nginx/sites-available/django.conf /etc/nginx/sites-enabled/django.conf
-
Проверьте конфигурацию Nginx:
После создания правильной ссылки, выполните команду для проверки конфигурации:
sudo nginx -t
Если все сделано правильно, вы увидите сообщение, указывающее на успешную проверку конфигурации.
-
Перезапустите Nginx:
Если проверка прошла успешно, перезапустите сервис Nginx, чтобы применить изменения:
sudo systemctl restart nginx
Заключение
Эта ошибка может быть легко исправлена правильным пониманием работы символических ссылок в Linux. Убедитесь, что вы всегда создаете ссылки на нужные пути, чтобы избежать ошибок, связанных с возвратом на одну и ту же ссылку. Следуя вышеуказанным шагам, вы сможете устранить проблему "Too many levels of symbolic links" и убедиться, что ваш сервер Nginx работает как положено.