仮想ホストとSSL証明書を使ってNginxをインストールする方法


Nginx Engine-x の略)は、無料でオープンソースの、高性能でスケーラブルなHTTPおよびリバースプロキシサーバー、メールおよび標準TCP/UDPプロキシです。サーバ。シンプルな設定言語で使いやすく設定が簡単です。 Nginxは、そのスケーラビリティとパフォーマンスのために、今では高負荷のサイトに電力を供給するためのWebサーバーソフトウェアとして好まれています。

この記事では、NginxをHTTPサーバーとして使用する方法、Webコンテンツを提供するように設定する方法、名前ベースの仮想ホストを設定する方法、そして安全なデータ転送のためのSSLの作成とインストール(UbuntuとCentOSの自己署名証明書を含む)について説明します。 。

Nginx Webサーバーをインストールする方法

図のようにあなたのパッケージマネージャを使って公式リポジトリからNginxパッケージをインストールすることから始めましょう。

------------ On Ubuntu ------------ 
$ sudo apt update 
$ sudo apt install nginx 

------------ On CentOS ------------
$ sudo yum update 
$ sudo yum install epel-release 
$ sudo yum install nginx 

Nginxパッケージをインストールした後は、しばらくの間サービスを開始し、次のコマンドを使用して起動時に自動起動してステータスを表示する必要があります。 Ubuntu では、パッケージが事前設定されている間に自動的に起動して有効にする必要があります。

$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx

この時点で、Nginx Webサーバーは稼働しているはずです。netstatコマンドでステータスを確認できます。

$ sudo netstat -tlpn | grep nginx

システムでファイアウォールが有効になっている場合は、 HTTP および HTTPS トラフィックを許可するためにポート 80 443 を開く必要があります。それぞれ、それを通して、実行することによって。

------------ On CentOS ------------
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw reload 

Nginxのインストールをテストし、それが実行中でWebページを提供できるかどうかを確認するための理想的な方法は、Webブラウザを開いてサーバーのIPを指定することです。

http://Your-IP-Address
OR
http://Your-Domain.com

作業中のインストールは次の画面で示されます。

Nginx Webサーバーを構成する方法

CentOSとUbuntuの両方で、Nginxの設定ファイルは/etc/nginx ディレクトリに、グローバル設定ファイルは /etc/nginx/nginx.conf にあります。

Nginxは、ディレクティブとして知られるさまざまな設定オプションによって制御されるモジュールで構成されています。 ディレクティブは、単純(名前と値を; で終了)またはブロックを使用して追加の指示を含める)のいずれかです。 {} )そして他のディレクティブを含むブロックディレクティブはコンテキストと呼ばれます。

すべてのディレクティブは、プロジェクトWebサイトのNginxドキュメントに包括的に説明されています。詳しくはそれを参照することができます。

基本的なレベルでは、Nginxは、デフォルトのサーバーブロックのみが使用されるスタンドアロンモードで、HTMLやメディアファイルなどの静的コンテンツを提供するために使用できます(仮想ホストが構成されていないApacheと同様)。

まず、メインの設定ファイルの中の設定構造について簡単に説明します。

 
$ sudo vim /etc/nginx/nginx.conf

このNginx設定ファイルを調べると、設定構造は次のようになります。これはメインコンテキストと呼ばれ、他の多くの単純ディレクティブとブロックディレクティブが含まれています。すべてのWebトラフィックはhttpコンテキストで処理されます。

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Nginxのメイン設定( /etc/nginx/nginx.conf )ファイルの例を次に示します。上記のhttpブロックには、Webサイトの設定ファイル(仮想ホスト設定)の場所をNginxに伝えるincludeディレクティブが含まれています。

