diff --git a/roles/mailman/files/migrated-lists.map b/roles/mailman/files/migrated-lists.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/roles/mailman/tasks/main.yml b/roles/mailman/tasks/main.yml
index 800a41a0461cf7d96b0c748cc40857524d583139..0b6497435bcda41c4ae18099471c587144bd736d 100644
--- a/roles/mailman/tasks/main.yml
+++ b/roles/mailman/tasks/main.yml
@@ -49,6 +49,10 @@
 - name: make nginx log dir
   file: path=/var/log/nginx/{{ lists_domain }} state=directory owner=root group=root mode=0755
 
+- name: install nginx mailman2->mailman3 redirect map
+  copy: src=migrated-lists.map dest=/etc/nginx/maps/ owner=root group=root mode=0644
+  notify: reload nginx
+
 - name: set up nginx
   template: src=nginx.d.conf.j2 dest="/etc/nginx/nginx.d/mailman.conf" owner=root group=root mode=644
   notify: reload nginx
diff --git a/roles/mailman/templates/nginx.d.conf.j2 b/roles/mailman/templates/nginx.d.conf.j2
index d292d493facabb6aac6abed9446292ae13275070..e8cd51c88cb1c4af848b0d7b776cf984521e2d62 100644
--- a/roles/mailman/templates/nginx.d.conf.j2
+++ b/roles/mailman/templates/nginx.d.conf.j2
@@ -15,6 +15,10 @@ server {
     }
 }
 
+map $uri $migrated_uri {
+    include maps/migrated-lists.map;
+}
+
 server {
     listen       443 ssl http2;
     listen       [::]:443 ssl http2;
@@ -28,6 +32,10 @@ server {
     ssl_certificate_key  /etc/letsencrypt/live/{{ lists_domain }}/privkey.pem;
     ssl_trusted_certificate /etc/letsencrypt/live/{{ lists_domain }}/chain.pem;
 
+    if ($migrated_uri) {
+        return 302 $migrated_uri;
+    }
+
     # redirect old urls
     location /mailman/ {
         rewrite ^/mailman/(.*) /$1 permanent;