Verwende LT mit docker-compose und apache2 Proxy - Chrome tut, Firefox nicht

Hallo,

ich habe languagetool.meineDomain.tld bei hetzner im DNS registriert und bei mir einen Apache Proxy, der TLS drumrumbaut und den Docker meyay/languagetool-Server per http aufruft.
Mit dem Chrome Plugin funktioniert es einwandfrei. Das Docker Image meyay wird auch mit allow-origin “*” aufgerufen.
Im Firefox-Plugin tut es leider weder in der Firma noch zu Hause.

Folgende Einstellungen im Apache2-Proxy:

ServerAdmin thomas@meinedomain.tld ServerName languagetool.meinedomain.tld
    ErrorLog ${APACHE_LOG_DIR}/error-languagetool.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access-languagetool.log combined

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    RewriteEngine on

    ProxyPass / http://192.168.1.10:8050/
    ProxyPassReverse / http://192.168.1.10:8050/
    ProxyPreserveHost On
    ProxyPassReverseCookieDomain 192.168.1.10 languagetool.meinedomain.tld

    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

    SSLCertificateFile /etc/letsencrypt/live/languagetool.meinedomain.tld/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/languagetool.meinedomain.tld/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

und die Konfiguration meines images:


services:
  languagetool:
    image: meyay/languagetool:latest
    container_name: languagetool
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CAP_SETUID
      - CAP_SETGID
      - CAP_CHOWN
    security_opt:
      - no-new-privileges
    ports:
      - 8050:8010
    environment:
      download_ngrams_for_langs: en,de
      langtool_languageModel: /ngrams
      langtool_fasttextModel: /fasttext/lid.176.bin
      # die nächsten 4 Einträge ändern leider nichts!
      DOMAIN: languagetool.mydomain.tld
      VIRTUAL_HOST: languagetool.mydomain.tld
      VIRTUAL_PORT: 8050
      LETSENCRYPT_HOST: languagetool.mydomain.tld
    volumes:
      - /mnt/docker/languagetool/ngrams:/ngrams
      - /mnt/docker/languagetool/fasttext:/fasttext
volumes:
  languagetool:
    external: true

Ich weiß im Moment nicht, an welcher Stelle ich es falsch mache. Wo muss ich anpassen?
Ach ja im Firefox plugin habe ich folgendes eingestellt:
https://languagetool.mydomain.tld/
bzw.
https://languagetool.mydomain.tld/v2/

Ich habe auch schon bei github nachgefragt, daher die DOMAIN_xxx und VIRTUAL_xxx Anpassungen.

Mit freundlichen Grüßen

Thomas Merkle

Das ist meist ein Hinweis darauf, dass der Access-Control-Allow-Origin-Header doch nicht richtig gesetzt ist, auch wenn es in der Apache-Konfiguration ja drinsteht. Läuft der LT-Prozess mit dem Parameter --allow-origin? Sollte zwar wegen dem Proxy nicht nötig sein, aber man kann es mal ausprobieren, das zu setzen.

Hallo Daniel,
danke für die schnelle Antwort. Im entrypoint.sh des Docker-Files unter docker-languagetool/entrypoint.sh at main · meyayl/docker-languagetool · GitHub steht:

# start languagetool
exec su-exec languagetool:languagetool \
  java "${FINAL_JAVA_OPTS[@]}" -Dlogback.configurationFile="${LOGBACK_CONFIG}" -cp languagetool-server.jar org.languagetool.server.HTTPServer \
    --port "${LISTEPORT:-8010}" \
    --public \
    --allow-origin "*" \
    --config config.properties

Ich wüsste jetzt aber nicht, wo und vor allem wie ich das hinzufügen sollte. Oder habe ich den Ansatz falsch verstanden?
Viele Grüße
Thomas Merkle

--allow-origin "*" steht schon drin, das sollte passen (falls es überhaupt nötig ist, genau so wie --public ist es eigentlich nur ohne Proxy davor nötig). Zum Test vielleicht mal alle Access-Control*-Werte so einstellen, dass alles erlaubt ist. Wobei wir in unserer Konfiguration mit nginx einfach nur proxy_pass http://127.0.0.1:8080/; nutzen, sonst mussten wir nichts einstellen.

Wenn es aber in Chrome geht und in Firefox nicht, ist das ein guter Hinweis darauf, dass es mit den Security-Einstellungen (CORS) zu tun hat, da Firefox die etwas anders handhabt.