Назад | Перейти на главную страницу

Символическое связывание Linux не работает должным образом

Я уже несколько раз достигал своей «цели», но столкнулся с проблемой, с которой еще не сталкивался. У меня есть настройка веб-сервера с Nginx на Ubuntu 12.04 LTS. Моя система настроена обычным образом, и я пытаюсь создать символическую ссылку для «виртуального хоста» сайта с сайтов, доступных для каталога с поддержкой сайтов. Обычно это достигается с помощью следующего из основного каталога nginx (от имени root):

ln -s /etc/nginx/sites-available/site.com /etc/nginx/sites-enabled/site.com

Хотя я могу перейти в активированный каталог и увидеть, что символическая ссылка «сработала», когда я пытаюсь отредактировать файл непосредственно в каталоге с включенными сайтами, я вижу, что файл пустой и рассматривается как новый файл. В результате мой сервер не работает должным образом, и страницы не загружаются. Когда я просто копирую файл в каталог или жестко связываю его:

ln /etc/nginx/sites-available/site.com /etc/nginx/sites-enabled/site.com

Работает без проблем. Однако я застрял с двумя копиями одного и того же файла и без символической ссылки.

Что, черт возьми, дает?

Примечание: вот структура моего текущего каталога Nginx:

root@site.com:/etc/nginx# ls -l
total 44
drwxr-xr-x 2 root root 4096 Mar  4 17:28 conf.d
-rw-r--r-- 1 root root  964 Feb 12 08:41 fastcgi_params
-rw-r--r-- 1 root root 2837 Feb 12 08:41 koi-utf
-rw-r--r-- 1 root root 2223 Feb 12 08:41 koi-win
-rw-r--r-- 1 root root 3463 Feb 12 08:41 mime.types
-rw-r--r-- 1 root root 1022 Mar  4 21:15 nginx.conf
-rw-r--r-- 1 root root  596 Feb 12 08:41 scgi_params
drwxr-xr-x 2 root root 4096 Mar  4 21:15 sites-available
drwxr-xr-x 2 root root 4096 Mar  4 21:19 sites-enabled
-rw-r--r-- 1 root root  623 Feb 12 08:41 uwsgi_params
-rw-r--r-- 1 root root 3610 Feb 12 08:41 win-utf

Спасибо за вашу помощь заранее!

Изменить 1: отображение содержимого sites-enabled папка с ls -l:

root@site.com:/etc/nginx/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 3 Mar  5 10:23 www -> www

Окончательный ответ

Итак, после помощи @Insyte и @Michael Hampton, я понял, как иногда воспроизводить мою ошибку. Сценарий разыгрывался следующим образом:

root@site.com:/etc/nginx# cd sites-available
root@site.com:/etc/nginx/sites-available# ls
www
root@site.com:/etc/nginx/sites-available# ln -s www /etc/nginx/sites-enabled/www
root@site.com:/etc/nginx/sites-available# cd /etc/nginx/sites-enabled
root@site.com:/etc/nginx/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 3 Mar  5 10:48 www -> www

Я не знаю «почему», но оказывается, что если я каждый раз использую полные абсолютные пути, то проблемы не существует.

Вам каким-то образом удалось создать символическую ссылку, которая ведет сама на себя. Я даже не знал, что вы можете это сделать, но совершенно уверен, что это не даст желаемого результата.

Чтобы исправить это, удалите символическую ссылку и заново создайте ее правильно.

rm -f /etc/nginx/sites-enabled/www

Или просто используйте -f возможность ln и он может удалить для вас недопустимую символическую ссылку.

ln -fs /etc/nginx/sites-available/www /etc/nginx/sites-enabled/www

Итак, у вас есть символическая ссылка, которая ведет к самой себе. Я не понимаю, как это возможно с помощью команды, которую вы указали в начале своего вопроса, поэтому я подозреваю, что эта конкретная символическая ссылка была создана по-другому.

Я могу воспроизвести ваш сценарий так:

sazerac:~ insyte$ cd testlinks/
sazerac:~/testlinks insyte$ ls
sazerac:~/testlinks insyte$ ln -s www www
sazerac:~/testlinks insyte$ ls -l
total 8
lrwxr-xr-x  1 insyte  staff  3 Mar  5 10:33 www -> www

Попробуем эксперимент. Выполните следующие команды точно так, как указано:

echo "hello insyte" > /etc/nginx/sites-available/insyte
ln -s /etc/nginx/sites-available/insyte /etc/nginx/sites-enabled
ls -l /etc/nginx/sites-enabled|grep insyte
cat /etc/nginx/sites-enabled/insyte