私が設定した設定(下記)は、localhost
私のドメインでは機能しますが、機能しません。目標は、外部からポート3000にアクセスすることです。基本認証なので、自分だけがアクセスできるようになります。 に移動すると にlocalhost
アップグレードされhttps
、認証を完了する必要があり、その後、意図したとおりにポート 3000 が表示されます。ただし、に移動してもapi.example.com
認証は求められず、接続はアップグレードされず、 のみが表示されます。ポート 3000 を開いてポート転送を行い、 に移動すると、ポートにアクセスできますが、認証は必要なく、 は使用されず、私の目標はポート転送を回避することです。この構成は の指示によるものなので、何が問題なのかわかりません。なぜこの構成でサブドメインが機能しないのでしょうか?Invalid Host header
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」では設定に問題があることはわかりません。