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のディレクトリに設定しないことです。そうしないと、すべてのファイルが外部からダウンロードされる可能性があり、データベースの設定などの機密ファイルも含まれる可能性があります。