Nginx não funciona com domínio/url que aponta para IP do servidor

Nginx não funciona com domínio/url que aponta para IP do servidor

A configuração que defini (abaixo) funciona, localhostmas 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.comnã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 httpse 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 localhostconfigurado.

server_name localhost;

O domínio api.example.comestá 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 -tantes de aplicar; 'systemctl reload nginx' não dirá que você tem uma configuração incorreta.

informação relacionada