nginx 프록시

Webman이 외부에서 직접 접근 가능하도록 구성할 때, Webman 앞에 nginx 프록시를 추가하는 것을 권장합니다. 이렇게 하면 다음과 같은 장점이 있습니다.

  • 정적 리소스를 nginx가 처리하여 Webman이 비즈니스 로직 처리에 집중할 수 있습니다.
  • 여러 개의 Webman이 80, 443 포트를 공유할 수 있으며, 도메인 이름으로 다양한 사이트를 구분해 단일 서버에 여러 사이트를 배포할 수 있습니다.
  • 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 디렉토리로 직접 설정해서는 안 됩니다. 그렇지 않으면 모든 파일이 외부에서 다운로드되고 접근될 수 있으며, 데이터베이스 설정 등 민감한 파일이 유출될 수 있습니다.