web-dev-qa-db-ja.com

Linux Apacheサーバー上のドメインおよびサブドメインに通常使用されるディレクトリ構造

OSXで以前にMAMPとAMPPSを使用したことがありますが、単にテストを目的としていますが、この質問はApacheサーバー上の実際のproduction Webサイトに関するものです。

ドメイン名がwww.example.comの場合-これがLinux(おそらくDebianまたはUbuntu)にSudo apt-getとしてインストールされたApacheにあり、MAMPやAMPPなどのGUIを介していない場合は/var/www/public_html/www.example.comまたは/var/www/public_html/exampleになります

/var/www/public_html/yoururlhereは、Linuxサーバーで最も一般的なタイプのセットアップですか?

ただし、/var/www/www.example.comまたは/var/www/exampleでもかまいませんか?

たとえば、http://canada.example.comなどのサブドメインがある場合、次のようになります。

/var/www/public_html/example/canada

または

/var/www/public_html/www.example.com/canada

http://www.example.com/~site1のようなURLの場合、それは/var/www/public_html/example/site1でしょうか、それとも何らかの形式のmod_rewriteが必要でしょうか?

一般的に、LinuxホストでApacheを使用するURL、特に主要なWebホスティング会社でこのようなことを行う最も一般的な方法は何ですか?

5
avenas8808

/var/www/public_html/www.example.comの下にあるのではなく、/ var/www/public_html/exampleにあるのでしょうか

これは完全に個人的な呼び出しです。選択したアンカーパスとその設定方法の両方に対して、(すべての一般的な場合において)技術的な影響はまったくありません。

そのため、何をするかは管理者次第です。最適なスキームを選択するために考慮する必要があるいくつかの考慮事項:

  • パーミッションはどのように処理されますか? 1人のユーザーがすべてのWebサイトにアクセスできますか、それともWebサイトごとに1人ですか?アクセス方法:sshsftpftpなど.
  • ウェブサイトはどのように運営されていますか?同じhttpdまたはApacheユーザーアカウントの下にありますか、またはWebサイトごとに個別のシステムアカウントを持っていますか?
  • バックアップの処理方法すべてを一緒に行う代わりに、いくつかのきめの細かい(1つのWebサイトのみ)を行う必要がありますか?
  • データとクォータの量:ある時点で同じホスト上のすべてのWebサイトがI/OアクセスとCPUを奪い合うので、ある時点で別のホストに移動したい場合は、どのようなコピーを行う必要があります。

そして、より自然に「読む」ものと、たとえば、ファイルシステム上のディレクトリとしてそのまま存在する場合、ウェブサイト名でオートコンプリートを使用する機能。

「マス」仮想ホスティングでは、他のスキームを見つけることもできます。

  • ドメイン内のラベルの反転(基本的にドメイン名は右から左に読み取られるため):/var/www/public_html/com/example/canada/var/www/public_html/com/example/wwwなど.

  • 特定のディレクトリ内のファイル/ディレクトリが多すぎないようにするには(ファイルシステムがこのケースをうまく処理しないため)、以前のポイントに基づいて、ある種のハッシュを行います。そうしないと、www十分な識別:/srv/web/example/f/i/www.first.example/srv/web/example/s/e/www.second.example/srv/web/example/t/h/www.third.exampleなど(Webサイトwww.first.examplewww.second.examplewww.third.exampleなど)

他のスキームを想像できると思います。ウェブサイトが何らかのパネルで管理されている場合、パネル自体がファイルシステム上で物事を整理する独自の方法を備えている場合があります。

http://www.example.com/~site1 のようなURLの場合

通常、Unixの標準Apacheは~をパスの非常に具体的な要素として使用し、これはmod_userdirによって処理され、以前のURLを/home/site1/public_html if site1にマップします。ボックスのUnixユーザーです。しかし、これはすべてApacheの構成に依存します...

https://httpd.Apache.org/docs/2.4/mod/mod_userdir.html を参照してください

2
Patrick Mevzek

Webサイトは、ほぼすべてのディレクトリから提供できます。 /var/www/srv/www、および/home/usernameを見ました。 このスレッド によれば、srvディレクトリは「このシステムから提供されるデータ」用であるため、論理的に思えます。最近私が普段使っているものですが、/var/wwwは今でも最も一般的だと思います。

複数のサイトをホストするという点では、標準的な手順はサイトごとに個別のディレクトリを使用することです。多くの場合、それぞれに「パブリック」サブディレクトリがあります。それらは、ドメイン、またはそれらを区別するのに役立つ別の名前を付けることができます。たとえば、/var/www/example.com/public/var/www/sub.example.com/public

