我設定的配置(如下)適用於localhost
但不適用於我的網域。目標是從外部存取連接埠 3000基本認證所以只有我可以訪問它。當我轉到 時localhost
,它升級到https
,我必須完成身份驗證,然後顯示連接埠 3000,正如它的意思一樣。但是,going toapi.example.com
不會提示身份驗證,不會升級連接,僅顯示Invalid Host header
。當我打開端口3000進行端口轉發並轉到 時api.example.com:3000
,我可以訪問該端口,但它不需要身份驗證,不使用https
,我的目標是避免端口轉發。這個配置來自說明,所以我不知道可能是什麼問題。為什麼我的子網域無法使用此配置?
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;
}
}
防火牆:
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)
答案1
您的連接埠 80 的伺服器區塊僅配置了名稱localhost
。
server_name localhost;
api.example.com
這裡缺少域名。因此,透過 HTTP 對該網域的請求由 nginx 預設配置中的預設伺服器區塊捕獲。
此處新增網域,就像您在 SSL 伺服器區塊中所做的那樣。
server_name localhost api.example.com;
答案2
我懷疑您的 DNS 名稱確實是 api.example.com - 但最好不要在此處發布該名稱。但是,如果您提供無效的主機名稱(即包含 az、0-9、「.」以外的字元),則會出現此錯誤。和 '-'。這可能不是故意的 - 省略了結尾的“;”從名稱列表中可能會得到相同的結果。在這種情況下,nginx 將拒絕載入設定檔。它是總是nginx -t
在申請之前測試您的配置是個好主意; “systemctl reload nginx”不會告訴你你的設定有問題。