Erro 403 ao alterar qualquer configuração após ativar o force_https com proxy

Olá, pessoal - Estou com um problema: ao ativar a opção force_https (após garantir que tudo esteja em HTTPS), não consigo:

  • alterar nenhuma configuração,
  • sair (ao clicar em sair, nada acontece),
  • ou fazer login (o redirecionamento SSO apenas leva à página inicial de deslogado).

Pensei que fosse um acaso ou algo que eu tivesse quebrado inicialmente, então destruí o aplicativo, excluí todos os dados e recriei/iniciei o aplicativo novamente.

Com o novo aplicativo, tudo voltou a funcionar perfeitamente; consegui restaurar a partir de backups, configurar todos os meus logotipos, ajustar diferentes configurações (alterar configurações de notificação por e-mail, ajustar o título, personalizar o CSS do tema, etc.), e não houve erros de SSL, além de as imagens da marca carregarem corretamente.

No entanto, assim que ativei novamente a opção force_https, os erros 403 voltaram a ocorrer.

Desta vez, entrei no container e desativei a opção force_https via CLI, usando:

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

Assim que desativei a opção, tudo no site voltou a funcionar normalmente.

Tentei analisar os logs (site_url.com/logs), mas não parecia haver muito além disso:

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

que era de um momento anterior, quando eu estava alterando algumas configurações do plugin discourse-chat-integration.

Não tenho certeza de como proceder agora e agradeceria qualquer sugestão.

Você está atrás de algum proxy estranho?

Estou executando-o em um servidor com outro aplicativo PHP, então estou usando um proxy_pass do Nginx; minha configuração do nginx:

server {
  server_name site_url;
  client_max_body_size 500m;

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

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

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


  listen 80;
  server_name site_url;
    return 404; # gerenciado pelo Certbot
}

Acho que você não está passando o https corretamente. Procure aqui por soluções.

Esqueci completamente de definir os cabeçalhos do proxy. Adicionei os cabeçalhos que faltavam e tudo está funcionando bem.

Obrigado!

Caso alguém enfrente esse problema, aqui estão os cabeçalhos de proxy_pass que eu estava faltando:

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;