내가 설정한 구성(아래)은 localhost
내 도메인에는 작동하지만 작동하지 않습니다. 목표는 외부에서 포트 3000에 액세스하는 것입니다.기본 인증그래서 나만 접근할 수 있어요. 로 가면 localhost
으로 업그레이드 되고 https
, 인증을 완료해야 하는데, 포트 3000이 원래 의도한 대로 표시됩니다. 그러나 으로 이동하면 api.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'는 구성이 잘못되었음을 알려주지 않습니다.