Cum pot proxy un site web de la Docker prin Nginx fără ca acesta să acționeze ca gazdă locală?
Configurația mea actuală constă într-o gazdă Ubuntu cu câteva containere Docker cu porturi expuse.Containerele Docker sunt expuse doar local. Expunerea pe Internet constă într-un server Nginx care trimite containerele Docker către anumite subdomenii.
Într-un container Docker rulez Wordpress. L-am scos din Docker Hub folosind acest fișier YML:
versiunea: „3.1”
Servicii:
wordpress:
container_name: myapp-cms
imagine: wordpress
reporniți: întotdeauna
porturi:
- 8087:80
mediu inconjurator:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exemplu de utilizator
WORDPRESS_DB_PASSWORD: exemplu de trecere
WORDPRESS_DB_NAME: exampledb
volume:
- /srv/wordpress/cms:/var/www/html
db:
container_name: myapp-db
imagine: mysql:5.7
reporniți: întotdeauna
mediu inconjurator:
MYSQL_DATABASE: exampledb
MYSQL_USER: exemplu de utilizator
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: „1”
volume:
- /srv/wordpress/db:/var/lib/mysql
Acest container Docker se expune la portul intern 8087 la care apoi îl fac proxy mysubdomain.mydomain.com
. Acesta este fișierul de configurare Nginx:
Server {
root /var/www/mysubdomain.mydomain.com;
index index.html index.htm index.nginx-debian.html;
nume_server mysubdomain.mydomain.com;
client_max_body_size 1000M;
Locație / {
# try_files $uri $uri/ =404;
proxy_pass http://localhost:8087;
}
asculta 443 ssl; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.com-0003/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0003/privkey.pem; # gestionat de Certbot
includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
}
Server {
dacă ($gazdă = subdomeniul meu.domeniul meu.com) {
returnează 301 https://$host$request_uri;
} # gestionat de Certbot
asculta 80;
nume_server mysubdomain.mydomain.com;
întoarce 404; # gestionat de Certbot
}
Problema este că pagina (în acest caz Wordpress) încă mai folosește localhost:8087
pentru fiecare link. Acest lucru distruge orice posibilitate de a face clic pe ceva și, de asemenea, distruge încărcările bibliotecii CSS și JavaScript.
EDITARE 1:
Am adăugat următoarele două rânduri la wp-config.php
:
define('WP_HOME','https://mysubdomain.mydomain.com');
define('WP_SITEURL','https://mysubdomain.mydomain.com');
Încarcă corect pagina de configurare și adaptează și numele domeniului. Pot configura WordPress cu succes, dar de îndată ce salvez configurația (nume de utilizator, parolă, e-mail), browserul încarcă apoi o pagină goală. Apel curl -X GET https://mysubdomain.mydomain.com
returnează un răspuns gol.