nginxプロキシ
Webmanが外部からのアクセスを直接提供する必要がある場合、Webmanの前にnginxプロキシを追加することをお勧めします。これには以下の利点があります。
- 静的リソースをnginxが処理し、Webmanはビジネスロジックの処理に集中できる
- 複数のWebmanが80、443ポートを共有し、ドメイン名で異なるサイトを区別し、1台のサーバーに複数のサイトを配置できる
- php-fpmとWebmanのアーキテクチャを共存させることができる
- nginxプロキシによるSSLの実装でhttpsがより簡単かつ効率的に行える
- 外部ネットワークからの不正なリクエストを厳しくフィルタリングできる
nginxプロキシの例
upstream webman {
server 127.0.0.1:8787;
keepalive 10240;
}
server {
server_name サイトドメイン名;
listen 80;
access_log off;
# 注意:ここは必ずwebmanのpublicディレクトリに設定する必要があり、webmanのルートディレクトリに設定してはいけない
root /your/webman/public;
location ^~ / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Connection "";
if (!-e $request_filename){
proxy_pass http://webman;
}
}
# .phpで終わるファイルへのアクセスを拒否
location ~ \.php$ {
return 404;
}
# .well-knownディレクトリへのアクセスを許可
location ~ ^/\.well-known/ {
allow all;
}
# .で始まるファイルまたはディレクトリへのアクセスを拒否
location ~ /\. {
return 404;
}
}
一般的に、上記の設定では開発者はserver_nameとrootを実際の値に設定するだけで済み、他のフィールドを設定する必要はありません。
注意
特に注意すべきは、rootオプションは必ずwebmanのpublicディレクトリに設定する必要があり、直接webmanのディレクトリに設定しないことです。そうしないと、すべてのファイルが外部からダウンロードされる可能性があり、データベースの設定などの機密ファイルも含まれる可能性があります。