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;
  # 중요: root는 반드시 webman의 public 디렉토리를 가리켜야 하며, webman 루트 디렉토리가 아니어야 합니다
  root /your/webman/public;

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    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 "";
    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 루트 디렉토리로 설정하지 마세요. 그렇지 않으면 데이터베이스 설정 등 민감한 파일을 포함한 모든 파일이 인터넷에서 다운로드 및 접근 가능해질 수 있습니다.