Mirroring at Savannah

ftpmirror.gnu.org - redirects to world-wide mirrors of ftp.gnu.org.
These mirrors carry official releases of GNU pacakges.
ftpmirror.gnu.org and gnu mirror are used interchangeably in this
page.

download.savannah.{nongnu,gnu}.org - redirects to world-wide mirrors of
savannah's DownloadArea. Typically used for non-gnu software,
but gnu packages can store files there as well.
download and nongnu mirror are used interchangeably in this page.

Client-side overview

A user requesting a download from ftpmirror.gnu.org will receive
an HTTP/302 response redirecting to a mirror closest to the user's
originating IP:

The technical reason for this extra redirection is that
download.savannah.gnu.org serves directory listing directly, and
only redirects actual files. See nginx details below.

Server-side redirection overview

Redirection is implemented using a perl cgi script,
called from nginx/fcgiwrap running on download0.sv.gnu.org.

Both gnu and nongnu redirections are served from
download0.savannah.gnu.org VM. ftpmirror.gnu.org is
CNAME'd to ftpmirror.sv.gnu.org, which points
to the same IP as download0 (remember savannah admin's
only control *.sv.gnu.org DNS entries).

The nginx configuration files are:
download0:/etc/nginx/sites-available/ftpmirror,
download0:/etc/nginx/sites-available/ftpmirror-common.inc,
download0:/etc/nginx/sites-available/ftpmirror-common-https.inc,
download0:/etc/nginx/sites-available/download,
download0:/etc/nginx/sites-available/download-common.inc,
download0:/etc/nginx/sites-available/download-common-https.inc.
The *-common*.inc files contain the cgi configurations.
The other files include them twice (once for http, once for https).

The script /opt/savannah/mirrors/scripts/get-gnu-mirror-list.pl
fetches the gnu/ftpmirror list and saves it locally in the two versions
(gnu and allgnu). The nongnu list is symlinked to the manually-managed
file.

Two auxiliary scripts
/opt/savannah/mirrors/scripts/update-active-mirrors-{gnu,nongnu}.sh
read the gnu/nongnu state files, and generate a simple text files
containing only the active and up-to-date mirrors: