Cand fac lynx localhost:14080
de la gazdă, funcționează. Site-ul web este încărcat din container.
Cand fac lynx localhost:14433
de la gazdă, NU funcționează.
Cand fac lynx https://localhost:14433
de la gazdă, NU funcționează. Eroare: Nu se poate realiza o conexiune sigură la gazda de la distanță.
Containerul rulează pe o rețea bridge, lansată de docker-compose. IP-ul containerului este: 172.21.0.2.
DAR, când o fac lynx https://172.21.0.2
FUNCȚIONEAZĂ...
...site-ul web este încărcat din container folosind certificate https și SSL. Primesc doar avertisment SSL:
172.21.02!=cert(CN<example.com>)-Continuare?
...ceea ce înseamnă că CN-ul certificatului nu se potrivește cu IP-ul pe care încercam să îl deschid, dar încă pot ignora acest avertisment și continui să deschid site-ul.
Aceasta înseamnă că http funcționează pe localhost (și funcționează și când folosesc IP-ul containerului).
Dar https funcționează doar când încerc să mă conectez folosind IP-ul containerului, dar nu funcționează când folosesc localhost.
Acesta este motivul pentru care cred că există o eroare în legările de porturi ale rețelelor create de docker.
Aș dori să mă pot conecta la container folosind localhost, așa că nu trebuie să specific noul IP al containerului de fiecare dată când relansez containerul, deoarece plănuiesc să configurez un proxy apache2 invers pe gazdă, deci că lumea exterioară se poate conecta la site-ul meu în container folosind https.
Acestea sunt setările mele pentru apache2 pe gazdă:
Fișierul example.com.conf în gazda mea apache conf:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
CustomLog /var/www/docker/example.com/log/host/custom.log combined
ErrorLog /var/www/docker/example.com/log/host/error.log
Redirect permanent / https://example.com/
ProxyRequests off
ProxyPreserveHost On
ProxyPass "/" "http://172.21.0.2/"
ProxyPassReverse "/" "http://172.21.0.2/"
</VirtualHost>
Fișierul example.com-le-ssl.conf în gazda mea apache conf:
<IfModule mod_ssl.c>
ErrorLog /var/www/docker/example.com/log/host/error.log
LogLevel debug
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
ProxyPreserveHost on
ServerAdmin [email protected]
LogLevel debug
CustomLog /var/www/docker/example.com/log/host/custom.log combined
ErrorLog /var/www/docker/example.com/log/host/error.log
<If "%{HTTP_HOST} == 'www.example.com'">
Redirect permanent / https://example.com/
</If>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLProxyEngine on
SSLEngine on
ProxyRequests off
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass "/" "http://172.21.0.2/"
ProxyPassReverse "/" "http://172.21.0.2/"
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>
Aceasta este conf. mea apache în container:
Fișierul default-ssl.conf în gazda mea apache conf:
ServerName example.com
<VirtualHost _default_:80>
ServerName example.com
ServerAlias www.example.com
ServerADmin [email protected]
DocumentRoot /var/www/html/www
ErrorLog /var/log/container/error.log
CustomLog /var/log/container/custom.log combinat
</VirtualHost>
<IfModule mod_ssl.c>
Depanare LogLevel
<VirtualHost _default_:443>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/html/www
Depanare LogLevel
ErrorLog /var/log/container/error.log
CustomLog /var/log/container/custom.log combinat
Includeți /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>
Acesta este fișierul meu docker-compose.yml:
versiunea: „3.7”
retele:
exemplu webapp:
şofer: pod
Servicii:
referint:
container_name: examplewebapp
construi:
context: ./
dockerfile: Dockerfile
tinta: dev
imagine: examplewebapp
reporniți: dacă nu este oprit
retele:
- exemplu de aplicație web
porturi:
**- „14433:433”
- „14080:80”**
work_dir: /var/www/html
volume:
- ./container_apache_conf:/etc/apache2/sites-available
- ./api:/var/www/html/api
- ./archive:/var/www/html/archive
- ./log/container:/var/log/container
- ./log/gazdă:/var/log/gazdă
- ./etc/letsencrypt:/etc/letsencrypt
- ./www:/var/www/html/www
Acesta este fișierul meu Docker:
DIN php:7.4-apache AS baza
RUN apt-get update
RUN mkdir -p /var/www/html/www # site-ul web va fi salvat aici
RUN mkdir -p /var/log/container # jurnalele apache vor fi salvate aici
# conectivitate mysql și internaționalizare pentru php
RUN docker-php-ext-install mysqli
RUN docker-php-ext-enable mysqli
RUN apt-get install -y libicu-dev
RUN docker-php-ext-configure intl
RUN docker-php-ext-install intl
# activează https pentru apache
RUN a2enmod ssl
RUN a2ensite default-ssl.conf
DIN baza AS dev
RUN pecl install xdebug-3.1.1
RUN docker-php-ext-enable xdebug
DIN testul AS de bază
DE LA bază AS prod
Acesta este ceea ce este generat de:
docker network inspectați examplecom_example
[
{
„Nume”: „examplecom_example”,
„Id”: „7311d1a7254466bd6ab44833362460cde4336ade622bca87def62bb3d840ef3f” ,
„Creat”: „2022-02-13T21:16:34.861655456Z”,
„Scope”: „local”,
„Driver”: „pod”,
„EnableIPv6”: fals,
„IPAM”: {
„Driver”: „implicit”,
„Opțiuni”: nul,
„Configurare”: [
{
„Subrețea”: „172.21.0.0/16”,
„Gateway”: „172.21.0.1”
}
]
},
„Intern”: fals,
„Atașabil”: adevărat,
„Ingress”: fals,
„ConfigFrom”: {
„Rețea”: „”
},
„ConfigOnly”: fals,
„Containere”: {
"be53d5b37e2fbcaae49bb111b921dfd4caf5db20ed680403083333ffac983b93": {
„Nume”: „exemplu”,
„EndpointID”: „fb1428d29e2fc9564b3e1758a7efac15909a897021320b15f 1df8c1d600efd89”,
„MacAddress”: „00:00:00:00:00:00”,
„IPv4Address”: „172.21.0.2/16”,
„Adresa IPv6”: „”
},
}
]
Aceasta este rezultatul docker ps:
CONTAINER ID IMAGINE COMANDA CREAȚĂ STAREA PORTURI NUMELE
be53d5b37e2f exemplu „docker-php-entrypoi⦔ 11 ore în urmă Up 11 ore 443/tcp, 0.0.0.0:14080->80/tcp, :::14080->80/tcp, 0.0.0.0->44333333333333-> /tcp, :::14433->433/tcp exemplu
Folosesc imaginea oficială php docker.
Și în docker compose, creez o rețea de punte și mapez:
Întrebările mele sunt:
De ce mă pot conecta de la gazda mea la containerul meu folosind http on http://127.0.0.1:14080, dar nu folosiți https https://127.0.0.1:14433, chiar dacă ambele porturi pentru http și https (14080:80 și 14433:433) ar trebui mapate în același mod? Și de ce încă funcționează https când mă conectez la container folosind https activat https://172.21.0.2.
Ce ar trebui să fac pentru a putea redirecționa traficul https de la apache-ul meu gazdă (ca proxy invers), către apache-ul meu container folosind localhost, de ex. https://127.0.0.1:14433/ - astfel încât containerul meu să poată fi accesat de pe internet, folosind și https, și astfel nu trebuie să specific IP-ul containerului în configurația mea apache gazdă a proxy-ului https invers?