GNU/Linux >> Linux の 問題 >  >> Linux

Nginxを使用して1つのIPに複数のSSLを設定する方法

IPv4で利用可能なアドレス空間が不足しているため、IPを入手するのはますます困難になり、場合によっては、ますます高価になっています。ただし、ほとんどの場合、これは欠点ではありません。サーバーは、何年にもわたってそうであったように、1つのIPアドレスで複数のWebサイトを完全にホストできます。

ただし、SSL証明書を使用してサイトへのトラフィックを保護する場合がありました必要 保護されたドメインごとに個別のIPv4アドレスを持っています。これは、SSLがIPにバインドされているため、またはサーバーにバインドされているためではなく、SSL証明書情報の要求でロードされているドメインが指定されていないため、サーバーは1つの証明書のみで応答する必要がありました。名前の不一致により安全でない証明書の警告が発生したため、サーバーの所有者はすべてのSSLホストに対して一意のIPを持っている必要がありました。

幸いなことに、IPv4の制限により、新しいテクノロジーと使いやすさが最前線にもたらされました。特に、Server Name Indication(SNI)です。

SSLが必要なのはなぜですか?

Secure Socket Layer(SSL)証明書により、クライアントとサーバー間の双方向の暗号化通信が可能になります。これにより、クレジットカード番号やパスワードなどの機密情報を含め、あらゆるデータを詮索好きな目から保護できます。 SSLは、GlobalSignなどの有名なサードパーティの署名機関によってオプションで署名されます。このような証明書の最も一般的な使用法は、HTTPSを介したWebトラフィックを保護することです。

HTTPSサイトを閲覧する場合、最新のブラウザでは、ポジティブインジケータを表示するのではなく、ネガティブが表示されます。 ではないサイトのインジケーター SSLを使用します。そのため、SSLを備えていないウェブサイトには、新しい訪問者のためにすぐに危険信号が表示されます。したがって、レピュテーションを維持したいサイトは、SSLを取得することを余儀なくされます。

幸いなことに、SSLの取得とインストールは無料でも簡単であるため、これは基本的な形式になります。これについては、以下で詳しく説明します。

SNIとは何ですか?

サーバー名表示は、HTTPSリクエストに追加のヘッダー server_nameが含まれるブラウザおよびWebサーバー機能です。 、サーバーは適切なSSL証明書で応答できます。これにより、1つのIPアドレスで、それぞれが独自のSSLを持つ数百または数千のドメインをホストできます。

SNIテクノロジーは、最新のすべてのブラウザーとWebサーバーソフトウェアで利用できるため、W3によると、Webユーザーの約98%以上がSNIテクノロジーをサポートできます。

飛行前チェック

NginxとPHP-FPMを使用してコントロールパネル(cPanel、Pleskなど)なしでウェブサイトをホストするCentOS7VPSサーバーで作業します。これは一般に「LEMP」スタックと呼ばれ、「LAMP」スタックでApacheの代わりにNginxを使用します。これらの手順は、Let’s Encrypt for Ubuntu 18.04のインストールが異なりますが、Linuxの他のほとんどのフレーバーと同様です。 CentOS7とUbuntu18.04の両方の手順を並べて説明します。

残りの手順では、Nginxがインストールされ、必要なポート(80および443)を開くためのファイアウォール構成を含む複数のWebサイトをホストするように設定されていることを前提としています。 SSH経由でサーバー上のシェルにrootとして接続されています。

注ドメインごとにSSLがあり、まだインストールされていない場合は、ステップ3aを使用する必要があります。 それらを手動で追加します。 SSLをお持ちでなく、無料のLet’s Encryptサービスを使用してSSLを注文して自動的に構成する場合は、ステップ3bを使用する必要があります。 。

ステップ1:NginxでSNIを有効にする

私たちの最初のステップはすでに完了しています! Nginxの最新のリポジトリバージョンは、デフォルトでサーバーSNI情報へのOpenSSLサポートを使用してコンパイルされます。これは、コマンドラインで次のように確認できます:

nginx -V

これにより大量のテキストが出力されますが、この行だけに関心があります:

...
TLS SNI support enabled
...

このような行がない場合は、このサポートを含めるためにNginxを手動で再コンパイルする必要があります。これは非常にまれなインスタンスです。たとえば、古いバージョンのNginxでは、別のOpenSSLライブラリを使用してソースから手動でコンパイルされています。 CentOS 7 EPELリポジトリ(1.12.2)によってインストールされたNginxバージョンとUbuntu 18.04(1.14.0)に含まれているバージョンはSNIをサポートします。

ステップ2:Nginx仮想ホストの構成

Nginxにはすでに複数のドメインが設定されているため、サーバー構成ブロックがサイトごとに個別のファイルに設定されている可能性があります。そうでない場合に備えて、まず、ドメインが非SSLトラフィック用に設定されていることを確認しましょう。そうである場合は、この手順をスキップできます。 domain.comとexample.comで作業します。

vim /etc/nginx/sites-available/domain.com

注サイト対応またはサイト利用可能なフォルダがなく、それらを使用したい場合は、 / etc / nginx / sites-availableを作成できます。 および/etc / nginx / sites-enabled mkdirを使用 指図。その後、 /etc/nginx/nginx.conf内 、メインの http {}内の任意の場所にこの行を追加します ブロック(その直後にconf.dについて説明する行を含めることをお勧めします):

