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
最初のステップは、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
最初のステップは、サーバーをインストールすることです。インストール手順は、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=
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にファイルサーバーとして機能するように指示します。これは、デフォルトアドレスを介して静的ファイルのみを提供することを意味します。
静的な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}
}
}
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サポートを有効にしました。これらは実験的な機能であり、最終的には削除される可能性があるため、有効にする前に注意してください。
HTTP認証の有効化
特定のディレクトリに対して単純なHTTP認証を有効にすることができます。まず、その認証資格情報を作成する必要があります。
Caddyは、構成でハッシュ化されたパスワードのみを受け入れます。したがって、最初にハッシュ化されたパスワードを作成する必要があります。これを行うには、次のコマンドを実行します。
$ caddy hash-password
Enter password:
Confirm password:
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
パスワードの準備ができたら、Caddyfileに次のコードを入力します。
basicauth /secret/* {
John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}
上記のコマンドは/secret
を保護します 作成したばかりの資格情報を含むディレクトリ。
サイトを保護するために追加できるセキュリティ構成は他にもあります。そのために、別のファイル/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'"
}
上記のコードは、以下を有効/実装します。
- サイトとそのすべてのサブドメインのHSTSサポートを有効にします。
- XSSフィルタリングを有効にします。
- コンテンツ/MIMEスニッフィングを防止します。
- サイトがIFRAME内に読み込まれるのを防ぎます。
- サイトがFLOC追跡トライアルに含まれるのを防ぎます。
- ユーザーエージェントが安全でないURLを処理する方法に関するコンテンツセキュリティポリシーを追加します。
- リファラーポリシーを実装して、プロトコルが同じことを示している場合、クロスオリジンリクエストに対してリファラーのみが送信されるようにします。
- 機能ポリシーは、特定のブラウザ機能を有効または無効にするメカニズムを提供します。
次に、必要なサイトブロックのいずれかにファイルをインポートします。
example.com {
...
import /etc/caddy/caddy_security.conf
}
サーバーを再起動して変更を実装します。
これで、Fedora 34 /CentOS8ベースのサーバーへのCaddyWebサーバーのインストールと構成に関するチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。