프록시에서 force_https를 활성화한 후 설정을 변경하면 403 오류 발생

안녕하세요, 여러분. force_https 옵션을 활성화하면(모든 것이 https로 설정된 것을 확인한 후) 다음과 같은 문제가 발생합니다:

  • 어떤 설정도 변경할 수 없고,
  • 로그아웃할 수 없으며(로그아웃을 클릭해도 아무 반응이 없고),
  • 로그인도 불가능합니다(SSO 리다이렉트가 로그아웃된 홈 페이지로만 이동함).

처음에는 일시적인 오류이거나 제가 무언가를 잘못 건드린 줄 알고 앱을 삭제하고 모든 데이터를 삭제한 뒤 앱을 다시 부트스트랩/시작했습니다.

새 앱에서는 모든 것이 다시 잘 작동했습니다. 백업에서 복원할 수 있었고, 로고를 모두 설정하고, 다양한 설정을 조정(이메일 알림 설정 변경, 제목 조정, 테마 CSS 사용자 지정 등)할 수 있었으며, SSL 오류가 없고 브랜드 이미지도 정상적으로 로드되었습니다.

그러나 force_https 옵션을 다시 활성화하자마자 다시 모든 403 오류가 발생하기 시작했습니다.

이번에는 컨테이너에 들어가서 CLI를 통해 force_https 옵션을 비활성화했습니다:

/var/discourse/launcher enter app
rails c
SiteSetting.force_https = false

옵션을 비활성화하자마자 사이트의 모든 기능이 다시 정상 작동하기 시작했습니다.

로그(site_url.com/logs)를 살펴보았지만, discourse-chat-integration 플러그인의 설정을 변경하던 이전 시간에 발생한 아래 내용 외에 특별한 것이 없었습니다:

Error: Forbidden
Url: https://site_url.com/assets/ember_jquery-1d5617356dd43f27b8adbf60ccb854a1f5992b9b9f9e51e32ea7287fc9eeb25b.js
Line: 1
Column: 262166
Window Location: https://site_url.com/admin/plugins/chat/discord

이제 어떻게 진행해야 할지 모르겠으며, 조언을 구합니다.

이상한 프록시를 사용하고 계신가요?

서버에서 다른 PHP 애플리케이션과 함께 실행하고 있으므로 Nginx proxy pass를 사용 중입니다. 제 nginx 설정은 다음과 같습니다:

server {
  server_name site_url;
  client_max_body_size 500m;

  location / {
      proxy_pass http://127.0.0.1:8080;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/site_url/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/site_url/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = site_url) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


  listen 80;
  server_name site_url;
    return 404; # managed by Certbot
}

https를 올바르게 전달하지 않는 것 같습니다. 여기에서 해결책을 검색해 보세요.

프록시 헤더를 설정해야 한다는 것을 완전히 잊고 있었습니다. 누락된 헤더를 추가하니 이제 모든 것이 정상적으로 작동합니다.

감사합니다!

혹시 같은 문제를 겪는 분을 위해, 제가 누락했던 프록시 패스 헤더를 공유합니다:

proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;