A configuração que defini (abaixo) funciona, localhost
mas não para o meu domínio. O objetivo é acessar a porta 3000 externamente comautenticação básicaentão só eu posso acessá-lo. Quando vou para localhost
, ele é atualizado para https
, tenho que concluir a autenticação e, em seguida, a porta 3000 é mostrada, exatamente como deveria. No entanto, ir para api.example.com
não solicita autenticação, não atualiza a conexão e apenas mostra Invalid Host header
. Quando abro a porta 3000 para encaminhamento de porta e vou para api.example.com:3000
, posso acessar a porta, mas ela não requer autenticação, não usa https
e meu objetivo é evitar o encaminhamento de porta. Esta configuração veio de instruções, então não sei qual poderia ser o problema. Por que meu subdomínio não funciona com esta configuração?
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream supabase {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name localhost *host IP* api.example.com;
access_log off;
rewrite ^ https://$host$request_uri? permanent;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name localhost *host IP* api.example.com;
ssl_certificate /etc/api.example.com/fullchain.pem;
ssl_certificate_key /etc/api.example.com/privkey.pem;
# STUDIO
location / {
auth_basic "Authentication Required";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_set_header Host $host;
proxy_pass http://supabase;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
}
}
Firewall:
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
80/tcp (Nginx HTTP) ALLOW IN Anywhere
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
8000 ALLOW IN Anywhere
80,443/tcp (Nginx Full) ALLOW IN Anywhere
443/tcp (Nginx HTTPS) ALLOW IN Anywhere
80/tcp (Nginx HTTP (v6)) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
8000 (v6) ALLOW IN Anywhere (v6)
80,443/tcp (Nginx Full (v6)) ALLOW IN Anywhere (v6)
443/tcp (Nginx HTTPS (v6)) ALLOW IN Anywhere (v6)
Responder1
Seu bloco de servidor para a porta 80 possui apenas o nome localhost
configurado.
server_name localhost;
O domínio api.example.com
está faltando aqui. Portanto, a solicitação para esse domínio via HTTP é capturada pelo bloco de servidor padrão da configuração padrão do nginx.
Adicione o domínio aqui, como fez no bloco do servidor SSL.
server_name localhost api.example.com;
Responder2
Duvido que seu nome DNS seja realmente api.example.com - mas é uma boa prática NÃO publicá-lo aqui. No entanto, este erro é esperado se você fornecer um nome de host inválido - ou seja, um nome que contenha caracteres diferentes de az, 0-9, '.' e '-'. Isso pode não ser deliberado - omitindo um ';' final da lista de nomes provavelmente terá o mesmo resultado. Nesse cenário, o nginx se recusará a carregar um arquivo de configuração. Isso ésempreé uma boa ideia testar sua configuração nginx -t
antes de aplicar; 'systemctl reload nginx' não dirá que você tem uma configuração incorreta.