2016-11-21 3 views
0

私は、特定のドメインに設定した設定に動的に調整する独自のCMSを開発しています。私のすべてのプロジェクトでリモートドメインにホストされた自分のCMSを実装する方法は?

私はちょうど私のローカルマシン上でこの全体のCMSを開発し、今私は複数のプロジェクトを持っている問題に直面して、異なるドメイン上の各(つまり、関連性の場合は、同じホストプロバイダーしかし、知りません?)。私のlocalhostでは、特定のCMSフォルダを指しているだけで問題はありません。

__例:私のCMSファイルが www.mycms.com/cms/よう www.mycms.comのサブディレクトリにあり、私のプロジェクトイストは www.project-a.com上でホストされています。

今、私はちょうどwww.mycms.com/cms/classes/user.phpのように私の複数のCMSファイルをインクルードする必要があると想定など

これは私にpermission deniedエラーを与え、ウェブ上の誰もがあるため、セキュリティリスクのallow_url_fopen反対のようですので、私がする必要があります毎回/cms/のすべてのファイルを各ドメインに入れることなく、この作業を行う他の可能性があるかどうかを知ってください。それは、たとえマイナーなものを変更したとしても、常に各ドメインにすべてのCMSファイルを別々にアップロードするよう強制します。

これはGoogle MapsのAPIか、また、単にリモートのファイルを含める何かのようなAPIにcompareableであれば、私は知らないのですか? (私の知る限り)

私のオプションは何ですか?オプションが残っていない場合は、allow_url_fopenを使用して再考する必要がありますが、攻撃などを防ぐためのセキュリティ方法を実装していますか?

+0

この回答を確認する、http://stackoverflow.com/questions/7341962/what-is-the-best-way-to-share-common-code-such-as-domain-classes-between-two-o – user3099298

+0

ありがとうございますが、これはJavaに関するものであり、この目標を達成するためにGradleのようないくつかのインポートテクニックがあるので、これは私にはあまり役に立ちません。 – AlexioVay

+0

可能な回答が多すぎるか、この回答の回答が長すぎる可能性があります。回答セットを絞り込むか、いくつかの段落で回答できる問題を特定するための詳細を追加してください。 –

答えて

2

使用することができます:あなたは、あなたのサーバへのルートアクセスの種類を持って

  • を、あなたが入力することができますあなたのWebサーバーの設定。
  • Webベースの開発では経験が少ない(実際には自分のCMSを構築していると推測されます; allow_url_includeのほうがallow_url_includeは役に立ちません)魔法のようにリモートサーバーに接続し、サーバー側のようなPHPファイルをロードするallow_url_includeはセキュリティ上のリスクのために必ず無効にする必要があります; allow_url_includeもプロジェクトのパフォーマンスを大幅に低下させる可能性がありますMaps API) - 怒らせるつもりはありません!

私はallow_url_fopenallow_url_includeでの問題に対処してみましょう:

  • allow_url_fopenallow_url_include潜在的なセキュリティリスクを開くためにあなたを必要とする:
    • allow_url_*ソース - を公開するためにあなたを必要としますhttpを介してアプリケーションのコード私の推測された仮定に基づいて、あなたはむしろ初心者です、私は潜在的な攻撃者が、簡単にいくつかのハッキングを策定する方法を見つけるだろうというリスクを暗示します。不公平な一般化ですが、若い開発者のソースコードを見直すと、ほとんどの場合そうです。
    • アプリケーションの第2の潜在的にハッキング可能な層があり、あらゆる種類のPHPコードを発行することができます。
  • メンテナンスやハードウェア/ソフトウェアの問題によりダウンタイムが発生する可能性のあるチェーン部分が追加されています。これは、Webサービス(RESTなど)を介してコンテンツにアクセスできるようにする場合にも当てはまります。
  • allow_url_fopenallow_url_includeのWebサービスであっても、CMSのパフォーマンスが大幅に低下する可能性があります。これは、(通常ははるかに優れた接続の)ローカルストレージではなく、ネットワーク経由でストリーミングされるためです。

