Nginx 無法使用指向伺服器 IP 的網域/url

Nginx 無法使用指向伺服器 IP 的網域/url

我設定的配置(如下)適用於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”不會告訴你你的設定有問題。

相關內容