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

PHPとMySQL(LEMP)に加えてSSLを使用してNginxをDebian10にインストールします

LEMPは、次のソフトウェアスタックを表す頭字語です。 Linux カーネル、 Nginx Webサーバー、 MariaDB データベース(または MySQL )、および PHP サーバー側プログラミング言語。このソフトウェアは、動的なWebサイトまたはインタラクティブなWebアプリケーションを提供するために、今日インターネット上のサーバーで広く使用されています。

Nginxは、活発に開発されている最新のリソース効率の高いWebサーバーであり、ApacheHTTPサーバーに次いでインターネット上で2番目に使用されているWebサーバーです。リクエストの処理に非同期のイベント駆動型アプローチを使用しているため、特に高速です。

このチュートリアルでは、最新バージョンのDebian 10にLEMPスタック(NginxとMariaDBおよびPHP 7)をインストールして構成する方法を示します。

要件

  • Debian 10オペレーティングシステムの最新バージョン。次のリンクhttps://www.debian.org/CD/http-ftp/から入手でき、VPS、仮想マシン、または直接に最初からインストールされます。自己専用のマシン。
  • サーバーのコンソールまたはリモートSSH接続への直接アクセス。
  • マシンの静的IPアドレスで構成されたネットワークインターフェース
  • ネームサーバー側で構成されたAおよびCNAME(www)DNSレコードを持つ登録済みのパブリックドメイン名。このガイドでは、example.comドメインを例として使用します。

ステップ1:初期構成

最初のステップは、rootまたはシステムのroot権限を持つユーザーでログインし、次のコマンドを発行してDebian 10コンポーネント(カーネルのアップグレード、パッケージの更新、セキュリティパッチ)を更新することです。

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

次に、以下のコマンドを実行して、マシンのホスト名のわかりやすい名前を追加してください。その後、それに応じて新しいホスト名を適用するために、システムを再起動する必要があります。

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

次に、net-tools wget、curl、bash-completionユーティリティをインストールして、後でそれらを使用してDebianサーバーを簡単に管理できるようにします。

sudo apt install net-tools sudo wget curl bash-completion

ステップ2:NginxWebサーバーをインストールする

Nginxは、インターネット上の訪問者にWebページを表示するために使用される最新のリソース効率の高いWebサーバーです。サーバーのコンソールで以下のコマンドを実行して、Debian10リポジトリからNginxウェブサーバーをインストールします。

sudo apt-get install nginx

上の画像に示されているように、aptパッケージマネージャーはパッケージの追加の依存関係を確認し、インストールプロセスを続行することに同意するかどうかを尋ねます。はいと答えます( y )Nginxをインストールするため。

次に、 netstatを実行します システムのネットワークソケットを表示し、nginxデーモンがポート80/TCPでリッスンしているかどうかを確認するためのコマンド。または、 systemctlを発行することもできます。 次の画像に示すように、nginxデーモンのステータスを確認するためのコマンド。

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

nginxサーバーがシステムで稼働し始めたら、 ifconfigを発行します ネットワークインターフェイス情報を表示し、マシンのIPアドレスを一覧表示するためのコマンド。次に、ブラウザを開き、ブラウザにIPアドレスを追加して、HTTPプロトコル経由でNginxのデフォルトのWebページにアクセスします。 「WelcometoNginx!」というメッセージブラウザウィンドウに表示されます。

http://www.example.com

または

http://192.168.0.100

ステップ3:Nginx HTTP/2.0プロトコルをアクティブ化する

デフォルトでは、Debian10リポジトリによって提供される最新バージョンのNginxバイナリはHTTP/2.0プロトコルで構築されています。 HTTP/2.0はTSL/SSLプロトコルと統合されており、セキュリティで保護されたトランザクションを介してWebページの読み込み速度を向上させることができます。

ChromeやFirefoxなどの最新のブラウザはすべて、デフォルトでこのプロトコルをサポートする必要があります。ただし、MicrosoftInternetExplorerおよびMicrosoftEdgeブラウザはまだhttp2プロトコルを解析できないことに注意してください。

Debian10のNginxでHTTP/2.0プロトコルを有効にするには、デフォルトのNginx構成ファイルにいくつかの変更を加えるか、新しい構成ファイルを作成して443サーバーのTLSコードブロックを追加する必要があります。これを実現するには、最初に次のコマンドを実行して、デフォルトのNginxサイトで使用可能な構成のバックアップを作成します。サイトで利用可能なディレクトリの内容を一覧表示して、バックアップが成功したことを確認します。

sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/

次に、テキストエディタを使用してNginx TLS構成ファイルを作成し、次のコンテンツを追加します。

sudo nano /etc/nginx/sites-available/default-ssl

