Estou recebendo muitos bots/crawlers ruins acessando meu site Discourse com um user agent vazio. Normalmente, eu editaria a configuração do nginx para fazer isso, mas isso não é acessível ao usar o método de instalação Docker. Eu realmente não quero adicionar um RP extra apenas para isso, se puder evitar.
Você pode consultar discourse_docker/templates/web.ratelimited.template.yml at main · discourse/discourse_docker · GitHub como um exemplo de como modificar a configuração do nginx dentro do contêiner.
Para qualquer outra pessoa que queira fazer isso especificamente, criei /var/discourse/templates/web.blockemptyua.yml com o seguinte conteúdo:
run:
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /listen 443 ssl http2;/
to: |
listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }
Em seguida, em /var/discourse/containers/app.yml, adicionei este novo arquivo de template ao fim da lista de templates no topo do arquivo, seguido por ./launcher rebuild app
O Nginx agora rejeita todas as requisições com um UA vazio.
Editar: Mudei a correspondência/substituição para um lugar melhor.
Eu não conheço o Docker, então, para garantir, porque ficarei nervoso toda vez que vir replace em qualquer lugar…
Isso não está substituindo totalmente o conteúdo de discourse.conf, mas adicionando a ele, certo?
Ele está substituindo uma linha dentro do arquivo. Portanto, ele encontra a primeira instância de:
listen 443 ssl http2;
E o substitui por
listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }
Assim, estamos apenas adicionando uma nova linha ao arquivo no local correto. Nenhuma outra parte do arquivo é tocada. Ele usa o mesmo mecanismo dos modelos oficiais para aplicar o patch no arquivo com segurança.
Como eu disse antes, eu não sei docker. Sou apenas um pobre usuário final com doutorado em copiar e colar.
É por isso que um aviso para futuros pesquisadores:
web.blockemptyua.yml não pode ser o primeiro dos templates declarados. Mais precisamente, ele tem que vir depois de web.template.yml (ou talvez depois de todos os templates web.*).
A ordem tem significado aqui, eu acho, e se eu/nós estamos tentando trabalhar com ele como o primeiro, a reconstrução/inicialização para com um erro porque não há nenhum /etc/nginx/conf.d/discourse.conf naquele momento.
Bem, todo dia algo novo ![]()
De fato, ele precisa ir no final. Editei minha postagem para incluir isso ![]()
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.