fix(deploy): aulas em Markdown pelo proxy do nginx, sem CORS
O Gitea nao envia Access-Control-Allow-Origin, entao o navegador bloqueava a leitura do Markdown a partir de cursos.overia.com.br e toda aula mostrava "Failed to fetch". Novo /aulas/<caminho>.md no nginx busca o arquivo no Gitea e o serve no proprio dominio. So aceita GET/HEAD de .md sob courses/ do repositorio ai-bot/cursos, rejeita "..", resolve o DNS em tempo de execucao (o nginx nao deixa de subir se o Gitea estiver fora) e nao repassa cookies. No banco, as 8 aulas passaram a apontar para /aulas (backup das linhas em ~/backups/learnhouse-20261003 no NAS4). README: GITEA_RAW_BASE agora deve ser https://cursos.overia.com.br/aulas, senao uma nova publicacao desfaz a correcao. O conf tambem referencia theme-toggle.js, que entra no commit seguinte. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -24,9 +24,11 @@ LEARNHOUSE_ORG_SLUG=
|
||||
GITEA_RAW_BASE=
|
||||
```
|
||||
|
||||
`GITEA_RAW_BASE` é a raiz raw do repo no Gitea (ex:
|
||||
`https://git.xenserver.com.br/ai-bot/cursos/raw/branch/main/courses`), usada
|
||||
pra montar a URL de cada aula Markdown.
|
||||
`GITEA_RAW_BASE` é a base usada pra montar a URL de cada aula Markdown. Use
|
||||
`https://cursos.overia.com.br/aulas`: o nginx do LearnHouse repassa `/aulas/<caminho>.md`
|
||||
pra `https://git.xenserver.com.br/ai-bot/cursos/raw/branch/main/courses/<caminho>.md`.
|
||||
**Não** use a URL raw do Gitea direto: ela não envia `Access-Control-Allow-Origin` e o
|
||||
navegador bloqueia a leitura (a aula mostra "Failed to fetch").
|
||||
|
||||
## Uso
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
# Aulas em Markdown: o Gitea não envia Access-Control-Allow-Origin, então o navegador bloqueia a leitura direta
|
||||
# a partir de cursos.overia.com.br. Este proxy serve o mesmo arquivo no próprio domínio (/aulas/...).
|
||||
# Só caminhos .md, sem "..", sempre sob courses/ do repositório ai-bot/cursos (o $request_uri mantém o escape original).
|
||||
map $request_uri $gitea_aula {
|
||||
default "";
|
||||
"~^/aulas/(?<aula_path>(?!.*\.\.)[^?#]+\.md)(?:\?.*)?$" /ai-bot/cursos/raw/branch/main/courses/$aula_path;
|
||||
}
|
||||
|
||||
# Botão "Sair" só para quem tem a sessão do LearnHouse (cookie LH_access; $cookie_ não lê nome em maiúsculas).
|
||||
map $http_cookie $ov_logout_btn {
|
||||
default "";
|
||||
@@ -71,6 +79,22 @@ server {
|
||||
return 302 https://$http_host/oauth2/start?rd=$request_uri;
|
||||
}
|
||||
|
||||
location ^~ /aulas/ {
|
||||
if ($request_method !~ ^(GET|HEAD)$) { return 405; }
|
||||
if ($gitea_aula = "") { return 404; }
|
||||
resolver 127.0.0.11 valid=60s ipv6=off;
|
||||
proxy_pass https://git.xenserver.com.br$gitea_aula;
|
||||
proxy_ssl_server_name on;
|
||||
proxy_set_header Host git.xenserver.com.br;
|
||||
proxy_set_header Accept-Encoding "";
|
||||
proxy_set_header Cookie "";
|
||||
proxy_hide_header Set-Cookie;
|
||||
proxy_connect_timeout 5s;
|
||||
proxy_read_timeout 15s;
|
||||
expires 5m;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
}
|
||||
|
||||
# Tema overia (CSS + fontes), montado de ./theme no container do nginx.
|
||||
location ^~ /overia-theme/ {
|
||||
alias /usr/share/nginx/overia-theme/;
|
||||
@@ -129,7 +153,7 @@ server {
|
||||
proxy_pass http://learnhouse-app:80;
|
||||
proxy_set_header Accept-Encoding "";
|
||||
sub_filter_once on;
|
||||
sub_filter '</head>' '<link rel="stylesheet" href="/overia-theme/overia.css?v=9"></head>';
|
||||
sub_filter '</head>' '<link rel="stylesheet" href="/overia-theme/overia.css?v=11"><script src="/overia-theme/theme-toggle.js?v=1"></script></head>';
|
||||
sub_filter '</body>' '$ov_logout_btn</body>';
|
||||
# Use $http_host (not $host) so the port is preserved — Next.js Server
|
||||
# Actions reject POSTs where origin and x-forwarded-host disagree.
|
||||
@@ -156,7 +180,7 @@ server {
|
||||
proxy_pass http://learnhouse-app:80;
|
||||
proxy_set_header Accept-Encoding "";
|
||||
sub_filter_once on;
|
||||
sub_filter '</head>' '<link rel="stylesheet" href="/overia-theme/overia.css?v=9"></head>';
|
||||
sub_filter '</head>' '<link rel="stylesheet" href="/overia-theme/overia.css?v=11"><script src="/overia-theme/theme-toggle.js?v=1"></script></head>';
|
||||
sub_filter '</body>' '$ov_logout_btn</body>';
|
||||
# Use $http_host (not $host) so the port is preserved — Next.js Server
|
||||
# Actions reject POSTs where origin and x-forwarded-host disagree.
|
||||
|
||||
Reference in New Issue
Block a user