Die von mir eingestellte Konfiguration (unten) funktioniert für, localhost
aber 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.com
keine 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 https
und 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 localhost
konfiguriert.
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.