ついに「複数のドメインで Let’s Encrypt を設定する」と「単一/複数のドメインを Discourse インスタンスにリダイレクトする」というガイドを読み終える時間が見つかりました。
あなたのものよりも containers/app.yml ファイルに多くの設定を追加しましたが、ほぼすべてが正しく動作しています。
私の Discourse は www. サブドメインでホストされており、目的は apex ドメインからの http および https 要求を www サブドメインにリダイレクトすることでした。これは現在機能していますが、https://mydomain.com にアクセスするとリダイレクトは行われるものの、Chrome のコンソールに以下の警告が表示されます。
Redirecting navigation example.com -> www.example.com because the server presented a certificate valid for www.example.com but not for example.com. To disable such redirects launch Chrome with the following flag: --disable-features=SSLCommonNameMismatchHandling
私の app.yml の追加設定は以下の通りです。
after_ssl:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d example.com -d www.example.com --keylength"
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /return 301 https.+/
to: |
return 301 https://$host$request_uri;
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /gzip on;[^\}]+\}/m
to: |
gzip on;
add_header Strict-Transport-Security 'max-age=31536000'; # remember the certificate for a year and automatically connect to HTTPS for this domain
after_web_config:
- replace:
filename: /etc/nginx/nginx.conf
from: /sendfile.+on;/
to: |
server_names_hash_bucket_size 64;
sendfile on;
- file:
path: /etc/nginx/conf.d/discourse_redirect_1.conf
contents: |
server {
listen 80;
listen 443 ssl;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
これは正しいでしょうか?もし正しい場合、証明書の名前不一致の問題に対する解決策はありますか?
編集:www サブドメイン用の A レコードと、@ を使用して apex ドメインへのすべての要求を捕捉するもう一つの A レコードの 2 つを持っています。どちらも Digital Ocean のドロップレットの IP を指しています。これも正しいと想定してよいでしょうか?
ありがとうございます。