Linux 符号链接无法按预期工作

JM4*_*JM4 11 linux ubuntu nginx symbolic-link ubuntu-12.04

我之前已经多次实现我的“目标”,但遇到了一个我以前从未遇到过的问题。我在 Ubuntu 12.04 LTS 上使用 Nginx 设置了网络服务器。我按照通常的方式设置了系统,并尝试为站点“虚拟主机”从可用站点到启用站点的目录创建符号链接。通常,这是通过主 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
共 44 个
drwxr-xr-x 2 根 4096 Mar 4 17:28 conf.d
-rw-r--r-- 1 根根 964 Feb 12 08:41 fastcgi_params
-rw-r--r-- 1 根根 2837 Feb 12 08:41 koi-utf
-rw-r--r-- 1 根 2223 Feb 12 08:41 koi-win
-rw-r--r-- 1 根根 3463 Feb 12 08:41 mime.types
-rw-r--r-- 1 root root 1022 Mar 4 21:15 nginx.conf
-rw-r--r-- 1 根根 596 Feb 12 08:41 scgi_params
drwxr-xr-x 2 root root 4096 Mar 4 21:15 站点可用
drwxr-xr-x 2 root root 4096 Mar 4 21:19 启用站点
-rw-r--r-- 1 根 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
共 0
lrwxrwxrwx 1 root root 3 Mar 5 10:23 www -> www

最终答案

所以在@Insyte 和@Michael Hampton 的帮助下,我想出了如何偶尔重现我的错误。剧情如下:

root@site.com:/etc/nginx# cd 站点可用
root@site.com:/etc/nginx/sites-available#ls
万维网
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
共 0
lrwxrwxrwx 1 root root 3 Mar 5 10:48 www -> www

我不知道“为什么”,但事实证明,如果我每次都使用完整的绝对路径,那么问题就不存在。

Ins*_*yte 8

所以你所拥有的是一个符号链接,它链接回自身。我不知道您在问题顶部列出的命令是如何实现的,因此我怀疑此特定符号链接的创建方式不同。

我可以像这样复制你的场景:

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
Run Code Online (Sandbox Code Playgroud)

让我们尝试一个实验。完全按照列出的方式执行以下命令:

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
Run Code Online (Sandbox Code Playgroud)


Mic*_*ton 6

您以某种方式设法创建了一个链接到自身的符号链接。我什至不知道你可以这样做,但我很确定它不会有你想要的结果。

要修复它,请删除符号链接并正确重新创建它。

rm -f /etc/nginx/sites-enabled/www
Run Code Online (Sandbox Code Playgroud)

或者只是使用-f选项ln,它可能会为您删除无效的符号链接。

ln -fs /etc/nginx/sites-available/www /etc/nginx/sites-enabled/www
Run Code Online (Sandbox Code Playgroud)

  • 符号链接完全按照您指定的方式创建,无论是相对路径还是绝对路径。如果是相对的,它将相对于创建符号链接的目录,_不是_创建它时所在的目录。 (2认同)