nginx上の複数のWebサイト、1つのIP


14

だから私はデジタルオーシャンとnginxを使用しています。複数のWebサイト(プロジェクト)をホストしたいのですが、それぞれのドメインを購入したくないです。

1つのIPを使用してアクセスしながら、nginxとデジタルオーシャンで複数のウェブサイトをホストする方法はありますか?


異なるフォルダー(X.Y.Z.W/fooX.Y.Z.W/bar)でホストしますか?なぜそれらのドメインを取得できないのですか?(同じIPを複数のドメインに割り当てることができます)?
ムル

それには複数のドメインが必要です。ただし、無料のドメインサービスがあります。freenom.comは、無料の.tk、.ml、.ga、.cf、および.gqドメインを提供します。
TheWanderer

@muru彼らは複数のドメインにお金をかけたくないと思う。1つのURLに複数のWebサイトを配置する方法が必要です。
TheWanderer

@ Zacharee1は、1つのドメインのみを必要とし、サブドメインを実行できます。それを拒否した場合、悪意のあるIPベースの方法を実行する必要があります。使用しているアプリケーション/プロジェクトの種類によっては、「サブフォルダー」ロケーションメソッドをサポートできない場合があります。
トーマスウォード

@ThomasW。サブドメインは選択肢にならないだろうと思っていました
-TheWanderer

回答:


17

これを実現するには2つの方法があります。サブフォルダーの場所を使用して、すべてをIPアドレスで実行するか、1つのドメインを購入して、そのドメインに複数のサブドメインを用意する必要があります(ドメインを購入した場合、サブドメインに費用はかかりませんが、レジストラーに確認してください)。

IPアドレスを覚えなければならないのは非常に悪であり、他の人と情報を共有しようとすると、他の人がIPアドレスを覚えなければならないという同じ問題があるため、IPアドレスの方法はお勧めしません。


ドメイン名を使用しない、1つのIP、多くのサブフォルダーアプローチ

通知! 作業中のプロジェクトに関する情報はありません。多くの Webフレームワークは、実際のドメイン名が関連付けられていないと機能しないため、このアプローチを実行できるかどうかを判断するには、さらに詳しく知る必要があります。


警告:これらの例の継続的なテストでは、要求されたURIがURI内のサブディレクトリを含むため、「1つのドメイン、多くのサブディレクトリ」アプローチはバックエンドへのデータのリバースプロキシに親切に対応していません。これにより、バックエンドサーバーに適切な動作の問題が発生する可能性があります。

一方で、nginxこれに対して「悪」なアプローチを行う必要があります-1つのIPアドレス、多くのdocroot、およびサブフォルダーの場所。これは非常に悪いアプローチであり、一部のWebフレームワークで多くの問題を引き起こす可能性があります。

nginxリポジトリからのベースとしてデフォルトのインストールを想定した場合、各プロジェクトのサブディレクトリリクエストを処理するサイト構成を作成する必要があります。次に、適切な場所にシンボリックリンクする必要があります。

/etc/nginx/sites-available/my-projects以下を使用して作成します(これをテンプレート/ガイドとして使用します-PHPまたはpythonなどで静的HTMLを使用し、動的Webアプリケーションを使用しない3つのプロジェクトを想定し、個々のロケーションブロックをコピーして、それに応じて新しいロケーションを作成できます。また、サーバーIPは1.2.3.4)です。

server {
    listen 80 default_server;

    server_name 1.2.3.4;

    location / {
        return 410;  # Default root of site won't exist.
    }

    location /proj1/ {
        alias /var/www/proj1;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj2/ {
        alias /var/www/proj2;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj3/ {
        alias /var/www/proj3;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }
}

次に、デフォルトの構成を置き換え(削除し)、追加します:

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled

そして、nginxサービスを再起動します。

# If on 14.04, use this:
sudo service nginx restart

# If on 15.10 or newer, use this:
sudo systemctl restart nginx

1つのドメイン、複数のサブドメインのアプローチ。

この回答セクションでは、1つのドメインと複数のサブドメインがあることを前提としています。これがない場合は、質問でこれを明確にしてください

nginx server {}構成内の各ブロックで、サーバー名を定義する必要があります。また、他の要求に対して「catch all」として4番目のサーバーブロックを設定する可能性があります。

例: 3つのプロジェクト、、、、proj1proj2ありproj3ます。というドメインがありますevil-projects.net(注:本当に存在しません)。3つの異なるサブドメインが必要ですnginx。1つのプロジェクトをポイントする構成ごとに1つです。私のサーバーは1.2.3.4にあり、すべてのサイトにサービスを提供します。

上記のシナリオでは、ドメインとサブドメイン、およびサーバー構成の2つの部分があります。

(1):DNS設定

ホストでDNSを設定して、DNSレコードに関して次のことが当てはまるようにします。

evil-projects.net  IN A  1.2.3.4
proj1.evil-projects.net  IN A  1.2.3.4
proj2.evil-projects.net  IN A  1.2.3.4
proj3.evil-projects.net  IN A  1.2.3.4

(2):サーバーでのNGINX構成(1.2.3.4)

次に、nginx構成について説明します。デフォルトのnginxセットアップとリポジトリのパッケージを使用することを想定しています(14.04を基本例として使用します)。/etc/nginx/sites-available最初に、4つの構成ファイルをに入れます。 問題のフォルダはによって所有されているため、これらのファイルを作成するsudoときに使用する必要がある場合がありますroot

/etc/nginx/sites-available/catch-all-これは、無効なドメインの「すべてをキャッチ」になります。HTTPエラーコード410(GONE)を返すのが好きです。

server {
    listen 80 default_server;

    server_name _;

    return 410;
}

次に、サイト/プロジェクトの構成をセットアップします。ただし、すべて静的ファイルであると想定します。これらはそれぞれ、サーバー上のプロジェクトごとに異なるWebディレクトリ(異なる「ドキュメントルート」)があることを意味します。

/etc/nginx/sites-available/proj1.evil-projects.net

server {
    listen 80;

    server_name proj1.evil-projects.net;

    root /var/www/proj1;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

/etc/nginx/sites-available/proj2.evil-projects.net

server {
    listen 80;

    server_name proj2.evil-projects.net;

    root /var/www/proj2;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

/etc/nginx/sites-available/proj3.evil-projects.net

server {
    listen 80;

    server_name proj3.evil-projects.net;

    root /var/www/proj3;
    index index.htm index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

次に、から「デフォルト」構成を削除して/etc/nginx/sites-enabled、独自の構成を追加する必要があります。繰り返しますが、sudoここで必要です。

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/

そして、nginxプロセスを再起動します。

# If on 14.04, use this:
sudo service nginx restart

# If on 15.04 or newer, use this:
sudo systemctl restart nginx

DNSが伝播すると、サイトは正常に機能します。


この構成では、proxy_cacheのブロックをどこに配置しますか?proj1、proj2、proj3がすべて異なるエンドポイントを持つ同じエンドポイントを持ち、異なるフォルダーに応答をキャッシュしたいとします。
-user305883

@ user305883それは新しい質問のようですね。
トーマス区
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.