ubuntuusers.de

Für diese Funktion musst du eingeloggt sein.

Reverse Proxy für Zammad

Status: Ungelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

maxkr

Anmeldungsdatum:
4. Mai 2011

Beiträge: 34

Wohnort: bei München

Ich möchte von einen Server mit dem Namen srvproxy per https weitere Webserver erreichen. Vor langer Zeit habe ich einmal eine Reverse Proxy hierfür eingerichtet, der mir die VDR-Live Webseiten (siehe: http://www.vdr-wiki.de/wiki/index.php/Live-plugin) von einem Port (auf dem selben Rechner) über Unterverzeichnis live ermöglicht. Das sah dann so aus (apache2) und funktioniert problemlos, Anfragen werden von https://srvproxy/live and den http://localhost:9090 weitergeleitet:

1
2
3
4
5
6

RewriteEngine On
RewriteRule ^/live$ /live/ [R]

ProxyPass /live http://localhost:9090
ProxyPassReverse /live http://localhost:9090

Beim Zammad-Server habe ich das auch versucht, und bekomme mittlerweile die Ladeseite angezeigt. Allerdings scheinen noch zusätzliche Einstellungen für den Websocket erforderlich zu sein und hier komme ich nicht weiter.

Zammad läuft auf einem LXC mit Ubuntu 20.04 LTS unter nginx und ist wie folgt konfiguriert und ist unter dem Port (den ich auf 8080 geändert habe) über den Hostnamen srvzammad erreichbar:

upstream zammad-railsserver {
    server 127.0.0.1:3000;
}

upstream zammad-websocket {
    server 127.0.0.1:6042;
}

server {
    listen 8080;

    # replace 'localhost' with your fqdn if you want to use zammad from remote
    server_name srvzammad;

    # security - prevent information disclosure about server version
    server_tokens off;

    root /opt/zammad/public;

    access_log /var/log/nginx/zammad.access.log;
    error_log  /var/log/nginx/zammad.error.log;

    client_max_body_size 50M;

    location ~ ^/(assets/|robots.txt|humans.txt|favicon.ico) {
        expires max;
    }

    location /ws {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header CLIENT_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
        proxy_pass http://zammad-websocket;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header CLIENT_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 300;
        proxy_pass http://zammad-railsserver;

        gzip on;
        gzip_types text/plain text/xml text/css image/svg+xml application/javascript application/x-javascript application/json application/xml;
        gzip_proxied any;
    }
}

Der Zugriff via http://srvzammad:8080 funktioniert wie gewünscht. Als nächstes möchte ich über den SrvProxy über das Unterverzeichnis /zammad auf Zammad zugreifen, später auch per https, also: http(s)://srvproxy/zammad

In der /etc/apache2/site-enabled/ssl.conf vom srvproxy, habe ich deshalb folgendes eingetragen:

1
2
3
4
5
6
RewriteCond %{HTTP:Connection} Upgrade [NC,OR]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://srvzammad:8080/$1  [P,QSA,L]

ProxyPass /zammad http://srvzammad:8080 retry=1
ProxyPassReverse /zammad http://srvzammad:8080

Angezeigt wird mir aber nur das Zammad-Logo und der "Loading.."-Hinweis. Was fehlt mir hier noch?

Wenn ihr alternativ ein Beispiel für nginx habt, wäre das auch Klasse. Da habe ich folgendes probiert, aber leider auch ohne Erfolg:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {

server_name srvproxy;

location /zammad/ws {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header CLIENT_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
        proxy_pass http://srvzammad:8080;
    }

    location /zammad {
        proxy_set_header Host $http_host;
        proxy_set_header CLIENT_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 300;
        proxy_pass http://srvzammad:8080;

        gzip on;
        gzip_types text/plain text/xml text/css image/svg+xml application/javascript application/x-javascript application/json application/xml;
        gzip_proxied any;
    }
}

Viele Grüße Max

Tamagotschi

Anmeldungsdatum:
28. Oktober 2021

Beiträge: 1

Hallo Max!

Ich stand gestern vor dem selben Problem!

Meine Lösung war, dass ich auf dem Zammad Server zuerst einmal die BIND Adresse von 127.0.0.1 auf die lokale IP geändert habe. Anleitungen dazu findet man im Internet.

Danach liefen die Zammad Dienste auf der IP Adresse 192.168.1.20:3000 und 192.168.1.20:6042

Auf dem Proxy-Server habe ich dann unter Nginx einfach die upstream Einträge entsprechend eingetragen.

1
2
3
4
5
6
7
upstream zammad-railsserver {
    server 192.168.1.20:3000;
}

upstream zammad-websocket {
    server 192.168.1.20:6042;
} 

Die weiteren Einstellungen aus dem lokalen Nginx CONF File für Zammad benutzen.

Wichtig sind die Einträge:

   location /ws {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header CLIENT_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 50M;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Frame-Options SAMEORIGIN;
        proxy_buffers 256 16k;
        proxy_buffer_size 16k;
        client_body_timeout 60;
        send_timeout 300;
        lingering_timeout 5;
        proxy_connect_timeout 90;
        proxy_send_timeout 300;
        proxy_read_timeout 86400;
        proxy_pass http://zammad-websocket;
   }
   location / {
       client_max_body_size 50M;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_cache zammad_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_http_version 1.1;
       proxy_set_header Host $http_host;
       proxy_set_header CLIENT_IP $remote_addr;
       # Change this line in an SSO setup
       proxy_set_header X-Forwarded-User "";

       proxy_read_timeout 300;
       proxy_pass http://zammad-railsserver;

       gzip on;
       gzip_types text/plain text/xml text/css image/svg+xml application/javascript application/x-javascript application/json application/xml;
       gzip_proxied any;
   }

Soweit läuft alles bei mir z. Zt. rund. Ob wirklich alles ohne Probleme funktioniert kann ich aber noch nicht sagen.

Viele Grüße Christian

maxkr

(Themenstarter)

Anmeldungsdatum:
4. Mai 2011

Beiträge: 34

Wohnort: bei München

Vielen Dank Christian,

hätte nach der Zeit nicht mehr mit einer Antwort gerechnet, werde das aber hoffentlich in den nächsten Tagen ausprobieren können, da das Thema gerade wieder wichtig wird.

Viele Grüße Max

Antworten |