include /etc/nginx/sites-enabled/*;

それ以外の場合は、/etc/nginx/conf.d/*.confで構成を行うことができます 。

少なくとも、次のオプションを挿入し、ドキュメントルートをサイトファイルへの実際のパスに置き換え、サイトに必要なその他の変数を追加します。

server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
...
}
>

たとえば、example.comや、ホストするその他のドメインについても、同様のファイルを設定する必要があります。これらのファイルが作成されたら、シンボリックリンクで有効にできます:

ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

ここで、Nginxを再起動します…

systemctl reload nginx

これにより、アプリケーションを再起動せずに構成ファイルが再ロードされます。作成した2つがロードされていることを確認できます:

nginx -T

server_nameが表示されます domain.comとexample.comの両方の行。

聞く 上記のサーバーブロックに含まれる行により、サイトは任意のでリッスンできます サーバー上にあるIP。代わりにIPを指定する場合は、 IP:portを使用できます。 代わりに、次のようにフォーマットします:

server {
listen 123.45.67.89:80;
...
}

ステップ3a:既存のSSLをNginx仮想ホストに追加する

有効な実行構成ができたので、これらのドメインにあるSSLをNginxの新しいサーバーブロックとして追加できます。まず、SSL証明書と(秘密)キーを、関連するドメインを示す名前でサーバー上のグローバルフォルダーに保存します。 / etc / ssl /のグローバルフォルダを選択したとします。 。この場合、私たちの名前は /etc/ssl/domain.com.crtになります。 (証明書自体と署名機関からのチェーン証明書が含まれています)、および /etc/ssl/domain.com.key 、秘密鍵が含まれています。作成した構成ファイルを編集します:

vim /etc/nginx/sites-available/domain.com

次の情報を使用して、既存のサーバーブロックの最後(最後の中括弧の外側)に新しいサーバーブロックを追加します。

server {
listen 443;
server_name domain.com;
root /var/www/domain.com;
ssl_certificate /etc/ssl/domain.com.crt;
ssl_certificate_key /etc/ssl/domain.com.key;
...
}

リスニングポートが443に変更されたことに注意してください (HTTPSの場合)および ssl_certificateの追加 およびssl_certificate_key 行。ブロック全体を書き換える代わりに、リッスンポートを変更しながら、元のサーバーブロックをコピーしてから、これらの行を追加することができます。このファイルを保存して、Nginx構成をリロードします。

systemctl reload nginx

以下を使用して、変更が実施されていることを再度確認します:

nginx -T

一部の設定では、2つが表示されます server_nameは、domain.comとexample.comにそれぞれ対応し、1つはポート80を使用し、もう1つはポート443を使用します。そうする場合は、手順4にスキップできます。それ以外の場合は、次の手順に進みます。

ステップ3b:Let’sEncryptのインストールと構成

次に、無料のSSLプロバイダーであるLet’s Encryptをセットアップして、Nginxでセットアップしたすべてのドメインの証明書に自動的に署名します。 Ubuntu 18.04 、PPAを追加し、 aptを使用して証明書スクリプトをインストールします itude:

add-apt-repository ppa:certbot/certbot

apt-get update

apt-get install certbot python-certbot-nginx

CentOS 7 、EPELリポジトリをインストールし、そこから証明書ヘルパーをインストールします。

yum install epel-release

yum install certbot python2-certbot-nginx

どちらのシステムでも、Nginx構成を読み取り、Certbotに証明書を割り当てるように依頼できます。

certbot --nginx

これにより、使用するドメイン(オプションを空白のままにしてすべてのドメインを選択できます)と、Nginxでトラフィックを新しいSSLにリダイレクトするかどうか(そうします!)についていくつか質問があります。署名プロセスが完了すると、Nginxは自動的に構成を再読み込みする必要がありますが、そうでない場合は手動で再読み込みします:

systemctl reload nginx

これで、次のコマンドで実行構成を確認できます:

nginx -T

代わりにtwoが表示されます。 server_nameは、domain.comとexample.comにそれぞれ対応し、1つはポート80を使用し、もう1つはポート443を使用します。

Let's Encryptの証明書は、発行から90日間のみ有効であるため、自動的に更新されるようにします。次のコマンドを実行して、rootユーザーのcronファイルを編集します。

crontab -e

cronは次のようになります:

45 2 * * 3,6 certbot renew && systemctl reload nginx

このファイルを保存すると、毎週水曜日と土曜日の午前2時45分に certbot コマンドは、必要な更新をチェックし、証明書を自動的にダウンロードしてインストールした後、Nginx構成をリロードします。

ステップ4:インストールと有効性を確認する

ここで、SSLの有効性を確認し、ブラウザーが証明書を正しく認識していることを確認する必要があります。 sslcheck.liquidweb.comにアクセスし、ドメイン名を入力して、サーバー上のサイトのSSLを確認します。 SSL保護を示す4つの緑色のチェックマークが表示されます。

1台のサーバー内の複数のサイトにSSLをインストールする方法に関するチュートリアルをお楽しみいただけたでしょうか。 Liquid Webのお客様は、24時間年中無休でサポートチームにアクセスできます。署名付きSSLや、LiquidWebに簡単に転送できる新しいサーバーの注文をお手伝いします。


Linux
  1. NginxでオリジンCloudflareSSLを設定する方法

  2. NginxをSSLで保護し、FreeBSDで暗号化する方法

  3. 1つのIPアドレスを使用してApacheを使用するCentOSVPSで複数のSSL証明書を設定する方法

  1. ApacheWebサーバーで複数のWebサイトを構成する方法

  2. Nginxを使用してUbuntu18.04にLet'sEncryptSSLをインストールする方法

  3. NAT を使用して Linux サーバーをルーターとして設定する方法

  1. Ubuntu20.04でNginxサーバーブロックを設定する方法

  2. CentOS7でNginxサーバーブロックを設定する方法

  3. CentOS8でNginxサーバーブロックを設定する方法