mirror of
https://gitlab.archlinux.org/archlinux/infrastructure.git
synced 2026-09-10 20:20:37 +02:00
these are all the systems that the new redirect snippet can be cleanly applied to. there are a few others not included, that will need a more manual approach: - gitlab (multiple domains) - mta.sts(multiple domains) - archweb(mutltiple domains, snippets) - buildbtw(dynamic dev domains) - redirects(different structure) - public html(multiple domains) - archweb maintenence(different structure) - maintenence(different structure) some of these might be solvable by tweaking the snippet to accept multiple domains. I'll look into this Co-authored-by: Christian Heusel <christian@heusel.eu>
56 lines
2.5 KiB
Django/Jinja
56 lines
2.5 KiB
Django/Jinja
include snippets/redirect-80.conf;
|
|
|
|
server {
|
|
include snippets/listen-443.conf;
|
|
server_name {{ archive_domain }};
|
|
|
|
access_log /var/log/nginx/{{ archive_domain }}/access.log reduced;
|
|
access_log /var/log/nginx/{{ archive_domain }}/access.log.json json_reduced;
|
|
error_log /var/log/nginx/{{ archive_domain }}/error.log;
|
|
|
|
acme_certificate letsencrypt;
|
|
ssl_certificate $acme_certificate;
|
|
ssl_certificate_key $acme_certificate_key;
|
|
|
|
root {{ archive_dir }};
|
|
|
|
location /.all/ {
|
|
# XXX: This regex is reused for /repos/ below! Change both if you change this!
|
|
location ~ ^/.all/(?<filename>(?<pkgname>(?<pkgname_first_char>[^/])[^/]*)-(?<pkgver>[^-/]+)-(?<pkgrel>[0-9.]+)-(?<arch>[^-/]+)\.pkg\.tar(|\.(gz|bz2|xz|zst|lrz|lzo|Z|lz4|lz))(?<sig>\.sig)?)$ {
|
|
# https://stackoverflow.com/questions/22512112/nginx-rewrite-proxy-if-file-not-exists
|
|
try_files $uri @archive1;
|
|
}
|
|
}
|
|
|
|
# XXX: This regex is the same as for .all above. Change both if you change this!
|
|
location ~ ^/(?:repos/\d+/.*|packages/.*)/(?<filename>(?<pkgname>(?<pkgname_first_char>[^/])[^/]*)-(?<pkgver>[^-/]+)-(?<pkgrel>[0-9.]+)-(?<arch>[^-/]+)\.pkg\.tar(|\.(gz|bz2|xz|zst|lrz|lzo|Z|lz4|lz))(?<sig>\.sig)?)$ {
|
|
# https://stackoverflow.com/questions/22512112/nginx-rewrite-proxy-if-file-not-exists
|
|
try_files $uri @archive2;
|
|
}
|
|
# archive.org download URLs look like:
|
|
# https://archive.org/download/archlinux_pkg_lucene__/lucene++-1.4.2-3-i686.pkg.tar.xz
|
|
# We need to remove @.+ in the identifier (archlinux_pkg_*) but keep it in the filename at the end.
|
|
location /archive.org/ {
|
|
# Rewrite @, + and . into _
|
|
# This is recursive so it will work even for multiple replacement,
|
|
# with up to 10 replacements for each character (nginx recursion limit).
|
|
# Idea from https://stackoverflow.com/a/15934256
|
|
rewrite ^/archive\.org/([^@]*)@(.*)/(.*)$ /archive.org/$1_$2/$3;
|
|
rewrite ^/archive\.org/([^\.]*)\.(.*)/(.*)$ /archive.org/$1_$2/$3;
|
|
rewrite ^/archive\.org/([^\+]*)\+(.*)/(.*)$ /archive.org/$1_$2/$3;
|
|
# Once there are no more @.+ in the identifier part, redirect to archive.org
|
|
rewrite ^/archive\.org/([^@\+\.]*/.*)$ https://archive.org/download/$1 redirect;
|
|
}
|
|
|
|
location @archive1 {
|
|
rewrite ^ /packages/$pkgname_first_char/$pkgname/$filename;
|
|
}
|
|
|
|
location @archive2 {
|
|
rewrite ^ /archive.org/archlinux_pkg_$pkgname/$filename last;
|
|
}
|
|
|
|
autoindex on;
|
|
autoindex_exact_size off;
|
|
}
|