🍽 Fork YunoHost — snapshot mangé par la machine à tsoins
Upstream: https://github.com/YunoHost/yunohost @ 3a5f8bac8301c450897b96cbd43a4c7d3ba750fb But (José) : transformer tout le code en bions + ploxions du xerboxion. La carte de digestion vit au labo : /yunohost-digest.json
This commit is contained in:
6
conf/nginx/acme-challenge.conf.inc
Normal file
6
conf/nginx/acme-challenge.conf.inc
Normal file
@@ -0,0 +1,6 @@
|
||||
location ^~ '/.well-known/acme-challenge/'
|
||||
{
|
||||
default_type "text/plain";
|
||||
alias /var/www/.well-known/acme-challenge-public/;
|
||||
gzip off;
|
||||
}
|
||||
19
conf/nginx/autoconfig.tpl.xml
Normal file
19
conf/nginx/autoconfig.tpl.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<clientConfig version="1.1">
|
||||
<emailProvider id="{{ domain }}">
|
||||
<domain>{{ domain }}</domain>
|
||||
<incomingServer type="imap">
|
||||
<hostname>{{ domain }}</hostname>
|
||||
<port>993</port>
|
||||
<socketType>SSL</socketType>
|
||||
<authentication>password-cleartext</authentication>
|
||||
<username>%EMAILLOCALPART%</username>
|
||||
</incomingServer>
|
||||
<outgoingServer type="smtp">
|
||||
<hostname>{{ domain }}</hostname>
|
||||
<port>587</port>
|
||||
<socketType>STARTTLS</socketType>
|
||||
<authentication>password-cleartext</authentication>
|
||||
<username>%EMAILLOCALPART%</username>
|
||||
</outgoingServer>
|
||||
</emailProvider>
|
||||
</clientConfig>
|
||||
53
conf/nginx/fastcgi_params_no_auth
Normal file
53
conf/nginx/fastcgi_params_no_auth
Normal file
@@ -0,0 +1,53 @@
|
||||
fastcgi_index index.php;
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
fastcgi_param SCRIPT_FILENAME $request_filename;
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
|
||||
fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
fastcgi_param REMOTE_PORT $remote_port;
|
||||
# (no REMOTE_USER compared to the version "with auth")
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect
|
||||
fastcgi_param REDIRECT_STATUS 200;
|
||||
|
||||
# Hotfix CVE-2026-42945
|
||||
# In such a case, passing "$http_host" upstream exposes the raw client-supplied
|
||||
# Host value ("malformedhost") to the backend application, even though it does
|
||||
# not match the effective request target. Applications often use HTTP_HOST for
|
||||
# redirects, absolute URL generation, virtual host routing, or security checks;
|
||||
# forwarding the raw Host header can therefore lead to incorrect or unsafe
|
||||
# behaviour.
|
||||
#
|
||||
# Newer nginx versions (since 1.30.0) introduce variables "$is_request_port" and
|
||||
# "$request_port", allowing HTTP_HOST to be constructed as:
|
||||
# $host$is_request_port$request_port
|
||||
#
|
||||
# In stable/oldstable packages we use "$host" as a security workaround.
|
||||
# It avoids forwarding an untrusted raw Host header to the backend.
|
||||
#
|
||||
# Note: this changes behaviour compared to previous versions, because "$host"
|
||||
# does not preserve the client-supplied port, while "$http_host" typically
|
||||
# does. Existing deployments that rely on "$http_host" containing a port number
|
||||
# may therefore break or behave differently after this change.
|
||||
|
||||
fastcgi_param HTTP_HOST $host;
|
||||
53
conf/nginx/fastcgi_params_with_auth
Normal file
53
conf/nginx/fastcgi_params_with_auth
Normal file
@@ -0,0 +1,53 @@
|
||||
fastcgi_index index.php;
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
fastcgi_param SCRIPT_FILENAME $request_filename;
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
|
||||
fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
fastcgi_param REMOTE_PORT $remote_port;
|
||||
fastcgi_param REMOTE_USER $http_ynh_user if_not_empty;
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect
|
||||
fastcgi_param REDIRECT_STATUS 200;
|
||||
|
||||
# Hotfix CVE-2026-42945
|
||||
# In such a case, passing "$http_host" upstream exposes the raw client-supplied
|
||||
# Host value ("malformedhost") to the backend application, even though it does
|
||||
# not match the effective request target. Applications often use HTTP_HOST for
|
||||
# redirects, absolute URL generation, virtual host routing, or security checks;
|
||||
# forwarding the raw Host header can therefore lead to incorrect or unsafe
|
||||
# behaviour.
|
||||
#
|
||||
# Newer nginx versions (since 1.30.0) introduce variables "$is_request_port" and
|
||||
# "$request_port", allowing HTTP_HOST to be constructed as:
|
||||
# $host$is_request_port$request_port
|
||||
#
|
||||
# In stable/oldstable packages we use "$host" as a security workaround.
|
||||
# It avoids forwarding an untrusted raw Host header to the backend.
|
||||
#
|
||||
# Note: this changes behaviour compared to previous versions, because "$host"
|
||||
# does not preserve the client-supplied port, while "$http_host" typically
|
||||
# does. Existing deployments that rely on "$http_host" containing a port number
|
||||
# may therefore break or behave differently after this change.
|
||||
|
||||
fastcgi_param HTTP_HOST $host;
|
||||
1
conf/nginx/global.conf
Normal file
1
conf/nginx/global.conf
Normal file
@@ -0,0 +1 @@
|
||||
server_tokens off;
|
||||
23
conf/nginx/proxy_params_no_auth
Normal file
23
conf/nginx/proxy_params_no_auth
Normal file
@@ -0,0 +1,23 @@
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Host $server_name;
|
||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Ssl $https;
|
||||
proxy_set_header X-Forwarded-Server $host;
|
||||
|
||||
# Mainly for websocket support but shouldn't hurt to set it globally
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
|
||||
# Clean auth headers to ensure that the client can't inject any header for authentication
|
||||
# The Authorization header cannot be force-cleared here, because some apps do have auth mechanism that depend on other things than the YunoHost SSO (cf other basic-auth based stuff like Webdav(?) or "Bearer"-type auth
|
||||
# proxy_set_header Authorization "";
|
||||
proxy_set_header Ynh-User "";
|
||||
proxy_set_header Ynh-User-Email "";
|
||||
proxy_set_header Ynh-User-Fullname "";
|
||||
proxy_set_header REMOTE_USER "";
|
||||
proxy_set_header X-Forwarded-User "";
|
||||
22
conf/nginx/proxy_params_with_auth
Normal file
22
conf/nginx/proxy_params_with_auth
Normal file
@@ -0,0 +1,22 @@
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Host $server_name;
|
||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Ssl $https;
|
||||
proxy_set_header X-Forwarded-Server $host;
|
||||
|
||||
# Mainly for websocket support but shouldn't hurt to set it globally
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
|
||||
# Set Authentication header, in addition to the header by ssowat. Note ssowat inject YNH_USER and here we inject Ynh-User which is different.
|
||||
proxy_set_header Authorization $http_authorization;
|
||||
proxy_set_header Ynh-User $http_ynh_user;
|
||||
proxy_set_header Ynh-User-Email $http_ynh_user_email;
|
||||
proxy_set_header Ynh-User-Fullname $http_ynh_user_fullname;
|
||||
proxy_set_header REMOTE_USER $http_ynh_user;
|
||||
proxy_set_header X-Forwarded-User $http_ynh_user;
|
||||
3
conf/nginx/redirect_to_admin.conf
Normal file
3
conf/nginx/redirect_to_admin.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
location / {
|
||||
return 302 https://$host/yunohost/admin;
|
||||
}
|
||||
51
conf/nginx/security.conf.inc
Normal file
51
conf/nginx/security.conf.inc
Normal file
@@ -0,0 +1,51 @@
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:SSL:50m; # about 200000 sessions
|
||||
ssl_session_tickets off;
|
||||
|
||||
{% if compatibility == "modern" %}
|
||||
# generated 2023-06-13, Mozilla Guideline v5.7, nginx 1.22.1, OpenSSL 3.0.9, modern configuration
|
||||
# https://ssl-config.mozilla.org/#server=nginx&version=1.22.1&config=modern&openssl=3.0.9&guideline=5.7
|
||||
ssl_protocols TLSv1.3;
|
||||
ssl_prefer_server_ciphers off;
|
||||
{% else %}
|
||||
# Ciphers with intermediate compatibility
|
||||
# generated 2023-06-13, Mozilla Guideline v5.7, nginx 1.22.1, OpenSSL 3.0.9, intermediate configuration
|
||||
# https://ssl-config.mozilla.org/#server=nginx&version=1.22.1&config=intermediate&openssl=3.0.9&guideline=5.7
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
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:DHE-RSA-CHACHA20-POLY1305;
|
||||
ssl_prefer_server_ciphers off;
|
||||
|
||||
# Pre-defined FFDHE group (RFC 7919)
|
||||
# From https://ssl-config.mozilla.org/ffdhe2048.txt
|
||||
# https://security.stackexchange.com/a/149818
|
||||
ssl_dhparam /usr/share/yunohost/ffdhe2048.pem;
|
||||
{% endif %}
|
||||
|
||||
|
||||
# Follows the Web Security Directives from the Mozilla Dev Lab and the Mozilla Obervatory + Partners
|
||||
# https://wiki.mozilla.org/Security/Guidelines/Web_Security
|
||||
# https://observatory.mozilla.org/
|
||||
{% if experimental == "True" %}
|
||||
more_set_headers "Content-Security-Policy : upgrade-insecure-requests; default-src https: data: blob: ; object-src https: data: 'unsafe-inline'; style-src https: data: 'unsafe-inline' ; script-src https: data: 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:;";
|
||||
{% else %}
|
||||
more_set_headers "Content-Security-Policy : upgrade-insecure-requests";
|
||||
{% endif %}
|
||||
more_set_headers "X-Content-Type-Options : nosniff";
|
||||
more_set_headers "X-XSS-Protection : 1; mode=block";
|
||||
more_set_headers "X-Download-Options : noopen";
|
||||
more_set_headers "X-Permitted-Cross-Domain-Policies : none";
|
||||
more_set_headers "X-Frame-Options : SAMEORIGIN";
|
||||
|
||||
# Disable the disaster privacy thing that is FLoC
|
||||
{% if experimental == "True" %}
|
||||
more_set_headers "Permissions-Policy : fullscreen=(), geolocation=(), payment=(), accelerometer=(), battery=(), magnetometer=(), usb=(), interest-cohort=()";
|
||||
# Force HTTPOnly and Secure for all cookies
|
||||
# Disabled because incompatible with the new cookie management system
|
||||
# proxy_cookie_path ~$ "; HTTPOnly; Secure;";
|
||||
{% else %}
|
||||
more_set_headers "Permissions-Policy : interest-cohort=()";
|
||||
{% endif %}
|
||||
|
||||
# Disable gzip to protect against BREACH
|
||||
# Read https://trac.nginx.org/nginx/ticket/1720 (text/html cannot be disabled!)
|
||||
gzip off;
|
||||
81
conf/nginx/server.tpl.conf
Normal file
81
conf/nginx/server.tpl.conf
Normal file
@@ -0,0 +1,81 @@
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name {{ domain }};
|
||||
|
||||
access_by_lua_file /usr/share/ssowat/access.lua;
|
||||
|
||||
include /etc/nginx/conf.d/acme-challenge.conf.inc;
|
||||
|
||||
location ^~ '/.well-known/ynh-diagnosis/' {
|
||||
alias /var/www/.well-known/ynh-diagnosis/;
|
||||
}
|
||||
{%- if mail_enabled == "True" %}
|
||||
|
||||
location ^~ '/.well-known/autoconfig/mail/' {
|
||||
alias /var/www/.well-known/{{ domain }}/autoconfig/mail/;
|
||||
}
|
||||
{%- endif %}
|
||||
|
||||
{#- Note that this != "False" is meant to be failure-safe, in the case the redrect_to_https would happen to contain empty string or whatever value. We absolutely don't want to disable the HTTPS redirect *except* when it's explicitly being asked to be disabled. #}
|
||||
{%- if redirect_to_https != "False" %}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
{#- The app config snippets are not included in the HTTP conf unless HTTPS redirect is disabled, because app's location may blocks will conflict or bypass/ignore the HTTPS redirection. #}
|
||||
{%- else %}
|
||||
|
||||
include /etc/nginx/conf.d/{{ domain }}.d/*.conf;
|
||||
{%- endif %}
|
||||
|
||||
include /etc/nginx/conf.d/yunohost_http_errors.conf.inc;
|
||||
|
||||
access_log /var/log/nginx/{{ domain }}-access.log;
|
||||
error_log /var/log/nginx/{{ domain }}-error.log;
|
||||
}
|
||||
|
||||
server {
|
||||
{%- if tls_passthrough_enabled != "True" %}
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
{%- else %}
|
||||
listen 127.0.0.1:444 ssl proxy_protocol;
|
||||
port_in_redirect off;
|
||||
set_real_ip_from 127.0.0.1/32;
|
||||
real_ip_header proxy_protocol;
|
||||
{%- endif %}
|
||||
server_name {{ domain }};
|
||||
|
||||
include /etc/nginx/conf.d/security.conf.inc;
|
||||
|
||||
ssl_certificate /etc/yunohost/certs/{{ domain }}/crt.pem;
|
||||
ssl_certificate_key /etc/yunohost/certs/{{ domain }}/key.pem;
|
||||
{%- if domain_cert_ca != "selfsigned" %}
|
||||
|
||||
more_set_headers "Strict-Transport-Security : max-age=63072000; includeSubDomains; preload";
|
||||
{%- endif %}
|
||||
{%- if mail_enabled == "True" %}
|
||||
|
||||
location ^~ '/.well-known/autoconfig/mail/' {
|
||||
alias /var/www/.well-known/{{ domain }}/autoconfig/mail/;
|
||||
}
|
||||
{%- endif %}
|
||||
|
||||
access_by_lua_file /usr/share/ssowat/access.lua;
|
||||
|
||||
include /etc/nginx/conf.d/{{ domain }}.d/*.conf;
|
||||
|
||||
include /etc/nginx/conf.d/yunohost_sso.conf.inc;
|
||||
include /etc/nginx/conf.d/yunohost_admin.conf.inc;
|
||||
include /etc/nginx/conf.d/yunohost_api.conf.inc;
|
||||
include /etc/nginx/conf.d/yunohost_http_errors.conf.inc;
|
||||
|
||||
access_log /var/log/nginx/{{ domain }}-access.log;
|
||||
error_log /var/log/nginx/{{ domain }}-error.log;
|
||||
}
|
||||
3
conf/nginx/ssowat.conf
Normal file
3
conf/nginx/ssowat.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
lua_shared_dict cache 10m;
|
||||
init_by_lua_file /usr/share/ssowat/init.lua;
|
||||
server_names_hash_bucket_size 128;
|
||||
28
conf/nginx/tls_passthrough.conf
Normal file
28
conf/nginx/tls_passthrough.conf
Normal file
@@ -0,0 +1,28 @@
|
||||
{% set domain_ip_map = tls_passthrough_list.split(',') %}
|
||||
stream {
|
||||
|
||||
map $ssl_preread_server_name $name {
|
||||
{% for domain_ip in domain_ip_map %}
|
||||
{{ domain_ip.split(";")[0] }} {{ domain_ip.split(";")[0].replace('.', '_') }};
|
||||
{%- endfor %}
|
||||
default https_default_backend;
|
||||
}
|
||||
{%- for domain_ip in domain_ip_map %}
|
||||
|
||||
upstream {{ domain_ip.split(";")[0].replace('.', '_') }} {
|
||||
server {{ domain_ip.split(";")[1] }}:{{ domain_ip.split(";")[2] }};
|
||||
}
|
||||
{%- endfor %}
|
||||
|
||||
upstream https_default_backend {
|
||||
server 127.0.0.1:444;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443;
|
||||
listen [::]:443;
|
||||
proxy_pass $name;
|
||||
proxy_protocol on;
|
||||
ssl_preread on;
|
||||
}
|
||||
}
|
||||
38
conf/nginx/tls_passthrough_server.conf
Normal file
38
conf/nginx/tls_passthrough_server.conf
Normal file
@@ -0,0 +1,38 @@
|
||||
# This snippet is only here to redirect traffic to another domain on port 80,
|
||||
# which is also forwarded for port 443 based on the SNI (which is handled
|
||||
# differently because of the whole SNI story)
|
||||
|
||||
# We don't explicitly redirect to HTTPS by default and let the forwarded server
|
||||
# handle the redirection (or not depending on what's configured on the other
|
||||
# server)
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name {{ tls_passthrough_domain }};
|
||||
|
||||
location / {
|
||||
proxy_pass http://{{ tls_passthrough_ip }};
|
||||
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Host $http_host;
|
||||
proxy_set_header X-Forwarded-Uri $request_uri;
|
||||
proxy_set_header X-Forwarded-Ssl on;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header Connection "";
|
||||
|
||||
real_ip_header X-Forwarded-For;
|
||||
real_ip_recursive on;
|
||||
|
||||
send_timeout 5m;
|
||||
proxy_read_timeout 360;
|
||||
proxy_send_timeout 360;
|
||||
proxy_connect_timeout 360;
|
||||
}
|
||||
|
||||
access_log /var/log/nginx/{{ tls_passthrough_domain }}-access.log;
|
||||
error_log /var/log/nginx/{{ tls_passthrough_domain }}-error.log;
|
||||
}
|
||||
35
conf/nginx/yunohost_admin.conf
Normal file
35
conf/nginx/yunohost_admin.conf
Normal file
@@ -0,0 +1,35 @@
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
|
||||
include /etc/nginx/conf.d/default.d/*.conf;
|
||||
}
|
||||
|
||||
server {
|
||||
|
||||
{% if tls_passthrough_enabled != "True" %}
|
||||
listen 443 ssl http2 default_server;
|
||||
listen [::]:443 ssl http2 default_server;
|
||||
{% else %}
|
||||
listen 127.0.0.1:444 ssl http2 default_server;
|
||||
# Prevent 301/302 rewrite/redirect from including the 444 port
|
||||
port_in_redirect off;
|
||||
{% endif %}
|
||||
|
||||
include /etc/nginx/conf.d/security.conf.inc;
|
||||
|
||||
ssl_certificate /etc/yunohost/certs/yunohost.org/crt.pem;
|
||||
ssl_certificate_key /etc/yunohost/certs/yunohost.org/key.pem;
|
||||
|
||||
more_set_headers "Strict-Transport-Security : max-age=63072000; includeSubDomains; preload";
|
||||
more_set_headers "Referrer-Policy : 'same-origin'";
|
||||
|
||||
location /yunohost {
|
||||
# Redirect most of 404 to maindomain.tld/yunohost/sso
|
||||
access_by_lua_file /usr/share/ssowat/access.lua;
|
||||
}
|
||||
|
||||
include /etc/nginx/conf.d/yunohost_admin.conf.inc;
|
||||
include /etc/nginx/conf.d/yunohost_api.conf.inc;
|
||||
include /etc/nginx/conf.d/default.d/*.conf;
|
||||
}
|
||||
30
conf/nginx/yunohost_admin.conf.inc
Normal file
30
conf/nginx/yunohost_admin.conf.inc
Normal file
@@ -0,0 +1,30 @@
|
||||
# Avoid the nginx path/alias traversal weakness ( #1037 )
|
||||
rewrite ^/yunohost/admin$ /yunohost/admin/ permanent;
|
||||
|
||||
location /yunohost/admin/ {
|
||||
alias /usr/share/yunohost/admin/;
|
||||
default_type text/html;
|
||||
index index.html;
|
||||
|
||||
{% if webadmin_allowlist_enabled == "True" %}
|
||||
{% if webadmin_allowlist.strip() -%}
|
||||
{% for ip in webadmin_allowlist.strip().split(',') -%}
|
||||
allow {{ ip.strip() }};
|
||||
{% endfor -%}
|
||||
{% endif -%}
|
||||
deny all;
|
||||
{% endif %}
|
||||
|
||||
location = /yunohost/admin/index.html {
|
||||
etag off;
|
||||
expires off;
|
||||
more_set_headers "Cache-Control: no-store, no-cache, must-revalidate";
|
||||
}
|
||||
|
||||
location /yunohost/admin/applogos/ {
|
||||
alias /usr/share/yunohost/applogos/;
|
||||
}
|
||||
|
||||
more_set_headers "Content-Security-Policy: upgrade-insecure-requests; default-src 'self'; connect-src 'self' https://paste.yunohost.org wss://$host; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-eval'; object-src 'none'; img-src 'self' data:;";
|
||||
more_set_headers "Content-Security-Policy-Report-Only:";
|
||||
}
|
||||
46
conf/nginx/yunohost_api.conf.inc
Normal file
46
conf/nginx/yunohost_api.conf.inc
Normal file
@@ -0,0 +1,46 @@
|
||||
location /yunohost/api/ {
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_pass http://127.0.0.1:6787/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
|
||||
{% if webadmin_allowlist_enabled == "True" %}
|
||||
{% for ip in webadmin_allowlist.split(',') %}
|
||||
allow {{ ip }};
|
||||
{% endfor %}
|
||||
deny all;
|
||||
{% endif %}
|
||||
|
||||
# Custom 502 error page
|
||||
error_page 502 /yunohost/api/error/502;
|
||||
}
|
||||
|
||||
# Yunohost admin output complete 502 error page, so use only plain text.
|
||||
location = /yunohost/api/error/502 {
|
||||
return 502 '502 - Bad Gateway';
|
||||
add_header Content-Type text/plain;
|
||||
internal;
|
||||
}
|
||||
|
||||
location /yunohost/portalapi/ {
|
||||
|
||||
proxy_read_timeout 30s;
|
||||
proxy_pass http://127.0.0.1:6788/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
|
||||
# Custom 502 error page
|
||||
error_page 502 /yunohost/portalapi/error/502;
|
||||
}
|
||||
|
||||
|
||||
# Yunohost admin output complete 502 error page, so use only plain text.
|
||||
location = /yunohost/portalapi/error/502 {
|
||||
return 502 '502 - Bad Gateway';
|
||||
add_header Content-Type text/plain;
|
||||
internal;
|
||||
}
|
||||
7
conf/nginx/yunohost_http_errors.conf.inc
Normal file
7
conf/nginx/yunohost_http_errors.conf.inc
Normal file
@@ -0,0 +1,7 @@
|
||||
error_page 502 /502.html;
|
||||
|
||||
location = /502.html {
|
||||
|
||||
root /usr/share/yunohost/html/;
|
||||
|
||||
}
|
||||
28
conf/nginx/yunohost_sso.conf.inc
Normal file
28
conf/nginx/yunohost_sso.conf.inc
Normal file
@@ -0,0 +1,28 @@
|
||||
# Avoid the nginx path/alias traversal weakness ( #1037 )
|
||||
rewrite ^/yunohost/sso$ /yunohost/sso/ permanent;
|
||||
|
||||
location /yunohost/sso/ {
|
||||
alias /usr/share/yunohost/portal/;
|
||||
default_type text/html;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /index.html;
|
||||
|
||||
location = /yunohost/sso/index.html {
|
||||
etag off;
|
||||
expires off;
|
||||
more_set_headers "Cache-Control: no-store, no-cache, must-revalidate";
|
||||
}
|
||||
|
||||
location /yunohost/sso/applogos/ {
|
||||
alias /usr/share/yunohost/applogos/;
|
||||
}
|
||||
|
||||
location = /yunohost/sso/customassets/custom.css {
|
||||
alias /usr/share/yunohost/portal/customassets/$host.custom.css;
|
||||
etag off;
|
||||
expires off;
|
||||
more_set_headers "Cache-Control: no-store, no-cache, must-revalidate";
|
||||
}
|
||||
|
||||
more_set_headers "Content-Security-Policy: upgrade-insecure-requests; default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; object-src 'none'; img-src 'self' data:;";
|
||||
}
|
||||
Reference in New Issue
Block a user