Nginx設定ファイル

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Ubuntu には、追加のディレクティブ( include/etc/nginx/sites-enabled/*; )もあります。/nginx/sites-enabled/は/etc/nginx/sites-available/に作成されたWebサイト設定ファイルへのシンボリックリンクを保存し、サイトを有効にします。シンボリックリンクを削除すると、その特定のサイトが無効になります。

インストールソースに基づいて、 /etc/nginx/conf.d/default.conf にデフォルトのWebサイト設定ファイルがあります(公式の NGINX リポジトリからインストールした場合)。 EPEL )または/etc/nginx/sites-enabled/default (Ubuntuリポジトリからインストールした場合)。

これはテストシステムの /etc/nginx/conf.d/default.conf にあるサンプルのデフォルトnginxサーバーブロックです。

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

上記の設定におけるディレクティブの簡単な説明

  • listen: specifies the port the server listens on.
  • server_name: defines the server name which can be exact names, wildcard names, or regular expressions.
  • root: specifies the directory out of which Nginx will serve web pages and other documents.
  • index: specifies the type(s) of index file(s) to be served.
  • location: used to process requests for specific files and folders.

ウェブブラウザからホスト名 localhostまたはそのIPアドレスを使用してサーバーを指定すると、リクエストが処理され /var/www/html/index.htmlをクリックし、 200(OK)応答を使用してイベントをすぐにアクセスログ( /var/log/nginx/access.log )に保存します。エラー(失敗したイベント)の場合、エラーログ( /var/log/nginx/error.log )にメッセージを記録します。

Nginx へのログインの詳細については、Nginxでカスタムアクセスまたはエラーログ形式を設定する方法を参照してください。

デフォルトのログファイルを使用する代わりに、後で説明する「名前ベースの仮想ホスト(サーバーブロック)の設定」のセクションで、さまざまなWebサイトのカスタムログファイルを定義できます。

あなたのウェブサイト/アプリケーションまたはその一部へのアクセスを制限するために、あなたは基本的なHTTP認証を設定することができます。これは基本的に、HTTPサーバー全体、個々のサーバーブロック、またはロケーションブロックへのアクセスを制限するために使用できます。

htpasswd ユーティリティを使用して、アクセス認証情報(ユーザー名/パスワード)を保存するファイルを作成することから始めます。

 
$ yum install httpd-tools		#RHEL/CentOS
$ sudo apt install apache2-utils	#Debian/Ubuntu

例として、をこのリストに追加しましょう(できるだけ多くのユーザーを追加できます)。ここで、 -c オプションを使用してパスワードファイルを指定し、 -B <パスワードを暗号化します。 [Enter] を押すと、ユーザーのパスワードを入力するように求められます。

$ sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

次に、パスワードファイルに適切な権限と所有権を割り当てます(Ubuntuのユーザーとグループnginxを www-data に置き換えます)。

$ sudo chmod 640 /etc/nginx/conf.d/.htpasswd
$ sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

前に述べたように、あなたはあなたのウェブサーバー、単一のウェブサイト(そのサーバーブロックを使う)または特定のディレクトリまたはファイルへのアクセスを制限することができます。これを実現するために、2つの有用なディレクティブを使用することができます。

  • auth_basic – turns on validation of user name and password using the “HTTP Basic Authentication” protocol.
  • auth_basic_user_file – specifies the credential’s file.

例として、ディレクトリ/var/www/html/protected をパスワードで保護する方法を示します。

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

それでは、変更を保存してNginxサービスを再起動してください。

$ sudo systemctl restart nginx 

次回ブラウザで上記のディレクトリ( http:// localhost/protected )にアクセスすると、ログイン情報(ユーザー名 admin )と選択したパスワードの入力を求められます)

ログインに成功するとディレクトリの内容にアクセスできます。そうしないと「 401認証が必要」というエラーが表示されます。

Nginxで名前ベースの仮想ホスト(サーバーブロック)を設定する方法

サーバーコンテキストでは、複数のドメイン/サイトを同じ物理マシンまたは仮想プライベートサーバー(VPS)に格納し、そこから処理することができます。各サイト/ドメインのhttpコンテキスト内で、複数のサーバーブロック(仮想ホストを表す)を宣言できます。 Nginxは、受信したリクエストヘッダーに基づいてどのサーバーがリクエストを処理するかを決定します。

指定されたディレクトリにそれぞれ配置されている次のダミードメインを使用して、この概念を説明します。

  • wearetecmint.com – /var/www/html/wearetecmint.com/
  • welovelinux.com – /var/www/html/welovelinux.com/

次に、各サイトのディレクトリに適切な権限を割り当てます。

$ sudo chmod -R 755 /var/www/html/wearetecmint.com/public_html 
$ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

次に、各 public_html ディレクトリ内にサンプルの index.html ファイルを作成します。

<html>
	<head>
		<title>www.wearetecmint.com</title>
	</head>
<body>
	<h1>This is the index page of www.wearetecmint.com</h1>
</body>
</html>

次に、 /etc/httpd/conf.d ディレクトリ内に各サイトのサーバーブロック設定ファイルを作成します。

$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf
$ sudo vi /etc/nginx/conf.d/welovelinux.com.conf

次のサーバーブロック宣言を wearetecmint.com.conf ファイルに追加します。

wearetecmint.com.conf

server {
    listen         80;
    server_name  wearetecmint.com;
    root           /var/www/html/wearetecmint.com/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

次に、 welovelinux.com.conf ファイルに次のサーバーブロック宣言を追加します。

welovelinux.com.conf

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

最近の変更を適用するには、Nginx Webサーバーを再起動します。

$ sudo systemctl restart nginx

そしてあなたのウェブサーバーを上記のアドレスに向けるとあなたはダミードメインのメインページを見るようになるでしょう。

http://wearetecmint.com
http://welovelinux.com

SELinuxを無効にするか、正しいセキュリティコンテキストを設定することでこれを処理できます。詳細については、Nginx Plus Webサイトでこのガイドを参照してください。NginxおよびNginx PlusとSELinuxの併用。

NginxでSSLをインストールして設定する方法

SSL 証明書は、サイト上で安全なhttp( HTTPS )を有効にするのに役立ちます。あなたのサイトから、またはあなたのサイト内に送信されます。

自己署名証明書の作成とインストール、認証局からのSSL証明書を取得するための証明書署名要求( CSR )の生成方法( CA )について説明します。 Nginxで使うために。

自己署名証明書は自由に作成することができ、テスト目的や内部のLANのみのサービスに使用するのに実用的です。一般向けのサーバーでは、その信頼性を維持するために、CAが発行した証明書(たとえば、Let's Encrypt)を使用することを強くお勧めします。

自己署名証明書を作成するには、まず証明書を保存するディレクトリを作成します。

$ sudo mkdir /etc/nginx/ssl-certs/

次に、 openssl コマンドラインツールを使用して自己署名証明書とキーを生成します。

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

上記のコマンドで使用されるオプションについて簡単に説明しましょう。

  • req -X509 – shows we are creating a x509 certificate.
  • -nodes (NO DES) – means “don’t encrypt the key”.
  • -days 365 – specifies the number of days the certificate will be valid for.
  • -newkey rsa:2048 – specifies that the key generated using RSA algorithm should be 2048-bit.
  • -keyout /etc/nginx/ssl-certs/nginx.key – specifies the full path of the RSA key.
  • -out /etc/nginx/ssl-certs/nginx.crt – specifies the full path of the certificate.

次に、仮想ホスト設定ファイルを開き、ポート 443 で待機しているサーバーブロック宣言に次の行を追加します。仮想ホストファイル /etc/nginx/conf.d/wearetecmint.com.conf でテストします。

$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf

次に、sslディレクティブをnginx設定ファイルに追加します。これは以下のようになります。

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearetecmint.com;
    root           /var/www/html/wearetecmint.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

今すぐNginxを再起動し、次のアドレスをブラウザに向けます。

https://www.wearetecmint.com

CAからSSL証明書を購入したい場合は、図のように証明書署名要求(CSR)を生成する必要があります。

$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

既存の秘密鍵からCSRを作成することもできます。

$ sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

次に、生成された CSR CA に送信して、CA署名付きSSL証明書の発行をリクエストする必要があります。 CAから証明書を受け取ったら、上記のように設定できます。

この記事では、Nginxのインストール方法と設定方法について説明しました。 Webサーバーとクライアント間のデータ転送を保護するためにSSLを使用して名前ベースの仮想ホスティングを設定する方法について説明しました。

nginxのインストール/設定プロセス中に何らかの後退があった場合、または質問やコメントがある場合は、下記のフィードバックフォームを使用してご連絡ください。

全著作権所有。 © Linux-Console.net • 2019-2022