GNU/Linux >> Linux の 問題 >  >> Cent OS

Fedora 34 /CentOS8でPHPを使用してCaddyWebサーバーをインストールおよび構成する方法

Caddyは、Go言語で記述されたオープンソースのWebサーバーです。 HTTP / 3サポート、TLS v1.3、Let's Encryptによる自動SSL構成、リバースプロキシを提供し、機能を拡張するための複数のプラグインをサポートします。ホストする必要のあるサイトの数に関係なく、すべての構成が1つのファイルから提供されるという利点があります。

このチュートリアルでは、Fedora34およびCentOS8ベースのサーバーへのCaddyおよびPHPのインストールと構成について説明します。単一および複数のサイトをホストする方法と、リバースプロキシを他のいくつかのセキュリティ機能とともに使用する方法について説明します。

前提条件
  • Fedora34またはCentOS8ベースのサーバー

  • sudo権限を持つroot以外のユーザー

  • サーバーのIPアドレスを指すドメイン名

  • SELinuxが無効になっています。

    $ sudo setenforce 0
    
  • すべてが更新されていることを確認してください。

    $ sudo dnf update
    
ステップ1-ファイアウォールの構成

最初のステップは、HTTPおよびHTTPSポートを開くようにファイアウォールを構成することです。 FedoraとCentOSには、Firewalldファイアウォールがプリインストールされています。

ファイアウォールが実行されているかどうかを確認します。

$ sudo firewall-cmd --state

次の出力が得られるはずです。

running

現在許可されているサービス/ポートを確認してください。

$ sudo firewall-cmd --permanent --list-services

次の出力が表示されます。

dhcpv6-client mdns ssh

HTTPおよびHTTPSポートを許可します。

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

ファイアウォールのステータスを再確認してください。

$ sudo firewall-cmd --permanent --list-services

同様の出力が表示されるはずです。

dhcpv6-client http https mdns ssh

ファイアウォールをリロードします。

$ sudo systemctl reload firewalld
ステップ2-キャディをインストールする

最初のステップは、サーバーをインストールすることです。インストール手順は、Fedora34とCentOS8の両方で同じです。

$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @caddy/caddy
$ sudo dnf install caddy

次のコマンドでインストールを確認できます。

$ caddy version
v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=
ステップ3-キャディ構成の基本

Caddyは、構成を保存または書き込むための主要な形式としてJSONを使用します。これは、構成を作成するための最も柔軟な方法であり、Caddyのすべての機能をサポートします。ただし、JSONファイルの記述方法がわからない場合は、CaddyがCaddyfileの形式でより簡単な方法を提供します。

Fedora / CentOSパッケージには、/etc/caddy/CaddyfileにCaddyfileが含まれています。 。次のようになります(コメントは無視します)

:80 {
        root * /usr/share/caddy
        file_server
}

キャディデーモンを有効にして起動します。

$ sudo systemctl enable --now caddy

URL http://youripaddressを開くことができます チェックする。次のウェルカムページが表示されます。

キャディは多くの機能と構成を提供しているので、私たちはウェブサイトを提供するために重要なものだけを使用します。デフォルトの構成は、:80として指定されているHTTPを介して機能します 。 root ディレクティブは、/usr/share/caddyで提供されるファイルを探すようにCaddyに指示します。 ディレクトリ。

file_server ディレクティブは、Caddyにファイルサーバーとして機能するように指示します。これは、デフォルトアドレスを介して静的ファイルのみを提供することを意味します。

基本的なHTMLWebサイト用のCaddyの構成

静的なWebサイトを提供するための基本的なキャディ構成ファイルを作成しましょう。

Webサイトをホストし、ログファイルを保存するためのディレクトリを作成します。

$ sudo mkdir -p /var/www/example.com/html
$ sudo mkdir /var/log/caddy

ディレクトリの所有権をCaddyに設定します。

$ sudo chown caddy:caddy /var/www/example.com/html -R
$ sudo chown caddy:caddy /var/log/caddy

テストするHTMLファイルを作成し、編集用に開きます。

$ sudo nano /var/www/example.com/html/index.html

次のコードを追加します。

<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1>Hello, from Caddy!</h1>
</body>
</html>

Ctrl + Xを押します エディターを閉じてYを押します ファイルを保存するように求められたら。

編集のためにCaddyfileを開きます。

$ sudo nano /etc/caddy/Caddyfile

既存のコードを次のように置き換えます。

example.com {
    root * /var/www/example.com/html
    file_server
    encode gzip

    log {
        output file /var/log/caddy/example.access.log
    }

    @static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp
    }
    header @static Cache-Control max-age=5184000

    tls [email protected]
}

