리버스 프록시와 HTTPS 환경의 Discourse

컨테이너 내 유닉스 소켓으로 Apache2를 리버스 프록시로 사용하는 테스트 환경에서 Apache2가 “문제없이” 작동하는 것을 확인했습니다:

발견한 유일한 차이점(참고: 테스트는 몇 시간밖에 하지 않았으며, 완전한 검증은 아닙니다)은 다음과 같습니다:

  • 컨테이너의 공유 볼륨에 있는 유닉스 소켓으로의 심볼릭 링크를 사용할 경우 Apache2가 작동하지 않습니다;
  • 대략적인 테스트에서 Apache2가 약간 느렸지만, 그 정도는 크지 않았습니다.

개인적으로 기술에 대한 종교 전쟁 같은 것을 좋아하지 않습니다. 따라서 "Apache2를 사용하면 많은 문제가 발생할 것이다"라는 주장에는 동의하지 않습니다. 제 테스트 과정에서 Apache2로 인해 부정적인 문제를 경험한 적은 없습니다.

Apache2(참고: LETSENCRYPT와 함께 HTTP로 잘 작동했습니다)에 사용했던 핵심 설정은 다음과 같습니다:

# cat discourse.example.conf
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName  discourse.example.com
  DocumentRoot /website/discourse

  RewriteEngine On
  ProxyPreserveHost On
  ProxyRequests Off
  ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
  ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
  ErrorLog /var/log/apache2/discourse.error.log
  LogLevel warn
  CustomLog /var/log/apache2/discourse.access.log combined

  RewriteCond %{SERVER_NAME} =discourse.example.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

참고: force_https가 설정되어 있음에도 HTTP로 서빙되는 문제를 경험한 유일한 경우는 /uploads 디렉토리에 파일이 누락되었을 때였으며, 이는 (물론) Apache2와 nginx를 리버스 프록시로 사용하는 것과는 무관합니다.