pmz
1
Bonjour,
J’accède enfin depuis le monde à mon app de test sur dodock. Tout fonctionne: login, list, create, logout.
Mais j’ai remarqué que si je refresh la page, il rajoute :8080
Ă la fin du domaine, et donc https:site.example.org:8080/mapage
plante.
Est-ce un setting via le dashboard?
Ou un paramètre dans docker compose ?
Ou ailleurs ?
Je précise : j’ai ce problème qu’avec cette stack, les autres docker stacks (pas frappe) qui font tourner d’autres services n’ont pas ce souci quand je refresh.
Bonjour @pmz,
Je n’arrive pas à reproduire le problème, quel est le reverse proxy que tu utilises pour tes services ? Avec les étapes suivantes, je fais tourner sans problème le fichier compose standard sans modification et avec HTTPS :
docker compose -f dodock.yaml up
# /etc/nginx/conf.d/test-docker.conf
server {
server_name test.local;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8080;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name test.local;
ssl_certificate /home/corentin/tls/fullchain.pem;
ssl_certificate_key /home/corentin/tls/privkey.pem;
ssl_trusted_certificate /home/corentin/tls/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8080;
}
}
pmz
3
Je pense que c’est parce que j’utilise le fichier nginx par défaut de la stack dodock :
upstream backend-server {
server backend:8000 fail_timeout=0;
}
upstream socketio-server {
server websocket:9000 fail_timeout=0;
}
server {
listen 8080;
server_name frontend;
root /home/frappe/frappe-bench/sites;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
add_header X-Frame-Options "SAMEORIGIN";
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "same-origin, strict-origin-when-cross-origin";
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive off;
location /assets {
try_files $uri =404;
}
location ~ ^/protected/(.*) {
internal;
try_files /frontend/$1 =404;
}
location /socket.io {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Frappe-Site-Name frontend;
proxy_set_header Origin $scheme://frontend;
proxy_set_header Host $host;
proxy_pass http://socketio-server;
}
location / {
rewrite ^(.+)/$ $1 permanent;
rewrite ^(.+)/index\.html$ $1 permanent;
rewrite ^(.+)\.html$ $1 permanent;
location ~ ^/files/.*.(htm|html|svg|xml) {
add_header Content-disposition "attachment";
try_files /frontend/public/$uri @webserver;
}
try_files /frontend/public/$uri @webserver;
}
location @webserver {
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frappe-Site-Name frontend;
proxy_set_header Host $host;
proxy_set_header X-Use-X-Accel-Redirect True;
proxy_read_timeout 120;
proxy_redirect off;
proxy_pass http://backend-server;
}
# optimizations
sendfile on;
keepalive_timeout 15;
client_max_body_size 50m;
client_body_buffer_size 16K;
client_header_buffer_size 1k;
# enable gzip compression
# based on https://mattstauffer.co/blog/enabling-gzip-on-nginx-servers-including-laravel-forge
gzip on;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
application/atom+xml
application/javascript
application/json
application/rss+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/font-woff
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/svg+xml
image/x-icon
text/css
text/plain
text/x-component;
# text/html is always compressed by HttpGzipModule
}
Pardon si je ne suis pas très clair : il ne faut pas généralement pas modifier la configuration Nginx à l’intérieur du conteneur.
Il faut un second Nginx sur la machine hôte qui fait office de reverse proxy depuis un nom de domaine vers le conteneur qui tourne sur le port 8080 (ou autre si nécessaire). Éventuellement on peut utiliser Traefik pour gérer le reverse proxying à l’intérieur du compose si c’est plus simple.
pmz
5
Ah, ok, merci mais mon reverse proxy fonctionne avec les autres containers.
Si c’était lui, j’aurais le problème ailleurs aussi, il me semble que le problème est sur dodock.
Peut-être j’ai coupé le coin ? Je teste avec frontend, pas un site custom site.example.org
.
Hmm, apparemment ce n’est pas ça, car quand je refresh la racine https://site.example.org
sans la page, il ne rajoute pas le 8080. Il affiche la page #login
ou « My account » quand je suis loggé en tant que customer.
Hmm j’avoue que c’est curieux : ça vaut le coup de configurer la clé host_name
du fichier site_config.json
du site pour voir si ça règle le problème :
bench --site frontend set-config host_name "https://site.example.org"
pmz
7
Bonne idée !
Alors j’ai repris ton idée de mini reverse proxy en local, et il y a le même problème avec l’app, je pense que c’est le routage.
EDIT:
C’est mon routage, c’était pas bien codé, je me suis mis une tape sur la main, et je rebuild tout ça vite vite avant le weekend !
Bon weekend
@corentin, toute l’équipe Dokos, et les collaborateurs.
2 Likes