Reverse Proxy (Apache, Nginx) – iceScrum

Documentation Cette documentation ne s'applique qu'à iceScrum v7.
Pour un vieux serveur iceScrum R6, lisez la documentation correspondante ou migrez.

Reverse proxy

Il est commun d’utiliser un reverse proxy devant un server d’application Java, mais c’est optionnel : iceScrum fonctionne très bien sans reverse proxy !

Si vous voulez juste un nom de domaine ou un port personnalisé (par exemple http://icescrum.mydomain.com) alors il n’est pas nécessaire d’utiliser un reverse proxy, vous pouvez définir cela directement au niveau de Tomcat et icescrum.war, icescrum.jar ou docker.

L’utilisation d’un reverse proxy n’est pas triviale car iceScrum utilise la technologie des websocket qui requiert une configuration dédiée. De plus, il est nécessaire d’informer iceScrum de son URL externe (port, protocole) afin que l’application fonctionne correctement. Cette documentation explique comment faire cela.

Contexte

Par défaut, l’URL d’iceScrum est http://yourhost:8080/icescrum. Dans ce cas, le contexte, qui est la partie de l’URL après le nom de domaine et le port, est icescrum.

Le contexte peut être modifié ou supprimé, mais il doit être le même pour l’URL externe d’iceScrum et son URL interne (derrière le proxy).

Ainsi, si vous désirez un contexte vide sur l’URL externe, par exemple www.icescrum.mydomain.com, alors vous devez définir le contexte vide sur l’URL interne également, par exemple http://127.0.0.1:8080. Lisez la documentation d’installation correspondante pour savoir comment faire cela.

Les exemples suivants prenne pour base une URL qui a un contexte vide : http://127.0.0.1:8080. Si pour vous iceScrum est disponible sur http://127.0.0.1:8080/icescrum ou un autre port, remplacez l’URL dans la configuration en conséquence.

Nginx

Voici un exemple qui associe le port externe 80 à une installation iceScrum interne http://127.0.0.1:8080:

http {
    # Requis pour les websockets
    map $http_upgrade $connection_upgrade {
            default Upgrade;
            ''      close;
    }
    server {
        listen 80 default_server;
        charset utf-8;
        location /stream {
            proxy_pass         http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection $connection_upgrade;
            proxy_buffering    off;
        }
        location / {
            proxy_pass           http://127.0.0.1:8080;
            proxy_set_header     Host $http_host;
            proxy_set_header     X-Real-IP $remote_addr;
            proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
            # Requis pour indiquer à iceScrum son port externe
            proxy_set_header     X-Forwarded-Port 80;
            # Pour de gros exports de projets, augmentez ce timeout
            proxy_read_timeout   600s;       
            # Limite pour les fichiers attachés   
            client_max_body_size 100m;                
        }
    }
}

Apache

Les mods Apache suivants sont requis:

  • mod_proxy_http
  • mod_proxy_wstunnel: nécessite au moins Apache 2.4.5
  • mod_headers
  • mod_rewrite

iceScrum n’est pas compatible avec mod_proxy_ajp.

Voici un exemple qui associe le port externe 80 à une installation iceScrum interne http://127.0.0.1:8080:

<VirtualHost *:80>
    ServerName myserver.com
    ProxyPreserveHost On
    # The order is important here
    ProxyPass         /stream/ ws://127.0.0.1:8080/stream/
    ProxyPassReverse  /stream/ ws://127.0.0.1:8080/stream/
    ProxyPass         /        http://127.0.0.1:8080/
    ProxyPassReverse  /        http://127.0.0.1:8080/
    # Required for websockets
    RewriteEngine on
    RewriteCond %{QUERY_STRING} ^((?!X-Atmosphere-Transport=websocket).)*$ [NC]
    RewriteRule ^/stream/app http://127.0.0.1:8080/stream/app$1 [P]
    # Required to tell iceScrum its external port
    RequestHeader set X-Forwarded-port "80" 
</VirtualHost>

HTTPS / SSL

D’abord, vous devez indiquer à iceScrum qu’il sera utilisé derrière un proxy https:

  • Tomcat + icescrum.war
    Ajoutez les attributs scheme et proxyPort à votre connector dans le fichier server.xml:

    scheme="https"
    proxyPort="443"
    
  • icescrum.jar
    Ajoutez l’option httpsProxy=true dans la commande de démarrage.
  • Docker
    Voir la documentation correspondante.

Pour la configuration SSL en elle-même, veuillez vous référer à la documentation de votre reverse proxy.

Enfin, définissez les headers appropriés :

  • Apache
        RequestHeader set X-Forwarded-Port "443"
        RequestHeader set X-Forwarded-Proto "https"
    
  • Nginx
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header X-Forwarded-Proto https;
    


Essayez gratuitement dès maintenant
Tout ce dont vous avez besoin pour gérer vos projets agiles