Ctrl + Xを押します エディターを閉じてYを押します ファイルを保存するように求められたら。

ファイル内のすべてのディレクティブを調べてみましょう。 encode gzip ディレクティブは、Gzip圧縮を使用してファイルを圧縮するようにCaddyに指示します。

log ディレクティブは、サイトのアクセスログを/var/log/caddy/example.access.logに出力します ファイル。デフォルトでは、Caddyはログファイルが100MBに達するとローテーションします。ローテーションされたファイルは、90日後、またはローテーションされたログが10個を超えると削除されます。デフォルトのパラメータは次の方法で変更できます。

log {
    output file /var/log/caddy/example.access.log {
        roll_size 10MB
        roll_keep 5
        roll_keep_for 240h
    }
}

上記のコードでは、ローテーションされたログファイルは10 MBに制限されており、10日(240時間)後またはローテーションされたログが5つを超えると削除されます。

Caddyは、介入なしでSSL証明書を自動的に生成してインストールします。 tls ディレクティブを使用すると、Let'sEncryptレポートの取得に使用される電子メールアドレスなどのHTTPSを構成するための追加オプションを提供できます。

header ディレクティブは、すべての静的ファイル(images / javascript / CSSファイル)のキャッシュ制御を有効にします。さらにファイル拡張子を追加するか、コードをコピーして、ファイル形式ごとに異なる期間を設定できます。 staticの値を変更する必要があります 名前付きの参照であるため、別の何かに。

完了したら、次のコマンドを使用して構成を検証できます。

$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile

--adapter caddyfileを使用する必要があります デフォルトでは、コマンドはJSON構成のみを検証するためです。

次の警告が表示された場合は、1つのコマンドで簡単に修正できます。

WARN    input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}

次のコマンドを実行してエラーを修正します。

$ caddy fmt --overwrite /etc/caddy/Caddyfile

上記のコマンドは、Caddyfileをフォーマットして上書きします。

Caddyを再起動して、構成を有効にします。構成を変更するたびにサーバーを再起動する必要があります。

$ sudo systemctl restart caddy

ブラウザで開くと、次のページが表示されます。これは、構成が機能していることを意味します。

キャディで複数のサイトを構成する

1つのcaddyファイルで複数のサイトを構成できます。これを行うには、次の方法でサイトごとに個別のブロックを作成します。

example1.com {
	root * /var/www/example1.com/html
	...
}

example2.com {
	root * /var/www/example2.com/html
	...
}

この方法はいくつかのサイトでは問題ありませんが、複数のサイトをホストしている場合、1つはかなり大きくなり、保守が困難になる可能性があります。

