ポート8080と8443にキャディWebサーバーを公開し、それぞれ80と443にマップされたドッカーがあります。
https://localhost:8443を使用してローカルブラウザを介してアクセスできますが、ブラウザは最初にSSL証明書が自己署名されたと文句を言います。不明な理由でhttp://localhost:8080を使用してアクセスしようとすると、ブラウザはhttps://localhost(httpsですがポートはありません)にリダイレクトされます。
[michael@localhost api-platform]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4f9c942d02f api-platform_caddy "caddy run --config …" 22 minutes ago Up 22 minutes 2019/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, 0.0.0.0:8443->443/udp, :::8443->443/tcp, :::8443->443/udp api-platform_caddy_1
120471adcb43 api-platform_php "docker-entrypoint p…" 22 minutes ago Up 22 minutes (healthy) 9000/tcp api-platform_php_1
4ab23f9bd5d9 postgres:13-alpine "docker-entrypoint.s…" 22 minutes ago Up 22 minutes 0.0.0.0:5433->5432/tcp, :::5433->5432/tcp api-platform_database_1
958944520bd5 api-platform_pwa "docker-entrypoint.s…" 22 minutes ago Up 22 minutes 3000/tcp api-platform_pwa_1
[michael@localhost api-platform]$
別のコンピュータからDockerのWebサーバーにアクセスしたいです。私は次のアプローチを試しましたが、ホストのApache Webサーバーを使用するよりも優れた方法がある場合は、それを変更できます。
両方のバージョンを試してみました(以下の2つの仮想ホストプロファイルを参照)。 Apacheなしで使用するのと似ています。http://api-platform.example.com:80httpsにリダイレクトされます。
リクエストを次に転送します。http://127.0.0.1:8080。動作は、https://localhostを使用するローカルシステム、または次のものを使用するリモートシステムで同じです。https://api-platform.example.com/ブラウザに「クライアントがHTTPSサーバーにHTTPリクエストを送信しました」と表示されます。 Dockerログは自動で、Apacheはエラーを記録しません。しかし、Apacheのログアクセスは次のとおりです。
127.0.0.1 - - [05/Sep/2021:10:18:32 -0700] "GET / HTTP/1.1" 400 48 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0" (localhost)
11.22.33.44 - - [05/Sep/2021:10:34:18 -0700] "GET / HTTP/1.1" 400 48 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36" (remote)
リクエストを通過https://127.0.0.1:8443。 localhostの場合、ブラウザが最初に署名された署名に対して文句を言うことを除いて、期待どおりに機能しますが、リモートアクセスの場合、ブラウザは次のようにThe proxy server received an invalid response from an upstream server
Apacheのアクセスログとエラーログを表示します。
11.22.33.44 - - [05/Sep/2021:10:29:10 -0700] "GET / HTTP/1.1" 502 341 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"
11.22.33.44 - - [05/Sep/2021:10:29:10 -0700] "GET /favicon.ico HTTP/1.1" 200 - "https://api-platform.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"
11.22.33.44 - - [05/Sep/2021:10:29:10 -0700] "GET /favicon.ico HTTP/1.1" 502 341 "https://api-platform.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"
[Sun Sep 05 10:29:30.461504 2021] [proxy_http:error] [pid 111778:tid 140510476093184] (103)Software caused connection abort: [client 11.22.33.44:53690] AH01102: error reading status line from remote server 127.0.0.1:8443
[Sun Sep 05 10:29:30.461535 2021] [proxy:error] [pid 111778:tid 140510476093184] [client 11.22.33.44:53690] AH00898: Error reading from remote server returned by /
[Sun Sep 05 10:29:30.481675 2021] [proxy_http:error] [pid 111778:tid 140510240954112] (103)Software caused connection abort: [client 11.22.33.44:53690] AH01102: error reading status line from remote server 127.0.0.1:8443, referer: https://api-platform.example.com/
[Sun Sep 05 10:29:30.483998 2021] [proxy_http:error] [pid 111778:tid 140510257739520] (103)Software caused connection abort: [client 11.22.33.44:59869] AH01102: error reading status line from remote server 127.0.0.1:8443, referer: https://api-platform.example.com/
[Sun Sep 05 10:29:30.484012 2021] [proxy:error] [pid 111778:tid 140510257739520] [client 11.22.33.44:59869] AH00898: Error reading from remote server returned by /favicon.ico, referer: https://api-platform.example.com/
ファイアウォールの設定はこの文書の下部に表示されます。 HTTPサーバーへのリモートアクセスをどのように許可する必要がありますか?
仮想ホスト構成ファイル:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName api-platform.example.com
ProxyPreserveHost On
ProxyRequests off
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ErrorLog /var/log/httpd/api-platform.example.com-error.log
CustomLog /var/log/httpd/api-platform.example.com-access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/testing.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/testing.example.com/privkey.pem
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName api-platform.example.com
ProxyPreserveHost On
ProxyRequests off
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLProxyCheckPeerName off
ProxyPass / https://127.0.0.1:8443/
ProxyPassReverse / https://127.0.0.1:8443/
ErrorLog /var/log/httpd/api-platform.example.com-error.log
CustomLog /var/log/httpd/api-platform.example.com-access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/testing.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/testing.example.com/privkey.pem
</VirtualHost>
</IfModule>
ファイアウォールの設定
[michael@localhost api-platform]$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s31f6 wlp0s20f3
sources:
services: cockpit dhcpv6-client ssh
ports: 80/tcp 443/tcp 8080/tcp 8443/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[michael@localhost api-platform]$
ベストアンサー1
ホストシステムにはWebサーバーは必要ありません。私はこれがホストシステムのファイル壁であると思います。ポートをブロックできます。