web-dev-qa-db-ja.com

Linuxシンボリックリンクが期待どおりに機能しない

これまでに何度か「目標」を達成しましたが、これまでに経験したことのない問題に直面しています。 Ubuntu 12.04 LTSでNginxを使用してウェブサーバーをセットアップしています。システムを通常どおりにセットアップし、sites-availableからサイトが有効なディレクトリへのサイト「仮想ホスト」のシンボリックリンクを作成しようとしています。通常、これは(rootとして)プライマリnginxディレクトリから次のようにして実現されます。

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

問題なく動作します。ただし、同じファイルの2つのコピーがあり、シンボリックリンクがありません。

一体何を与えるのですか?

注:ここに私の現在のNginxディレクトリの構造があります:

 [email protected]:/ etc/nginx#ls -l 
 total 44 
 drwxr-xr-x 2 root root 4096 Mar 4 17:28 conf.d 
-rw-r--r-- 1ルートルート964 2月12日08:41 fastcgi_params 
-rw-r--r-- 1ルートルート2837 2月12日08:41 koi-utf 
-rw-r--r-- 1ルートルート2223 2月12日08:41 koi-win 
-rw-r--r-- 1ルートルート3463 2月12日08:41 mime.types 
-rw-r--r-- 1 root root 1022 Mar 4 21:15 nginx.conf 
-rw-r--r-- 1 root root 596 Feb 12 08:41 scgi_params 
 drwxr-xr-x 2 root root 4096 Mar 4 21:15 sites-available 
 drwxr-xr-x 2 root root 4096 Mar 4 21:19 sites-enabled 
- rw-r--r-- 1ルートルート623 2月12日08:41 uwsgi_params 
-rw-r--r-- 1ルートルート3610 2月12日08:41 win-utf 

よろしくお願いします!

編集1:sites-enabledls -lフォルダーの内容を表示:

 [email protected]:/ etc/nginx/sites-enabled#ls -l 
 total 0 
 lrwxrwxrwx 1 root root 3 Mar 5 10:23 www-> www 

最終回答

@Insyteと@Michael Hamptonの助けを借りて、時々エラーを再現する方法を見つけました。シナリオは次のように展開されました。

 [email protected]:/ etc/nginx#cd sites-available 
 [email protected]:/ etc/nginx/sites-available#ls 
 www 
 [email protected]:/ etc/nginx/sites-available#ln -s www /etc/nginx/sites-enabled/www
[email protected]:/etc/nginx/sites-available #cd /etc/nginx/sites-enabled
[email protected]:/etc/nginx/sites-enabled# ls -l 
 total 0 
 lrwxrwxrwx 1 root root 3 3月5日10:48 www-> www 

私は「なぜ」に気づいていませんが、毎回完全な絶対パスを使用する場合、問題は存在しないことがわかりました。

5
JM4

だからあなたが持っているものはそれ自体に戻るリンクのシンボリックリンクです。質問の冒頭に挙げたコマンドでそれがどのように可能になるかはわかりません。そのため、この特定のシンボリックリンクは別の方法で作成されたと思います。

私はあなたのシナリオを次のように複製できます:

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
5
Insyte

どういうわけか、自分自身にリンクするシンボリックリンクを作成できました。あなたがそれができるとさえ知りませんでしたが、あなたが望む結果をもたらさないと確信しています。

修正するには、シンボリックリンクを削除して、正しく再作成します。

rm -f /etc/nginx/sites-enabled/www

または、単に-fオプションをlnに追加すると、無効なシンボリックリンクが削除される可能性があります。

ln -fs /etc/nginx/sites-available/www /etc/nginx/sites-enabled/www
5
Michael Hampton