ソリューション1)最も一般的な解決策は、すべてのトラフィックを指示するなどのapache、nginxの/ニス)(同じサーバー-IPにすべてを指し、あなたのWebサーバを設定するには、ドメインのDNS AおよびAAAAレコードを設定するには、あります単一の仮想ホストに割り当てます。あなたのCMSは、異なるの起点アドレスからのリクエストを処理しなければなりません。あなたは、スーパーグローバル$_SERVER['HTTP_HOST'] -variableのwhatsに基づいて適切なコンテンツを配信することができます。この変数は、サーバー環境が逆プロキシの背後にある場合(これはユーザーが分かりますが、訪問者ごとに異なるわけではありません)、異なる名前を付けられます。

  • ステップ1:DNS-Resolution:あなたのプロジェクト - a.xyzはcmsサーバーのIPを指します。
  • Step2:あなたのウェブサーバーは、プロジェクト-aで何かをしなければならないことが分かっています。XYZ
  • ステップ3:あなたのウェブサーバは、あなたのCMS
  • ステップ4への要求を指示します。あなたのCMSは$_SERVER['HTTP_HOST']から実際に要求されたホストを解決
  • ステップ5:あなたのCMSは、要求されたホスト名
に属する、コンテンツを発します

解決策2)あなたの要求が示唆しているようにそれらのプロジェクトを物理的に分離したい場合は、複数の宛先に変更をプッシュできるさまざまな展開システムを見てみることができます。 CMSは、cm-system-core-files(PHPファイル)と実際のコンテンツを別々に扱い、コンテンツに影響を与えずにコアファイルを更新できる方法で構築する必要があります。ここにはほとんどオプションがありません。 GitやSVNのようなSCMシステムを使って、変更を簡単にリモートプロジェクトと同期させることができますが、これはむしろお勧めです。

解決策3)あなたは実際に何らかの種類のWebサービスを構築することができます(RESTは最近よく使用される技術です)。したがって、project-a.zyxでホストされているWebプロジェクトは、シンプルなシンクライアントであり、ほとんどがリクエストをある種の終点にリダイレクトします。あなたは通常、ここで何らかの種類のhttpsベース認証も必要とします。これは、クライアントがHTTP(共有ホスティング環境では無効になることがあります)を介して別のエンドポイントからコンテンツ(実際のソースコードではありません)を要求できるようにすることです。あなたの要求は、理想的な選択肢ではないことを暗示しているように見えるので、最初の解決策を実際に検討する必要があります。

+1

うわー、あなたの答えは評価不能です、ありがとう! – AlexioVay

1

1.)これを行わないでください。

各サイトには独立したライブラリが必要です。ある日、CMSの新しい機能を追加したり機能を変更したりして、あなたのサイトのの1つを変更するとします。突然、この変更をテストする必要がありますすべてのあなたのサイトのあなたがそれをロールアウトする前に。すべてのファイルをバージョン管理し、各サイトにそれらのファイルを展開することが現実的になると良い方法です。

2)にする必要があります。ホスティングプロバイダには、すべてのドメインに対して1つのファイルスペースがありますが、問題はありません。 例えば、見えファイル構造を作成するように:各Webサイトの

~/public_html/cms/ 
~/public_html/project-a.com/ 
~/public_html/project-b.com/ 
… 

(ちょうどそのサイトのまたは可能性のindex.phpのconfigファイルであれば、そのすべてのトラフィックの通過ルート):

define(‘CMS_PATH’, /root/path/to/users/your-user-name/public_html/cms/‘); 
あなたが手ですべてのサイトのパスを定義する必要はありませんので、あなたがここにも少し賢い取得することができます

require CMS_PATH . ‘classes/user.php’; 

今、各サイトは、CMSとしてファイルにアクセスすることができます。あなたはファイルに定義している場合~/public_html/project-a.com/index.phpあなたは私の答えは以下の仮定に基づいている

define(‘CMS_PATH’, dirname(dirname(__FILE__)) . '/cms/'); 
関連する問題