我之前已经多次实现了我的“目标”,但遇到了一个我以前从未遇到过的问题。我在 Ubuntu 12.04 LTS 上用 Nginx 设置了一个 Web 服务器。我按照通常的方式设置了我的系统,并尝试从 sites-available 到 sites-enabled 目录为站点“虚拟主机”创建符号链接。通常,这可以通过从主 nginx 目录(以 root 身份)执行以下命令来实现:
ln -s /etc/nginx/sites-available/site.com /etc/nginx/sites-enabled/site.com
虽然我可以进入启用的目录并查看符号链接是否“有效”,但当我尝试直接在启用站点的目录中编辑文件时,我看到文件为空白并被视为新文件。因此,我的服务器无法按预期工作,页面无法加载。当我简单地将文件硬复制或硬链接到目录中时:
在 /etc/nginx/sites-available/site.com /etc/nginx/sites-enabled/site.com
一切运行正常,没有任何问题。然而,我却被困在同一个文件的两个副本中,并且没有符号链接。
到底发生了什么?
注意:这是我当前 Nginx 目录的结构:
[电子邮件保护]:/etc/nginx# ls -l 共 44 drwxr-xr-x 2 root root 4096 3月 4 17:28 conf.d -rw-r--r-- 1 root root 964 二月 12 08:41 fastcgi_params -rw-r--r-- 1 root root 2837 二月 12 08:41 koi-utf -rw-r--r-- 1 root root 2223 二月 12 08:41 koi-win -rw-r--r-- 1 root root 3463 二月 12 08:41 mime.types -rw-r--r-- 1 root root 1022 3月 4 21:15 nginx.conf -rw-r--r-- 1 root root 596 二月 12 08:41 scgi_params drwxr-xr-x 2 root root 4096 3月 4 21:15 站点可用 drwxr-xr-x 2 root root 4096 3月 4 21:19 已启用站点 -rw-r--r-- 1 root root 623 二月 12 08:41 uwsgi_params -rw-r--r-- 1 root root 3610 二月 12 08:41 win-utf
提前感谢您的帮助!
sites-enabled
编辑 1:显示文件夹的内容ls -l
:
[电子邮件保护]:/etc/nginx/sites-enabled# ls -l 共 0 lrwxrwxrwx 1 root root 3 3 月 5 日 10:23 www -> www
最终答案
因此,在 @Insyte 和 @Michael Hampton 的帮助下,我找到了如何偶尔重现我的错误的方法。场景如下:
[电子邮件保护]:/etc/nginx# cd sites-available [电子邮件保护]:/etc/nginx/sites-available# ls 万维网 [电子邮件保护]:/etc/nginx/sites-available# ln -s www /etc/nginx/sites-enabled/www [电子邮件保护]:/etc/nginx/sites-available# cd /etc/nginx/sites-enabled [电子邮件保护]:/etc/nginx/sites-enabled# ls -l 共 0 lrwxrwxrwx 1 root root 3 3 月 5 日 10:48 www -> www
我不知道“为什么”,但事实证明,如果我每次都使用完整的绝对路径,那么这个问题就不存在。
答案1
所以你那里有一个符号链接,它链接回自身。我不明白如何使用你在问题顶部列出的命令来实现这一点,所以我怀疑这个特定的符号链接是以不同的方式创建的。
我可以像这样复制你的场景:
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
答案2
您不知怎么就成功创建了一个链接到自身的符号链接。我甚至不知道您可以这样做,但我确信这不会产生您想要的结果。
要修复此问题,请删除符号链接并正确重新创建它。
rm -f /etc/nginx/sites-enabled/www
或者只需使用该-f
选项ln
,它可能会为您删除无效的符号链接。
ln -fs /etc/nginx/sites-available/www /etc/nginx/sites-enabled/www
答案3
出于习惯:
- 我总是使用它
ln -sfn
来确保所有旧链接都能顺利更新。 - 我总是使用绝对路径:
ln -sfn /absolute/path/to/original /absolute/path/to/link
這可以幫助我避免許多困難。