mirror of
https://gitlab.archlinux.org/archlinux/infrastructure.git
synced 2025-01-18 08:06:16 +01:00
We want to roll out HTTP/3 slowly, so this adds the necessary plumbing and makes it possible to enable it per host. Instead of adding the conditional logic to each nginx template, the 443 listen config is moved out into a snippet which is managed by the nginx role. HTTP/3 uses QUIC which is built on UDP. UDP is connectionless and therefore reuseport[1][2] must be used to ensure that UDP packets for the same QUIC connection is directed to the same worker. reuseport can only be enabled once, so a default_server is added to the "inventory_hostname vhost" for SSL/QUIC (reuseport is only enabled for the latter). ssl_reject_handshake[3] is enabled as that allows enabling SSL/QUIC without specifying a certificate. [1] https://nginx.org/en/docs/http/ngx_http_core_module.html#listen [2] https://lwn.net/Articles/542629/ [3] http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake Ref #606
200 lines
5.9 KiB
Django/Jinja
200 lines
5.9 KiB
Django/Jinja
upstream archweb {
|
|
server unix:///run/uwsgi/archweb.sock;
|
|
}
|
|
|
|
{% for domain in service_alternate_domains | default([]) %}
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name {{ domain }};
|
|
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log reduced;
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log.json json_reduced;
|
|
error_log {{ maintenance_logs_dir }}/{{ service_domain }}-error.log;
|
|
|
|
include snippets/letsencrypt.conf;
|
|
|
|
location / {
|
|
access_log off;
|
|
return 302 https://$server_name$request_uri;
|
|
}
|
|
}
|
|
|
|
server {
|
|
include snippets/listen-443.conf;
|
|
server_name {{ domain }};
|
|
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log reduced;
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log.json json_reduced;
|
|
error_log {{ maintenance_logs_dir }}/{{ service_domain }}-error.log;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/{{ service_domain }}/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/{{ service_domain }}/privkey.pem;
|
|
ssl_trusted_certificate /etc/letsencrypt/live/{{ service_domain }}/chain.pem;
|
|
|
|
location / {
|
|
access_log off;
|
|
return 302 https://{{ service_domain }};
|
|
}
|
|
}
|
|
|
|
{% endfor %}
|
|
{% for domain in service_legacy_domains | default([]) %}
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name {{ domain }};
|
|
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log reduced;
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log.json json_reduced;
|
|
error_log {{ maintenance_logs_dir }}/{{ service_domain }}-error.log;
|
|
|
|
include snippets/letsencrypt.conf;
|
|
|
|
location / {
|
|
access_log off;
|
|
return 302 https://$server_name$request_uri;
|
|
}
|
|
}
|
|
|
|
server {
|
|
include snippets/listen-443.conf;
|
|
server_name {{ domain }};
|
|
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log reduced;
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log.json json_reduced;
|
|
error_log {{ maintenance_logs_dir }}/{{ service_domain }}-error.log;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/{{ service_domain }}_legacy/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/{{ service_domain }}_legacy/privkey.pem;
|
|
ssl_trusted_certificate /etc/letsencrypt/live/{{ service_domain }}_legacy/chain.pem;
|
|
|
|
location / {
|
|
access_log off;
|
|
return 302 https://{{ service_domain }};
|
|
}
|
|
}
|
|
|
|
{% endfor %}
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name {{ service_domain }};
|
|
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log reduced;
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log.json json_reduced;
|
|
error_log {{ maintenance_logs_dir }}/{{ service_domain }}-error.log;
|
|
|
|
include snippets/letsencrypt.conf;
|
|
|
|
location / {
|
|
access_log off;
|
|
return 302 https://$server_name$request_uri;
|
|
}
|
|
}
|
|
|
|
server {
|
|
include snippets/listen-443.conf;
|
|
server_name {{ service_domain }};
|
|
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log reduced;
|
|
access_log {{ maintenance_logs_dir }}/{{ service_domain }}-access.log.json json_reduced;
|
|
error_log {{ maintenance_logs_dir }}/{{ service_domain }}-error.log;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/{{ service_domain }}/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/{{ service_domain }}/privkey.pem;
|
|
ssl_trusted_certificate /etc/letsencrypt/live/{{ service_domain }}/chain.pem;
|
|
|
|
error_page 503 /503.html;
|
|
|
|
location = /.well-known/matrix/server {
|
|
default_type application/json;
|
|
return 200 '{"m.server": "{{ matrix_domain }}:443"}';
|
|
}
|
|
|
|
location = /.well-known/matrix/client {
|
|
default_type application/json;
|
|
include snippets/headers.conf;
|
|
add_header Access-Control-Allow-Origin *;
|
|
return 200 '{"m.homeserver": {"base_url": "https://{{ matrix_domain }}"}, "m.identity_server": {"base_url": "https://matrix.org"} }';
|
|
}
|
|
|
|
location = /robots.txt {
|
|
alias {{ archweb_dir }}/archlinux.org/robots.txt;
|
|
}
|
|
|
|
location = /humans.txt {
|
|
alias {{ archweb_dir }}/archlinux.org/humans.txt;
|
|
}
|
|
|
|
location = /google7827eadf026b4a87.html {
|
|
alias {{ archweb_dir }}/archlinux.org/google7827eadf026b4a87.html;
|
|
}
|
|
|
|
location = /BingSiteAuth.xml {
|
|
alias {{ archweb_dir }}/archlinux.org/BingSiteAuth.xml;
|
|
}
|
|
|
|
location = /favicon.ico {
|
|
alias {{ archweb_dir }}/collected_static/favicon.ico;
|
|
}
|
|
|
|
location /pacman/ {
|
|
alias {{ archweb_dir }}/archlinux.org/pacman/;
|
|
}
|
|
|
|
location /netcfg/ {
|
|
alias {{ archweb_dir }}/archlinux.org/netcfg/;
|
|
}
|
|
|
|
location /logos/ {
|
|
alias {{ archweb_dir }}/archlinux.org/logos/;
|
|
}
|
|
|
|
location ~ ^/iso/(.*\.(iso|img|tar\.gz|sfs)$) {
|
|
deny all;
|
|
}
|
|
|
|
location /iso/ {
|
|
alias {{ archweb_rsync_iso_dir }};
|
|
}
|
|
|
|
# Cache django's css, js and png files.
|
|
location /static/ {
|
|
expires 30d;
|
|
include snippets/headers.conf;
|
|
add_header Pragma public;
|
|
add_header Cache-Control "public";
|
|
alias {{ archweb_dir }}/collected_static/;
|
|
}
|
|
|
|
location /img/ {
|
|
alias {{ archweb_dir }}/media/img/;
|
|
}
|
|
|
|
location /retro/ {
|
|
alias {{ archweb_retro_dir }};
|
|
}
|
|
|
|
if ($remote_addr = {{ maintenance_remote_machine }}) {
|
|
set $maintenance_remote_machine true;
|
|
}
|
|
|
|
location / {
|
|
include uwsgi_params;
|
|
|
|
if ($maintenance_remote_machine = true) {
|
|
access_log /var/log/nginx/{{ archweb_domain }}/access.log main;
|
|
access_log /var/log/nginx/{{ archweb_domain }}/access.log.json json_main;
|
|
uwsgi_pass archweb;
|
|
break;
|
|
}
|
|
|
|
return 503;
|
|
}
|
|
|
|
location = /503.html {
|
|
root {{ maintenance_http_dir }}/{{ service_domain }};
|
|
}
|
|
}
|