nginx の名前ベースの複数の仮想ホストが機能しない

nginx の名前ベースの複数の仮想ホストが機能しない

同じ docker ブリッジ内の django セットアップにリバース プロキシする仮想ホストで nginx docker を実行しています (これは機能します)。 nginx 自体から静的 HTML コンテンツを提供する 2 番目の仮想ホストを追加しようとしています。 Web 上の例に従おうとしていますが、うまくいきません。 誰かが私の間違いに気付いてくれることを願っています。

以下のファイルでは、匿名性を保つためにDNS名を変更しています。abcde.wxyz.orgとabcd.defgh.orgは両方とも同じIPに解決され、名前解決は正常に機能します。(a) アクセスhttps://abcd.defgh.org/(つまりプロキシ)は正常に動作します。(b)アクセスhttp://abcde.wxyz.org/(静的ウェブページ)では、ERR_CONNECTION_REFUSED(c)アクセスが発生しますhttps://abcde.wxyz.org/すると、(a) に至りますが、これも起こるべきではありません。

何が間違っているのでしょうか?

私の /etc/nginx/nginx.conf ファイルは次のとおりです:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/ ディレクトリには、次のような 1 つのファイル (「django.conf」) があります。

server {
  listen 80;
  server_name abcd.defgh.org;
  access_log  /var/www/logs/abcd.defgh.org.log;
  error_log  /var/www/logs/abcd.defgh.org.log error;
  root /var/www/abcd.defgh.org/public_html;
  index index.html index.htm;

  location / {
    try_files $uri $uri/ /index.html;
  }
}


server {
  listen 80;
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name abcde.wxyz.org;

  ssl_certificate /etc/ssl/certs/localhost.crt;
  ssl_certificate_key /etc/ssl/private/localhost.key;

  ssl_protocols TLSv1.2 TLSv1.1 TLSv1;


  location / {
    proxy_pass http://web:8000;
    }
}

「web」は docker ネームサービスによって解決され、機能します。

さらにトラブルシューティングを行うために、nginx docker からアクセス ログやエラー ログを取得できないようです。

答え1

誤報です。Docker 環境の問題であることが判明しました。Docker はポート 443 のみが転送され、ポート 80 は転送されないように設定されていました。

関連情報