Сайты с поддержкой Nginx, сайты доступны: невозможно создать программную ссылку между файлами конфигурации в Ubuntu 12.04.

Я пытаюсь создать программные ссылки между конфигурационными файлами, содержащими серверные блоки, в каталогах с поддержкой сайтов и доступных сайтов в /etc/nginx/.

Команда, которую я использую:

sudo ln -s sites-available/foo.conf sites-enabled/

Когда я затем выполняю:

ls -l

Результат:

lrwxrwxrwx 1 parallels parallels 27 Aug  6 20:44 immigrationinformation.conf -> immigrationinformation.conf

где часть immigrationinformation.conf -> immigrationinformation.conf имеет уголь с красным шрифтом.

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

Когда я создаю программную ссылку в каталоге, доступном для сайтов, т.е.

sudo ln -s sites-available/foo.conf sites-available/foo_link.conf

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

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

Я подозревал, что это проблема с разрешениями, поэтому я поиграл с установкой всех разрешений на 777 как для каталогов, так и для самих каталогов, а также изменил владельцев на кого-то другого, кроме root, но все равно безуспешно.

Любая помощь будет мне очень признательна, спасибо.


person iamyojimbo    schedule 06.08.2013    source источник
comment
Я знаю, что на вопрос уже дан ответ, но я хотел указать, где была ваша ошибка, на самом деле это было очень просто, вам нужно было указать имя файла во втором аргументе, а не в первом sudo ln -s sites-available/ sites-enabled/foo.conf, находясь внутри каталога /etc/nginx   -  person Mohammad AbuShady    schedule 12.08.2013


Ответы (3)


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

Предполагая, что у вас есть foo.conf в доступных сайтах

Пытаться

cd sites-enabled
sudo ln -s ../sites-available/foo.conf .
ls -l

Теперь у вас будет символическая ссылка на сайтах с именем foo.conf с целью ../sites-available/foo.conf.

Просто для ясности: нормальная конфигурация Apache заключается в том, что файлы конфигурации для потенциальных сайтов находятся в site-available, а символические ссылки для включенных сайтов — в site-enabled, указывая на цели в site-available. Судя по тому, как вы описываете свою настройку, это не совсем так, но это не ваша основная проблема.

Если вы хотите, чтобы символическая ссылка ВСЕГДА указывала на один и тот же файл, независимо от того, где находится символическая ссылка, тогда целью должен быть полный путь.

ln -s /etc/apache2/sites-available/foo.conf mysimlink-whatever.conf

Вот (строка 1) вывод моей команды ls -l /etc/apache2/sites-enabled:

lrwxrwxrwx 1 root root  26 Jun 24 21:06 000-default -> ../sites-available/default

Посмотрите, как цель символической ссылки относится к каталогу, содержащему символическую ссылку (она начинается с «..», что означает переход на один каталог вверх).

Жесткие ссылки совершенно разные, потому что целью жесткой ссылки является не запись в каталоге, а Inode файловой системы.

person Rodney    schedule 06.08.2013
comment
Хорошо, теперь я вижу свою проблему, я думал, что команда ln будет разрешать путь для меня, однако теперь я вижу, что мне просто нужно указать полный путь к цели или относительный путь от местоположения по символической ссылке. - person iamyojimbo; 07.08.2013

Файл конфигурации моего сайта - example.conf в папке sites-available. Таким образом, вы можете создать символическую ссылку как

ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
person Bedram Tamang    schedule 29.06.2020
comment
Я нашел приведенную выше команду более интуитивно понятной, потому что вы можете написать ее из любого места после входа в терминал. И вам не нужно делать cd, так как указанный выше путь является абсолютным. - person Bedram Tamang; 29.06.2020

Вы можете перезаписать существующий файл ../sites-enabled/myproject, задав ln следующим образом:

sudo ln -sf ../sites-available/myproject ../sites-enabled/

тогда

sudo service nginx restart
person Atif Tariq    schedule 17.06.2021