blob: f5e7e8a8a0f1e06ec15e5ed54acafffc4da85f29 [file] [log] [blame]
Zack Williamsb313bae2020-04-22 22:00:53 -07001# nginx templates/vhost.conf.j2 - {{ ansible_managed }}
2#
3# SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
4# SPDX-License-Identifier: Apache-2.0
5
6{% if item.aliases is defined %}
7# Redirection of aliases to canonical URL
8server {
9 server_name {{ item.aliases | join(" ") }};
10
11 listen {{ item.insecure_port | default("80") }};
12 listen [::]:{{ item.insecure_port | default("80") }};
13{% if item.tls is defined and item.tls %}
14 listen {{ item.secure_port | default("443") }} ssl http2;
15 listen [::]:{{ item.secure_port | default("443") }} ssl http2;
16
17 ssl_certificate {{ certificate_dir }}/{{ item.cert_name | default(item.name) }}/fullchain.pem;
18 ssl_certificate_key {{ certificate_dir }}/{{ item.cert_name | default(item.name) }}/privkey.pem;
19{% endif %}
20
21 # serve ACME Challenges
22 location /.well-known/acme-challenge {
23 root {{ acme_challenge_dir }};
24 }
25
26{% if item.strip_request_uri is defined and item.strip_request_uri %}
27{% set uri = "" %}
28{% else %}
29{% set uri = "$request_uri" %}
30{% endif %}
31 location / {
32 return 301 {{ item.redirect_url | default("https://" ~ item.name) }}{{ uri }};
33 }
34}
35
36{% endif %}
37{% if item.redirect_url is not defined %}
38{% if item.tls is defined and item.tls %}
39# HTTP -> HTTPS redirect
40server {
41 server_name {{ item.name }};
42
43 listen {{ item.insecure_port | default("80") }}{% if item.default_server is defined and item.default_server %} default_server{% endif %};
44 listen [::]:{{ item.insecure_port | default("80") }}{% if item.default_server is defined and item.default_server %} default_server{% endif %};
45
46 # serve ACME Challenges
47 location /.well-known/acme-challenge {
48 root {{ acme_challenge_dir }};
49 }
50
51 location / {
52 return 301 https://{{ item.name }}$request_uri;
53 }
54}
55
56{% endif %}
57# Server with content
58server {
59 server_name {{ item.name }};
60
61 # Listening ports
62{% if item.tls is defined and item.tls %}
63 listen {{ item.secure_port | default("443") }} ssl http2 {% if item.default_server is defined and item.default_server %} default_server{% endif %};
64 listen [::]:{{ item.secure_port | default("443") }} ssl http2 {% if item.default_server is defined and item.default_server %} default_server{% endif %};
65
66 ssl_certificate {{ certificate_dir }}/{{ item.cert_name | default(item.name) }}/fullchain.pem;
67 ssl_certificate_key {{ certificate_dir }}/{{ item.cert_name | default(item.name) }}/privkey.pem;
68{% else %}
69 listen {{ item.insecure_port | default("80") }}{% if item.default_server is defined and item.default_server %} default_server{% endif %};
70 listen [::]:{{ item.insecure_port | default("80") }}{% if item.default_server is defined and item.default_server %} default_server{% endif %};
71
72 # serve ACME Challenges
73 location /.well-known/acme-challenge {
74 root {{ acme_challenge_dir }};
75 }
76{% endif %}
77
78 # logfile locations
79 access_log {{ nginx_log_dir }}/{{ item.name }}_access.log;
80 error_log {{ nginx_log_dir }}/{{ item.name }}_error.log;
81
Zack Williamsed7880c2020-10-09 10:55:10 -070082 # user agent (webscraper) blocks
83 if ($http_user_agent ~* {{ blocked_user_agents }}) {
84 return 403;
85 }
86
Zack Williamsb313bae2020-04-22 22:00:53 -070087{% if item.extra_config is defined and item.extra_config %}
88 # extra config
89 {{ item.extra_config | indent(2) }}
90
91{% endif %}
Zack Williams59e13452020-10-14 00:24:21 -070092{% if item.proxy_pass is not defined or not item.proxy_pass %}
93{% if item.custom_root is defined and item.custom_root %}
94 root {{ item.custom_root }};
95{% else %}
96 root {{ nginx_static_dir }}/{{ item.name }};
97{% endif %}
98{% if item.php is defined and item.php %}
99 index index.php;
100{% endif %}
Zack Williamsb313bae2020-04-22 22:00:53 -0700101 location / {
102{% if item.auth_scope is defined and item.auth_scope %}
103 auth_basic "{{ item.auth_scope }}";
104 auth_basic_user_file "{{ nginx_auth_basic_dir }}/{{ item.auth_scope }}.htpasswd";
105{% endif %}
Zack Williams59e13452020-10-14 00:24:21 -0700106{% if item.php is defined and item.php %}
107 # PHP site configuration
108 try_files $uri $uri/ /index.php?$args;
Zack Williamsb313bae2020-04-22 22:00:53 -0700109{% else %}
Zack Williams59e13452020-10-14 00:24:21 -0700110 # Static site indexes
Zack Williamsb313bae2020-04-22 22:00:53 -0700111 index index.html index.htm;
Zack Williams59e13452020-10-14 00:24:21 -0700112{% endif %}
Zack Williamsb313bae2020-04-22 22:00:53 -0700113{% if item.autoindex is defined and item.autoindex %}
114 autoindex on;
115 autoindex_exact_size on;
116{% endif %}
Zack Williams59e13452020-10-14 00:24:21 -0700117{% if item.php is defined and item.php %}
118 }
119 # PHP configuration
120 location ~ [^/]\.php(/|$) {
121
122 fastcgi_split_path_info ^(.+?\.php)(/.*)$;
123 if (!-f $document_root$fastcgi_script_name) {
124 return 404;
125 }
126 fastcgi_param HTTP_PROXY "";
127 fastcgi_pass unix:/var/run/php/php-fpm.sock;
128 fastcgi_index index.php;
129
130 # include the fastcgi_param setting
131 include fastcgi_params;
132{% endif %}
Zack Williamsb313bae2020-04-22 22:00:53 -0700133{% else %}
Zack Williams59e13452020-10-14 00:24:21 -0700134 location / {
135{% if item.auth_scope is defined and item.auth_scope %}
136 auth_basic "{{ item.auth_scope }}";
137 auth_basic_user_file "{{ nginx_auth_basic_dir }}/{{ item.auth_scope }}.htpasswd";
138{% endif %}
Zack Williamsb313bae2020-04-22 22:00:53 -0700139 # Proxy configuration
140 proxy_pass {{ item.proxy_pass }};
141 proxy_buffering off;
142 proxy_http_version 1.1;
143 proxy_read_timeout 60;
144 proxy_connect_timeout 90;
Zack Williamsc8ea0a42021-02-03 10:51:59 -0700145 proxy_request_buffering off;
Zack Williamsb313bae2020-04-22 22:00:53 -0700146
147 proxy_set_header Host $host;
148 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
149 proxy_set_header X-Forwarded-Proto $scheme;
150 proxy_set_header X-Real-IP $remote_addr;
151 proxy_set_header Accept-Encoding "";
152{% endif %}
153 }
154}
155{% endif %}