default-ssl ファイルの抜粋:

    server {
                listen 443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #server_name  www.domain.tld;
                server_name _;
                                
                root /var/www/html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL Certificates
                ssl_certificate "/etc/nginx/ssl/cert.pem";
                ssl_certificate_key "/etc/nginx/ssl/privekey.pem";
                ssl_dhparam /etc/nginx/ssl/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
                #includeSubDomains" always;
 
                location / {
                index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
                                set $cache_uri $request_uri;
                
                location ~ /.well-known {
                allow all;
                               }
               location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
                #
                #             # With php-fpm (or other unix sockets):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }
 
                # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
                   }

HTTP / 2.0プロトコルの使用を可能にするステートメントは、 http2という単語で表されます。 下の行から。

 listen 443 ssl http2 default_server;

訪問者のブラウザがHTTP2プロトコルをサポートしていない場合は、 http2を削除してください プロトコルを無効にし、nginxサービスを再起動して変更を適用するために、サーバー構成から通知します。

ドメインを登録している場合、またはIPアドレスに基づく仮想ホスティングを使用している場合は、 server_nameの後にドメイン名またはIPアドレスを追加する必要があります。 以下の例に示すようなディレクティブ。

server_name www.example.com example.com;

上記の設定でNginxのデフォルト設定ファイルの編集が終了したら

NginxでSSLを構成する

上記のnginxのTSL構成ファイルでは、TLS証明書とキーのパスを指定しています。システムにキーがまだインストールされていないため、次のコマンドを入力して、自己署名SSL証明書ファイルとキーを生成します。 SSL証明書の生成中に、一連の質問が表示されます。国、州、または州の2桁のコード、市の名前、組織の名前、組織のユニットの名前、サーバーの一般名、および有効なメールアドレスを入力します。共通名は、DNSサーバーからのコンピューターのFQDNレコード、またはWebサイトへのアクセスに使用されるサーバーのIPアドレスと一致するように設定する必要があります。次のスクリーンショットに示すように、証明書とキーはsslという名前のnginxディレクトリの下の新しいディレクトリに保存されます。

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/

また、新しい強力なDiffie-Hellman暗号を生成します。これは、上記の構成ファイルの ssl_dhparamにあります。 次のコマンドを発行して、ステートメント行:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

最後に、Diffie-Hellmanキーを生成した後、 default-ssl のシンボリックリンクを作成して、TLS構成ファイルをアクティブ化します。 サイトからの構成ファイル-利用可能 サイト対応へのディレクトリ 次のコマンドを発行してディレクトリを作成します。

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

次に、構文エラーについてNginx構成ファイルをテストし、すべて問題がない場合は、以下のコマンドを実行してすべての変更を適用するためにNginxデーモンを再起動します。

sudo nginx -t
sudo systemctl restart nginx.service

SSL構成が成功したかどうかを確認します

Nginx WebサーバーがSSLポートにバインドされているかどうかを確認するには、netstatコマンドを発行し、ポート443がリスニングモードで表示されているかどうかを確認します。

netstat -tlpn | grep nginx

以下のスクリーンショットは、上記の手順を示しています。

次に、ブラウザからHTTPプロトコルを介してドメイン名またはサーバーのIPアドレスに移動し、nginxのデフォルトページを表示します。自己署名証明書を使用しているため、ブラウザにエラーが表示されるはずです。 nginxのデフォルトのメインページに渡すためにエラーを確認してください。

Nginxがデフォルトのindex.htmlを提供していない場合 webrootディレクトリのページで、次のコマンドを発行してインデックスページを作成します。

echo "test page" | tee /var/www/html/index.html

NginxによってアドバタイズされたHTTP/2.0プロトコルの存在を確認するには、以下のコマンドを発行します。 h2を探します サーバーによってアドバタイズされたプロトコルの単語。

 openssl s_client -connect localhost:443 -nextprotoneg ''

F12ファンクションキーを押してページをリクエストすることで、接続の状態を視覚化し、ChromeブラウザからNginxによってhttp2プロトコルがアドバタイズされているかどうかを確認することもできます。リクエストで使用されているプロトコルを表示するには、[ネットワーク]タブに移動し、[タイプ]メニューを右クリックして、[プロトコルファイル]をオンにします。 HTTP2プロトコルはh2として表示される必要があります 以下のスクリーンショットに示すように、現在のプロトコル列に表示されます。

ステップ4:PHP7をインストールする

Nginx Webサーバーは、Nginxが処理要求を渡すPHP FastCGIプロセスマネージャーを介して、PHPプログラミング言語インタープリターの助けを借りて動的なWebコンテンツを提供できます。 FastCGIプロセスマネージャーは、 php-fpmをインストールすることで入手できます。 Debian9公式リポジトリが提供するコンパイル済みパッケージ。

PHPがNginxWebサーバーと通信できるようにする追加のパッケージとともに、php-fpmプロセスマネージャーとPHP7.0インタープリターをシステムにインストールするには、サーバーコンソールで次のコマンドを発行します。

sudo apt install php7.3 php7.3-fpm php7.3-curl php7.3-gd

PHP-FPMを開始

PHP 7.3インタープリターがシステムに正常にインストールされたら、次のコマンドを発行してphp7.3-fpmデーモンを起動および確認します。

sudo systemctl start php7.3-fpm
sudo systemctl status php7.3-fpm

上記のNginxのTLS構成ファイルには、動的コンテンツを提供するためにPHPFastCGIプロセスマネージャーのブロック構成がすでに追加されています。 NginxがPHPインタープリターを使用できるようにするコードのブロックを以下の抜粋に示します。したがって、NginxTSL構成ファイルを変更するための手順はこれ以上必要ありません。下のスクリーンショットの行頭からのハッシュタグ#記号はコメントです。構成ファイルのコメント行は、Nginxウェブサーバーではデフォルトで無視されます。

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

PHP構成のテスト

NginxがphpファイルをPHPプロセッサに正しく渡すことができるかどうかをテストおよび検証するには、PHP info.phpを作成します。 以下のコマンドを発行して構成ファイルをテストします

sudo su -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'

次に、サーバーのドメイン名またはパブリックIPアドレスに続いて /info.php に移動して、Webブラウザのphp情報ページにアクセスします。 下の画像に示すように。

https://www.example.com/info.php

または

http://192.168.0.100/info.php

$ _ SERVER [‘SERVER_PROTOCOL’] の行を検索して、HTTP/2.0プロトコルがサーバーによってアドバタイズされているかどうかを確認することもできます。 PHP変数について。

他のPHP7.3モジュールをインストールするには、apt検索を実行します php7.3 特定のPHPモジュールを見つけてインストールするコマンド。 WordPressなどのコンテンツ管理システムのインストールを計画している場合は、次の追加モジュールをインストールしてください。

sudo apt install php7.3-mcrypt php7.3-mbstring

ただし、新しくインストールされたPHPモジュールは、システムでデフォルトで有効になっていません。それらをアクティブ化するには、PHP-FPMサービスを再起動します。

sudo systemctl restart php7.3-fpm.service

ステップ5:MariaDBデータベースをインストールする

最後に、LAMPスタックパズルの最後のピースがデータベースにありません。 MariaDBデータベースのLEMPコンポーネントは、テーブルと列にレコードを格納するために使用されます。 Webアプリケーションのデータを動的に管理します。 MariaDBをインストールするには、サーバーのコンソールで次のコマンドを実行します。次に、PHP FPMデーモンを再起動して、データベースへのアクセスに必要なPHP-MySQLモジュールを有効にします。

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

デフォルトでは、システムのrootアカウントまたはroot権限を持つユーザーは、パスワードを入力しなくてもデータベースにアクセスできます。システムユーザーがデータベースにアクセスしようとするたびにMySQLがパスワードの入力を求めるようにこの動作を変更するには、root権限を持つコマンドラインインターフェイスを使用してMySQLデータベースにログインし、MySQLコンソールで次のコマンドを実行します。

>
sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit

MariaDBでrootパスワードを設定

次のステップでは、セキュリティスクリプトmysql_secure_installationを実行してMariaDBを保護していることを確認してください。 これは、Debianリポジトリからのインストールパッケージによって提供されます。スクリプトの実行中に、MariaDBデータベースを保護するために設計された一連の質問が表示されます。例:MySQLルートパスワードの変更、匿名ユーザーの削除、リモートルートログインの無効化、テストデータベースの削除。以下のコマンドを発行してスクリプトを実行します。 MySQLデーモンを完全に保護するために尋ねられるすべての質問に「はい」と答えます。ガイドとして以外は、以下のスクリプト出力を使用してください。

sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

最後に、MariaDBの機能をテストするには、コンソールからデータベースにログインして、次のコマンドを実行します。デフォルトのデータベースのリストがMariaDBコンソールに表示されます。 MariaDBコンソールを終了のままにします ステートメント。

mysql -u root –p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit

それで全部です! Nginx Webサーバー、MariaDBデータベース、およびPHPプログラミング言語がDebian10マシンにインストールされます。これで、訪問者向けの動的なWebサイトまたはWebアプリケーションの構築を開始できます。


Debian
  1. Debian 11にPHPとNginx(LEMP)をインストールしてセットアップする方法

  2. Debian 6(スクイーズ)VPSにLEMP(Nginx、MySQL、PHP)サーバーをインストールして設定する方法

  3. Debian 11 に LEMP Stack Nginx、MySQL、PHP をインストールする方法

  1. Lets Encrypt and Secure Nginx with SSL/TLSをDebian9にインストールする

  2. Ubuntu 18.04にPHPとMySQL(LEMPスタック)を使用してNginxをインストールする方法

  3. Nginxを使用してAutomadCMSをインストールし、Debian10でSSLを暗号化できるようにします

  1. Debian9にNginxを使用してInvoicePlaneをインストールする方法

  2. PHPとMariaDB(LEMPスタック)を使用してNginxをFedora31にインストールする方法

  3. Ubuntu 20.04 LTSにPHPとMySQL(LEMPスタック)を使用してNginxをインストールする方法