私はプロキシを前面に置いていないため、例を持っていませんが、以前に実装した記憶があります。いずれにせよ、秘密はなく、他のリバースプロキシと同じように設定すれば問題ありません。以下は、ソケットではなくポートを使用して行うべきことの概要です。
-
ポート 80 および 443 以外のポート(例:8443)で動作している WordPress サービスが確実に存在することを確認してください。まずインターネットに公開して動作確認を行うこともできます。
-
Discourse についても同様に、異なるポートにマッピングしてください。
変更前:
expose:
- "80:80" # http
- "443:443" # https
変更後(例):
expose:
- "8081:80" # http
- "8444:443" # https
app.yml ファイルを確認してください(持っていない場合は、公式ガイドに従ってスタンドアロンマシンで Discourse を実行し、動作を確認した上で、/var/discourse/containers/ に生成された app.yml ファイルを参照することをお勧めします)。以下は app.yml ファイルのサンプルです:discourse_docker/samples/standalone.yml at master · discourse/discourse_docker · GitHub
- Nginx をインストールし、設定ファイルにプロキシディレクティブを追加してください。以下はサンプル抜粋です。
upstream blog {
server localhost:8080;
}
server {
server_name blog.barinaklar.com;
server_tokens off;
listen 80;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://blog.barinaklar.com$request_uri;
}
}
server {
server_name blog.barinaklar.com;
server_tokens off;
listen 443 ssl;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://blog;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
upstream forum {
server localhost:8081;
}
server {
server_name forum.barinaklar.com;
server_tokens off;
listen 80;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://forum.barinaklar.com$request_uri;
}
}
server {
server_name forum.barinaklar.com;
server_tokens off;
listen 443 ssl;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://forum;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
これは WordPress がポート 8080 で、Discourse がポート 8081 で動作していることを前提としています。これらのポートへのアクセスをブロックするファイアウォールを設定してください(クラウドプロバイダーはデフォルトで 22 番ポート以外のすべてのポートをブロックしていることが多いため、不要な場合もあります)。
この場合、SSL/TLS 証明書の発行はご自身で行う必要があります(certbot を cron ジョブで定期的に実行することで可能です。そのため、Nginx 設定に /.well-known/acme-challenge/ のパスを既に含めています)。
前述の通り、これは概要に過ぎず、見落としがあるかもしれません。ポート変更に伴うベース URL には特に注意してください(ユーザーを https://yourdomain ではなく https://yourdomain:8081 にリダイレクトしようとしていないか確認し、必要に応じて修正してください)。
WordPress がコンテナ内でポート 80 または 443 を使用して実行されている場合は、この手順が不要な場合があります。Discourse についても同様です。問題が発生するとすれば https 関連で、プロキシ側で http ポートを使用しているために https から http へリダイレクトされてしまう可能性があります。そのような場合は、発生を確認して修正してください。