ディレクトリ`/etc / caddy/caddyconfを作成します。

$ sudo mkdir /etc/caddy/caddyconf

これで、/etc/caddty/caddyfileのディレクトリから構成ファイルをインポートできます。 ファイルの先頭にあります。

import caddyconf/*.conf

最後のステップは、サイトごとに個別の構成ファイルを作成することです。

PHPサイトの構成

これまで、Caddyを使用して静的サイトにサービスを提供することについてのみ説明してきました。 Caddyは、動的PHPサイトを提供するのと同じくらい簡単に使用できます。 PHPサポートを有効にするには、サイトブロック内に次のコードを追加します。

example1.com {
	root * /var/www/example1.com/html
	...
	php_fastcgi unix//run/php-fpm/www.sock
}

PHPもインストールする必要があります。

$ sudo dnf install php-fpm php-cli php-gd

必要な追加のPHPモジュールをインストールできます。また、ファイル/etc/php-fpm.d/www.confを構成する必要があります 。編集のためにファイルを開きます。

$ sudo nano /etc/php-fpm.d/www.conf

Unixユーザー/PHPプロセスのグループをcaddyに設定する必要があります 。 user=apacheを見つけます およびgroup=apache ファイル内の行をnginxに変更します。

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

listen.acl_users = apache,nginxという行を見つけます 値を次のように変更します。

...
listen.acl_users = apache,nginx,caddy
...

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

PHP-fpmプロセスを開始します。

$ sudo systemctl start php-fpm

PHPセットアップをテストするには、ファイルtest.phpを作成します htmlで フォルダ。

$ sudo nano /var/www/example.com/html/test.php

次のコンテンツを追加し、 Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

<?php phpinfo();

http://example.com/test.phpを起動します Webブラウザで、次のように表示されます。

リバースプロキシの構成

キャディは、リバースプロキシサーバーとしても使用できます。設定するには、次のコードを使用します。

example1.com {
	...
	reverse_proxy localhost:8000 {
		header_up Host {http.reverse_proxy.header.X-Forwarded-Host}
	}
}
ステップ4-キャディグローバルオプション

Caddyfileを使用すると、グローバルに適用できるいくつかのオプションを設定できます。つまり、それらはすべてのサイトに適用されます。すべてのサーバーブロックでグローバルオプションを再宣言する必要がないように、グローバルオプションを定義すると便利です。

Caddyfileの最上部にグローバルオプションを含める必要があります。グローバルに設定できるオプションはたくさんあります。重要なものだけを見ていきます。残りの部分については、Caddyのドキュメントを参照してください。

Caddyfileで使用できるデフォルトのオプションは次のとおりです。

{	
	#TLS Options
	email [email protected]

	servers	:443 {
		protocol {
			experimental_http3
		}
		max_header_size 5mb
	}
	
	servers :80 {
		protocol {
			allow_h2c
		}
		max_header_size 5mb
	}
}

上記のコードではemail Let'sEncrypt権限でSSL証明書を登録するために使用される電子メールIDを指定します。 OCSPステープリングは、証明書失効情報をブラウザに自動的に提供することにより、HTTPSサイトのパフォーマンスを向上させます。 max_header_size オプションは、解析されるクライアントのHTTPリクエストヘッダーのサイズを指定します。

また、HTTPSサイトのHTTP/3プロトコルとHTTPサイトのHTTP/2サポートを有効にしました。これらは実験的な機能であり、最終的には削除される可能性があるため、有効にする前に注意してください。

ステップ5-セキュリティの強化

HTTP認証の有効化

特定のディレクトリに対して単純なHTTP認証を有効にすることができます。まず、その認証資格情報を作成する必要があります。

Caddyは、構成でハッシュ化されたパスワードのみを受け入れます。したがって、最初にハッシュ化されたパスワードを作成する必要があります。これを行うには、次のコマンドを実行します。

$ caddy hash-password
Enter password:
Confirm password:
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX

パスワードの準備ができたら、Caddyfileに次のコードを入力します。

basicauth /secret/* {
	John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}

上記のコマンドは/secretを保護します 作成したばかりの資格情報を含むディレクトリ。

サイトのセキュリティを強化してHSTSを有効にする

サイトを保護するために追加できるセキュリティ構成は他にもあります。そのために、別のファイル/etc/caddy/caddy_security.confを作成します 。

$ sudo nano /etc/caddy/caddy_security.conf

次のコードを追加します。

header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Xss-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "DENY"
    Permissions-Policy "interest-cohort=()"
    Content-Security-Policy "upgrade-insecure-requests"
    Referrer-Policy "strict-origin-when-cross-origin"
    Cache-Control "public, max-age=15, must-revalidate"
    Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; camera 'none'; encrypted-media 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; payment 'none'; picture-in-picture *; speaker 'none'; sync-xhr 'none'; usb 'none'; vr 'none'"
}

上記のコードは、以下を有効/実装します。

  1. サイトとそのすべてのサブドメインのHSTSサポートを有効にします。
  2. XSSフィルタリングを有効にします。
  3. コンテンツ/MIMEスニッフィングを防止します。
  4. サイトがIFRAME内に読み込まれるのを防ぎます。
  5. サイトがFLOC追跡トライアルに含まれるのを防ぎます。
  6. ユーザーエージェントが安全でないURLを処理する方法に関するコンテンツセキュリティポリシーを追加します。
  7. リファラーポリシーを実装して、プロトコルが同じことを示している場合、クロスオリジンリクエストに対してリファラーのみが送信されるようにします。
  8. 機能ポリシーは、特定のブラウザ機能を有効または無効にするメカニズムを提供します。

次に、必要なサイトブロックのいずれかにファイルをインポートします。

example.com {
	...
	import /etc/caddy/caddy_security.conf
}

サーバーを再起動して変更を実装します。

結論

これで、Fedora 34 /CentOS8ベースのサーバーへのCaddyWebサーバーのインストールと構成に関するチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。


Cent OS
  1. CentOS7にApacheWebサーバーをインストールする方法

  2. CentOS7にVNCをインストールして設定する方法

  3. CentOS7でApacheを使用してNextcloudをインストールおよび構成する方法

  1. CentOS7にNagiosをインストールして設定する方法

  2. CentOS8にNFSサーバーをインストールして構成する方法

  3. CentOS8にVNCをインストールして設定する方法

  1. CentOS8にownCloudをインストールして設定する方法

  2. CentOS8にRedmineをインストールして設定する方法

  3. CentOS7およびRHEL7にIcinga2/ IcingaWeb2をインストールして構成する方法