HTTPSは正常に動作しますが、HTTP URLではNGINXのウェルカムページが表示され、リダイレクトされません。

Discourse を Ubuntu Focal Fossa の VPS に最近インストールし、非常に良く動作していますが、いくつかの URL の特異性に対処するのに苦労しています。

以下は Safari で確認されている動作です。レジストラで @、WWW、および * の A ネームレコードを作成しました。

example.com [「Welcome to nginx!」ページが表示される] 失敗
www.example.com [https://example.com にリダイレクト] 成功
http://example.com [「Welcome to nginx!」ページが表示される] 失敗
http://www.example.com [https://example.com にリダイレクトし、正常に動作] 成功
https://example.com [期待通りに動作し、リダイレクトしない] 成功
https://www.example.com ['This Connection is Not Private' というブラウザメッセージでエラー] 失敗

インストールをルート/エイペックスにしたいと考えているため、セットアップ時に example.com を入力しました。

ご助言をいただければ幸いです!

Discourse サーバーで外部の nginx を実行していますか?その理由は何ですか?

Discourse には、80 ポートと 443 ポートでリッスンするように設定すれば、その役割を担う事前設定済みの nginx が最初から含まれています。

「いいね!」 1

こんにちは、@Falco さん、ご返信ありがとうございます。私の知る限りでは、VPS プロバイダーが提供するイメージは「Focal Fossa Clean OS」という名称のみのため、サードパーティ製のツールは含まれていないと推測されます。

これは、公開されている「30 分」インストール手順に沿って、そのまま箱から出して使用したものです。

sudo su

wget -qO- https://get.docker.com/ | sh

git clone https://github.com/discourse/discourse_docker.git /var/discourse

cd /var/discourse

./discourse-setup
「いいね!」 1

おや、それは非常に奇妙な挙動ですね!

app.yml を共有してもらえますか(パスワードなどの機密情報は削除してください)。このファイルは /var/discourse/containers/app.yml にあります。

また、docker ps -a の出力も教えてください。

もちろん、ありがとうございます。ドメインのTLDが特殊なものであれば(今回は .community ですが)、何か問題が発生するでしょうか?

## これはオールインワンのスタンドアロン Discourse Docker コンテナ用テンプレートです
##
## このファイルに変更を加えた後は、必ず再構築を行ってください
## /var/discourse/launcher rebuild app
##
## 編集時は *非常に* 注意してください!
## YAML ファイルは空白やインデントの誤りに極めて敏感です!
## 必要に応じて http://www.yamllint.com/ でこのファイルを検証してください

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Lets Encrypt (https) を追加したい場合は、以下の2行のコメントを外してください
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## このコンテナが公開する TCP/IP ポートはどれですか?
## Discourse を Apache や nginx などの他の Web サーバーとポートを共有させたい場合は、
## 詳細については https://meta.discourse.org/t/17247 を参照してください
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## db_shared_buffers を総メモリの最大 25% に設定します。
  ## ブートストラップが検出した RAM に基づいて自動的に設定されますが、上書きすることも可能です
  db_shared_buffers: "768MB"

  ## ソートパフォーマンスを向上させることができますが、接続ごとにメモリ使用量が増加します
  #db_work_mem: "40MB"

  ## このコンテナが使用する Git リビジョンはどれですか?(デフォルト: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## 同時にサポートされる Web リクエスト数は?メモリと CPU コア数に依存します。
  ## ブートストラップが検出した CPU に基づいて自動的に設定されますが、上書きすることも可能です
  UNICORN_WORKERS: 8

  ## TODO: この Discourse インスタンスが応答するドメイン名
  ## 必須です。Discourse は IP アドレスのみでは動作しません。
  DISCOURSE_HOSTNAME: example.com

  ## コンテナを上記で指定したホスト名(-h オプション)と同じホスト名で起動したい場合は、
  ## 以下のコメントを外してください(デフォルトは「$hostname-$config」)
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 初期登録時に管理者および開発者として設定されるメールアドレスのリスト
  ## 例:'user1@example.com,user2@example.com'(カンマ区切り)
  DISCOURSE_DEVELOPER_EMAILS: 'email@gmail.com'

  ## TODO: 新規アカウントの検証や通知送信に使用する SMTP メールサーバー
  # SMTP アドレス、ユーザー名、パスワードは必須です
  # 警告:SMTP パスワードに含まれる '#' 文字は問題を引き起こす可能性があります!
  DISCOURSE_SMTP_ADDRESS: smtp.postmarkapp.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: username
  DISCOURSE_SMTP_PASSWORD: "password"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (オプション、デフォルトは true)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (一部のプロバイダーで必須)

  ## Lets Encrypt テンプレートを追加した場合は、以下をコメント外して無料の SSL 証明書を取得してください
  LETSENCRYPT_ACCOUNT_EMAIL: email@gmail.com


  ## この Discourse インスタンスの HTTP または HTTPS CDN アドレス(プルするように設定)
  ## 詳細については https://meta.discourse.org/t/14857 を参照してください
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## IP アドレス検索用の Maxmind 地理的位置 IP アドレスキー
  ## 詳細については https://meta.discourse.org/t/-/137387/23 を参照してください
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Docker コンテナはステートレスです。すべてのデータは /shared に保存されます
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## プラグインはここに追加します
## 詳細については https://meta.discourse.org/t/19157 を参照してください
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## ビルド後に実行する任意のカスタムコマンド
run:
  - exec: echo "カスタムコマンドの開始"
  ## 最初の登録時の 'From' メールアドレスを設定したい場合は、以下のコメントを外して変更してください
  ## 最初の登録メールを受け取った後、再度コメントアウトしてください。1回だけ実行すれば十分です
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "カスタムコマンドの終了"

そして

CONTAINER ID   IMAGE                 COMMAND        CREATED          STATUS          PORTS                                      NAMES
465fbf1c3fb8   local_discourse/app   "/sbin/boot"   47 minutes ago   Up 46 minutes   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app

もしかすると、プロバイダーが提供するディストリビューションには、nginx が事前にインストールされているかもしれません。

curl -I localhost を実行すると、どのような出力が表示されますか?

HTTP/1.1 301 Moved Permanently
Server : nginx/1.18.0
Date : Mon, 25 Jan 2021 20:18:00 GMT
Content-Type : text/html
Content-Length : 169
Connection : keep-alive
Location : https://example.com

これは、すでにインストールされていたということでしょうか?(ごめんなさい、私はまだ初心者なので)

それが正常に動作している場合の期待されるレスポンスそのものです。では、http://example.com はまだ nginx のウェルカムページを表示していますか?

https://example.com は問題なく動作していますが、http://example.com(HTTP)は Welcome to nginx! ページにリダイレクトされてしまいます :sob:

実際のドメインを共有していただけますか?

つまり、nginx のウェルカムページは全く表示されませんね。

他のデバイス(例えばスマートフォンなど)でも試してもらえますか?

curl -I example.com -L
HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0
Date: Mon, 25 Jan 2021 20:35:21 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://example.com/

HTTP/2 200 
server: nginx
date: Mon, 25 Jan 2021 20:35:22 GMT
content-type: text/html; charset=utf-8
vary: Accept-Encoding
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-download-options: noopen
x-permitted-cross-domain-policies: none
referrer-policy: strict-origin-when-cross-origin
x-discourse-route: finish_installation/index
cache-control: no-cache, no-store
content-security-policy: base-uri 'none'; object-src 'none'; script-src https://example.com/logs/ https://example.com/sidekiq/ https://example.com/mini-profiler-resources/ https://example.com/assets/ https://example.com/brotli_asset/ https://example.com/extra-locales/ https://example.com/highlight-js/ https://example.com/javascripts/ https://example.com/plugins/ https://example.com/theme-javascripts/ https://example.com/svg-sprite/; worker-src 'self' https://example.com/assets/ https://example.com/brotli_asset/ https://example.com/javascripts/ https://example.com/plugins/
x-request-id: 8755d4fa-387f-4509-8709-b6075f274d09
x-runtime: 0.026020
strict-transport-security: max-age=31536000
「いいね!」 1

ああ、明らかに私が愚か者でした。ローカル DNS を確認するために、4G 回線でスマートフォンから試しましたが、それらの URL はすべて問題なく動作しました。その後、Wi-Fi に再接続すると、これもすべて正常に動作しました。そこでデスクトップの Safari のキャッシュをクリアすると、バムッ!—デスクトップ側でもすべて動作するようになりました。

これはおそらく、最初にホストをテストしていた際の名残で、キャッシュがクリアされなかったためでしょう。トラブルシューティングにご協力いただき、またお時間を割いていただいたこと、心より感謝申し上げます。

「いいね!」 2

ちなみに、私も今日Ubuntu 22.04でこの問題に遭遇しました。Safariのキャッシュをクリアして更新すると、問題が解決しました。