Nginx funktioniert nicht mit einer Domäne/URL, die auf die Server-IP verweist

Nginx funktioniert nicht mit einer Domäne/URL, die auf die Server-IP verweist

Die von mir eingestellte Konfiguration (unten) funktioniert für, localhostaber nicht für meine Domain. Das Ziel ist, extern auf Port 3000 zuzugreifen mitBasisauthentifizierungalso kann nur ich darauf zugreifen. Wenn ich zu gehe localhost, wird es auf aktualisiert https, ich muss die Authentifizierung abschließen und dann wird Port 3000 angezeigt, genau wie vorgesehen. Wenn ich zu gehe, erfolgt jedoch api.example.comkeine Authentifizierung, die Verbindung wird nicht aktualisiert und es wird nur angezeigt Invalid Host header. Wenn ich Port 3000 für die Portweiterleitung öffne und zu gehe api.example.com:3000, kann ich auf den Port zugreifen, aber es ist keine Authentifizierung erforderlich, es wird nicht verwendet httpsund mein Ziel ist es, die Portweiterleitung zu vermeiden. Diese Konfiguration stammt aus den Anweisungen, daher weiß ich nicht, wo das Problem liegen könnte. Warum funktioniert meine Subdomäne mit dieser Konfiguration nicht?

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)

Antwort1

In Ihrem Serverblock für Port 80 ist nur der Name localhostkonfiguriert.

server_name localhost;

Hier fehlt die Domäne api.example.com. Daher wird die Anfrage an diese Domäne über HTTP vom Standardserverblock aus der nginx-Standardkonfiguration erfasst.

Fügen Sie hier die Domäne hinzu, wie Sie es im SSL-Serverblock getan haben.

server_name localhost api.example.com;

Antwort2

Ich bezweifle, dass Ihr DNS-Name wirklich api.example.com ist – aber es ist eine gute Praxis, ihn hier NICHT zu veröffentlichen. Dieser Fehler ist jedoch zu erwarten, wenn Sie einen ungültigen Hostnamen angeben – also einen, der andere Zeichen als az, 0-9, '.' und '-' enthält. Dies ist möglicherweise nicht beabsichtigt – das Weglassen eines abschließenden ';' aus der Liste der Namen wird wahrscheinlich das gleiche Ergebnis haben. In einem solchen Szenario wird nginx das Laden einer Konfigurationsdatei ablehnen. SeinestetsEs ist eine gute Idee, Ihre Konfiguration vor dem Anwenden zu testen nginx -t. „systemctl reload nginx“ sagt Ihnen nicht, dass Sie eine fehlerhafte Konfiguration haben.

verwandte Informationen