ホスティングしているサイトに応じて、ログ用に個別のディレクトリを使用することができます。 /var/log/Apache2/example.comなどの複数のディレクトリを使用するか、パブリックディレクトリの隣にlogsディレクトリ、つまり/var/www/example.com/logsを使用できます。

1
DisgruntledGoat

これは、答えるのが少し難しい質問です。質問にUbuntuが表示されてうれしいです。ただし、欠けているのは、ホスティングを使用するか、コントロールパネルを使用するかです。これはトリッキーになるところです。説明させてください。

数年前、Apache 2.0がリリースされたばかりの頃に、構造的な変更が行われましたが、それは常に実行されませんでした。以前は、すべてのサイト構成はApache自体の構成であるhttpd.confに配置されていました。これは必ずしも悪いことではありませんでしたが、より安全で管理しやすいように構成に積極的な変更が加えられました。この変更には2つの問題があり、現在も存在しています。 1つは、ApacheがさまざまなOSインストール用のビルドを作成しなかったこと、2つは、すべてのコントロールパネルが当時のベストプラクティスに従わず、変更もなかったことです。

たとえば、Ubuntuは設定スキーマの更新を暗示していましたが、Redhatはしませんでした。コントロールパネル側では、Webmin/Virtualminは構成スキーマを更新しましたが、cPanelは更新しませんでした。私がどこに行くのか見てください?

ホスティングには、cPanelが広く使用されています。ここでは混乱を頻繁にクリーンアップするため、これは残念です。自分のサイトをホストするほとんどの人にとって、決して存在しないはずのセキュリティ上の問題と運用上の問題を見つけます。

私はUbuntuのみを使用しているため、Apacheのインストールは良好であり、WebminまたはVirtualminを使用する場合もそのままであると言えます。ただし、cPanelの使用を選択した場合、Apacheの構成は可能な限り貧弱になります。コントロールパネルを使用しないことを選択した場合は、問題ありません。

ここで何が起こるかです。

RedhatインストールおよびcPanelインストールは、/ var/httpd/htmlまたは/ var/www/public_htmlにWebスペースを作成します。このディレクトリは、サイトが小さいときの古い伝統に従って小さなパーティションに配置されます。これは常に当てはまるわけではありませんが、サイトオペレーターがディスクスペースをすばやく簡単に使い果たすことが何度もあります。

適切にインストールすると、/ home /ディレクトリまたは/ var/www /ディレクトリの下にデフォルトのサイトが作成され、/ etc/Apache2/sites-available /および/ etc/Apache2/sites-enabled /ディレクトリの下にサイトごとに個別の構成ファイルが作成されます。デフォルトの構成ファイルは000-default.confであり、大部分はそのままにしておく必要があります。これは、すべてのIPベースの要求と、サーバー上に存在しないドメインの要求を処理するキャッチオールサイトを作成するためです。 000-default.confファイルをコピーして、新しいサイトを作成できます。通常、ファイル名の形式はexample.com.confで、sites-availableディレクトリに作成されます。

Webスペースに関しては、これは/home/example.com/や/var/www/example.comなどの構成ファイルと一致する必要があります。個々のサイトに/ var/www /ディレクトリを使用するのは好きではありません。多くの場合、権限の競合が発生します。デフォルトのサイト用に/ var/www/htmlが保存されている場合は、保存します。それ以外の場合、アクセス許可の設定に慣れている場合は、アクセス許可の競合のない/ home /ディレクトリを使用することをお勧めします。

もちろん、Sudo a2ensite example.com.confでサイトを適切に有効にし、Sudo service Apache2 restartでApacheを再起動する必要があります。

では、/ var/www /の使用の何が問題になっていますか? Apacheは、ツリー全体に存在する必要がある特定のアクセス許可で実行されます。たとえば、cPanelの機能に従う場合、最初のサイトは/ var/www/public_html /の下に作成されますが、それ自体は悪くありません。ただし、次のサイトは/ var/www/public_html/example /の下に作成され、www.firstsite.com/example /として作成された最初のサイトのディレクトリとして使用可能になります。悪い。ひどい。さらに、すべてのサイトは1人のユーザー(Apacheのデフォルトユーザー)で実行されます。これは、ルートを含むさまざまな名前にすることができます。ルートが使用されることは一般的ではありません。本当に非特権ユーザーでなければなりません。

サイトを/ var/www /以外のディレクトリ内の完全に別個のディレクトリにセグメント化すると、Apacheが使用するグループに追加された異なるユーザーの下で各サイトを実行できます。これはコメントに記載されているサンドボックス化です。デフォルトのサイトをそのままにしておくと、意図的な攻撃などの不正なリクエストをさらにサンドボックスできます。

構成例については、この回答にいくつかあります。 Virtualhost config:routing and wildcard usage これらは議論の余地がなく、上手く行かなかった場合にうまく機能するはずです。

1
closetnoc