Сайты с поддержкой 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, но все же безуспешно.
Любая помощь мне бы очень понравилась, спасибо.
5 ответов
Вы должны начать с понимания того, что целью символической ссылки является путь. И это может быть абсолютным или относительно каталога, который содержит символическую ссылку
Предполагая, что у вас есть foo.conf на сайтах, доступных
Пытаться
cd sites-enabled
sudo ln -s ../sites-available/foo.conf .
ls -l
Теперь у вас будет символическая ссылка на сайтах с включенным именем foo.conf, у которой есть цель../sites-available/foo.conf
Просто для ясности, обычная конфигурация для Apache состоит в том, что файлы конфигурации для потенциальных сайтов располагаются на доступных сайтах, а символические ссылки для включенных сайтов - на включенных сайтах, указывая на цели на доступных сайтах. Это не совсем так, как вы описываете свои настройки, но это не ваша основная проблема.
Если вы хотите, чтобы символическая ссылка на ВСЕГДА указывала на один и тот же файл, независимо от того, где находится символическая ссылка, то целью должен быть полный путь.
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 системы хранения.
Файл конфигурации моего сайта - это example.conf в папке, доступной для сайтов. Таким образом, вы можете создать символическую ссылку как
ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
Вы можете перезаписать существующий файл ../sites-enabled/myproject, установив ln следующим образом
sudo ln -sf ../sites-available/myproject ../sites-enabled/
тогда
sudo service nginx restart
Чтобы сократить ручной ввод каждого файла conf, вы можете попробовать из папки с поддержкой сайтов:
ln -s ../sites-available/*.conf .
sudo systemctl restart nginx
В моем случае в папке, доступной для сайтов, есть несколько сайтов.
Символические ссылки всех сайтов создаются одной командой.
ln -s /etc/nginx/sites-available/* /etc/nginx/sites-enabled/
Затем протестируйте и обновите nginx
# For testing nginx config
sudo nginx -t
# For updating nginx config
sudo nginx -s reload