だから私はデジタルオーシャンとnginxを使用しています。複数のWebサイト(プロジェクト)をホストしたいのですが、それぞれのドメインを購入したくないです。
1つのIPを使用してアクセスしながら、nginxとデジタルオーシャンで複数のウェブサイトをホストする方法はありますか?
だから私はデジタルオーシャンとnginxを使用しています。複数のWebサイト(プロジェクト)をホストしたいのですが、それぞれのドメインを購入したくないです。
1つのIPを使用してアクセスしながら、nginxとデジタルオーシャンで複数のウェブサイトをホストする方法はありますか?
回答:
これを実現するには2つの方法があります。サブフォルダーの場所を使用して、すべてをIPアドレスで実行するか、1つのドメインを購入して、そのドメインに複数のサブドメインを用意する必要があります(ドメインを購入した場合、サブドメインに費用はかかりませんが、レジストラーに確認してください)。
IPアドレスを覚えなければならないのは非常に悪であり、他の人と情報を共有しようとすると、他の人がIPアドレスを覚えなければならないという同じ問題があるため、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つのドメインと複数のサブドメインがあることを前提としています。これがない場合は、質問でこれを明確にしてください
nginx
server {}
構成内の各ブロックで、サーバー名を定義する必要があります。また、他の要求に対して「catch all」として4番目のサーバーブロックを設定する可能性があります。
例: 3つのプロジェクト、、、、
proj1
がproj2
ありproj3
ます。というドメインがありますevil-projects.net
(注:本当に存在しません)。3つの異なるサブドメインが必要ですnginx
。1つのプロジェクトをポイントする構成ごとに1つです。私のサーバーは1.2.3.4にあり、すべてのサイトにサービスを提供します。
上記のシナリオでは、ドメインとサブドメイン、およびサーバー構成の2つの部分があります。
ホストで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
次に、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が伝播すると、サイトは正常に機能します。
X.Y.Z.W/foo
、X.Y.Z.W/bar
)でホストしますか?なぜそれらのドメインを取得できないのですか?(同じIPを複数のドメインに割り当てることができます)?