aboutsummaryrefslogtreecommitdiffstats
path: root/roles
diff options
context:
space:
mode:
authorJoshua Hull <josh@fireflop.com>2023-01-15 10:49:21 +0100
committerEmil Renner Berthing <esmil@labitat.dk>2023-01-27 00:32:09 +0100
commit6bbdee9dc9333e94d13e8653ee3bb5626aa754b5 (patch)
treeafd3e802bbe3968ef6c526416c8cb27d63231ad4 /roles
parent09df394737c4a91a5a44909e29abeff8e1927ecc (diff)
downloadlabitat-ansible-6bbdee9dc9333e94d13e8653ee3bb5626aa754b5.tar.gz
labitat-ansible-6bbdee9dc9333e94d13e8653ee3bb5626aa754b5.tar.xz
labitat-ansible-6bbdee9dc9333e94d13e8653ee3bb5626aa754b5.zip
nginx: add common role for nginx
esmil: - disable access log and log errors to syslog (journal really) use journalctl -u nginx to see the errors - hoist some configuration values into ansible variables - add tags and use a handler to reload nginx on configuration changes - make nginx do its DNS queries against our local resolved this enables nginx to use DNSSEC and DoT - don't start nginx before the network is up. if it can't do dns lookups ssl_stapling will be ignored
Diffstat (limited to 'roles')
-rw-r--r--roles/nginx/defaults/main.yml7
-rw-r--r--roles/nginx/handlers/main.yml7
-rw-r--r--roles/nginx/tasks/main.yml64
-rw-r--r--roles/nginx/templates/nginx.conf.j273
-rw-r--r--roles/sky/files/wait-online.conf3
5 files changed, 154 insertions, 0 deletions
diff --git a/roles/nginx/defaults/main.yml b/roles/nginx/defaults/main.yml
new file mode 100644
index 0000000..914dde8
--- /dev/null
+++ b/roles/nginx/defaults/main.yml
@@ -0,0 +1,7 @@
+---
+nginx_worker_connections: 768
+
+nginx_ssl_protocols: 'TLSv1.2 TLSv1.3'
+nginx_ssl_ciphers: 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'
+
+# vim: set ts=2 sw=2 et:
diff --git a/roles/nginx/handlers/main.yml b/roles/nginx/handlers/main.yml
new file mode 100644
index 0000000..f335839
--- /dev/null
+++ b/roles/nginx/handlers/main.yml
@@ -0,0 +1,7 @@
+---
+- name: reload nginx
+ systemd:
+ name: nginx.service
+ state: reloaded
+
+# vim: set ts=2 sw=2 et:
diff --git a/roles/nginx/tasks/main.yml b/roles/nginx/tasks/main.yml
new file mode 100644
index 0000000..f73e5e1
--- /dev/null
+++ b/roles/nginx/tasks/main.yml
@@ -0,0 +1,64 @@
+---
+- name: Configure /etc/nginx/nginx.conf
+ template:
+ dest: '/etc/nginx/nginx.conf'
+ src: nginx.conf.j2
+ owner: root
+ group: root
+ mode: 0644
+ notify:
+ - reload nginx
+ tags:
+ - nginx
+
+- name: Disable default site
+ file:
+ path: '/etc/nginx/sites-enabled/default'
+ state: absent
+ notify:
+ - reload nginx
+ tags:
+ - nginx
+
+- name: Download dhparam
+ get_url:
+ dest: '/etc/nginx/dhparam'
+ url: 'https://ssl-config.mozilla.org/ffdhe2048.txt'
+ owner: root
+ group: root
+ mode: 0440
+ notify:
+ - reload nginx
+ tags:
+ - nginx
+
+- name: Create service drop-in directory
+ file:
+ dest: '/etc/systemd/system/nginx.service.d'
+ state: directory
+ owner: root
+ group: root
+ mode: 0755
+ tags:
+ - nginx
+
+- name: Start nginx after networks are configured
+ copy:
+ dest: '/etc/systemd/system/nginx.service.d/wait-online.conf'
+ src: wait-online.conf
+ owner: root
+ group: root
+ mode: 0644
+ tags:
+ - nginx
+
+- name: Enable nginx service
+ systemd:
+ name: nginx.service
+ enabled: yes
+ masked: no
+ state: started
+ tags:
+ - nginx
+
+# vim: set ts=2 sw=2 et:
diff --git a/roles/nginx/templates/nginx.conf.j2 b/roles/nginx/templates/nginx.conf.j2
new file mode 100644
index 0000000..1188e53
--- /dev/null
+++ b/roles/nginx/templates/nginx.conf.j2
@@ -0,0 +1,73 @@
+user www-data;
+worker_processes auto;
+{% if nginx_worker_rlimit_nofile is defined %}
+worker_rlimit_nofile {{ nginx_worker_rlimit_nofile }};
+{% endif %}
+pid /run/nginx.pid;
+error_log /dev/null debug;
+error_log syslog:server=unix:/dev/log,facility=daemon,tag=nginx notice;
+
+include /etc/nginx/modules-enabled/*.conf;
+
+events {
+ worker_connections {{ nginx_worker_connections }};
+ # multi_accept on;
+}
+
+http {
+ ##
+ # Basic Settings
+ ##
+
+ sendfile on;
+ tcp_nopush on;
+ types_hash_max_size 2048;
+ # server_tokens off;
+
+ # server_names_hash_bucket_size 64;
+ # server_name_in_redirect off;
+
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+
+ ##
+ # Resolver
+ ##
+
+ resolver 127.0.0.53 valid=30s; # systemd-resolved listens here
+
+ ##
+ # SSL Settings
+ ##
+
+ ssl_protocols {{ nginx_ssl_protocols }};
+ ssl_ciphers {{ nginx_ssl_ciphers }};
+ ssl_prefer_server_ciphers off;
+ ssl_dhparam /etc/nginx/dhparam;
+
+ ##
+ # Logging Settings
+ ##
+
+ access_log off;
+
+ ##
+ # Gzip Settings
+ ##
+
+ gzip on;
+
+ # gzip_vary on;
+ # gzip_proxied any;
+ # gzip_comp_level 6;
+ # gzip_buffers 16 8k;
+ # gzip_http_version 1.1;
+ # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
+
+ ##
+ # Virtual Host Configs
+ ##
+
+ include /etc/nginx/conf.d/*.conf;
+ include /etc/nginx/sites-enabled/*;
+}
diff --git a/roles/sky/files/wait-online.conf b/roles/sky/files/wait-online.conf
new file mode 100644
index 0000000..0a38143
--- /dev/null
+++ b/roles/sky/files/wait-online.conf
@@ -0,0 +1,3 @@
+[Unit]
+Wants=network-online.target
+After=network-online.target