ChatGPT解决这个技术问题 Extra ChatGPT

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

它正常工作。但是,如果我随后将其移至启用站点的目录,则链接将再次断开。

我可以通过文件管理器 GUI 创建软链接,但不能通过命令行。我也可以毫无问题地创建硬链接。

我怀疑这是一个权限问题,所以我尝试将目录和目录本身的所有权限设置为 777,并将所有者更改为 root 以外的其他内容,但仍然没有运气。

任何帮助将不胜感激,谢谢。

我知道问题已经得到解答,但我想指出您的错误在哪里,实际上非常简单,您需要在第二个参数中指定文件名,而不是第一个 sudo ln -s sites-available/ sites-enabled/foo.conf,同时站在 /etc/nginx 目录中

R
Rodney

您需要首先了解符号链接的目标是路径名。它可以是绝对的或相对于包含符号链接的目录

假设您在可用站点中有 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

这是我的 ls -l /etc/apache2/sites-enabled 的输出(第 1 行):

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

查看符号链接的目标如何相对于包含符号链接的目录(它以“..”开头,表示上一个目录)。

硬链接完全不同,因为硬链接的目标不是目录条目,而是文件系统 Inode。


好的,我现在看到了我的问题,我认为 ln 命令将为我解析路径,但是我现在看到我只需要指定目标的完整路径,或者从符号链接上的位置开始的相对路径。
B
Bedram Tamang

我的站点配置文件是站点可用文件夹中的 example.conf 所以你可以创建一个符号链接

ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/

我发现上面的命令更直观,因为您可以在登录终端后从任何地方编写上面的命令。而且您不必执行cd,因为上述路径是绝对的。
您仍然可以为目标使用相对路径,而不必使用 cd 例如 ln -s ../sites-available/example.conf /etc/nginx/sites-enabled/,因为当符号链接被解析时,它既不知道也不关心 ln 是从哪里运行的。 (ln 甚至可以在不同的机器上运行,然后复制符号链接)。相对路径(针对目标)的优点是,如果安装的根被移动,或者从不同的角度(例如容器内部与容器主机上,或 {5 内部与外部)查看,它仍然有效}
@Rodney我的意思是,如果您使用相对路径,您需要自己解决符号链接。有时../sites-available/example.conf路径是有效的,有时你需要做../../sites-available/example.conf等等,绝对路径可以从任何地方执行,不需要自己解析路径。
A
Atif Tariq

您可以像这样强制 ln 覆盖现有文件 ../sites-enabled/myproject

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

然后

sudo service nginx restart

e
embarker

要缩短每个 conf 文件的手动输入,您可以从启用站点的文件夹中尝试:

ln -s ../sites-available/*.conf .
sudo systemctl restart nginx

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