0

かなり複雑な開発環境を仮想 Ubuntu 12.04 サーバーとしてセットアップしようとしています。

通常のローカル開発状況で期待されるように、ファイルを編集し、ページの更新時に変更をすぐに確認できるように、ホスト オペレーティング システム (ミント 14) の php ソース コードを ~/www/site1 に置きます。永続的な共有フォルダーとしてvirtualboxに追加し、仮想マシンにマウントしました

mount -t vboxsf site1 /var/www

ls /var/www -la を実行すると、すべての php ファイルが表示されますが、ブラウザーから仮想マシンにアクセスしようとすると、ページに File not found エラーが表示され、サブドメイン レポートの error.logが stderr で送信された FastCGI を報告します。 : 「アップストリームからの応答ヘッダーの読み取り中に「プライマリスクリプトが不明です」 . 例外はサブドメイン phpmyadmin.virtualmachine で、完全にロードされるため、nginx が要求されたサブドメインの正しいファイル構造を提供していることがわかります。

テストとして、/var/test を指すサブドメイン info.virtualmachine を作成しました。index.php は最も単純な phpinfo() であり、これが機能するため、nginx がマウントされた vboxsf ファイル構造 /var/www を読み取っていないと推測できます。ゲスト OS 上のすべての「ローカル」ファイルが表示可能であるためです。

Nginx は、他のすべてのサービスと同様に root として実行するように構成されています。これは nginx の既知のバグですか、または nginx がマウントされた vboxsf 共有を認識できるように構成する必要がありますか?

4

1 に答える 1

0

これに対する答えを見つけましたが、それはファイルのアクセス許可とphp-fpmの仕組みに慣れていないことが原因であることが判明しました。

まず、仮想サーバーで root ユーザーを有効にし、supervisord を使用してデーモンを制御し、すべてを root として実行するように設定しました。php-fpm の親プロセスは root として実行されますが、すべての子プロセスは www-data として実行されていました。共有をルートとしてマウントすると、php-fpm の子プロセスがフォルダーを使用できなくなり、nginx がファイルが見つからないというエラーをスローし、vboxsf の動作方法が原因で、共有を chown または chmod できませんでした。

次のコマンドを使用して /etc/fstab に共有を追加することで、この問題を回避しました。

sharename     /var/www     vboxsf    rw,uid=33,gid=33     0      0

これにより、www-data に読み取り権限を与える www-data ユーザーの下で共有をマウントできるようになりました。

于 2013-01-20T10:19:35.033 に答える