
Estoy tratando de averiguar cómo manejaría la inclusión en la lista blanca de ciertos nombres de dominio. Si la solicitud se origina en un subdominio particular, como <id>.domain-name.com
, el acceso a las imágenes se restringirá a una lista blanca de dominios aprobados. Las solicitudes de dominios que no están en la lista blanca generarán un error 403.
¿No estoy seguro de qué debería hacer exactamente? ¿Utilizo map
contexto?
por ejemplo, mi nginx.conf se vería así
map $http_host $whitelist {
default 0;
"~^(?<id>\w+)\.domain-name\.example\.com$" $id;
# whitelist domains
whitelist1 1;
whitelist2 1;
}
server {
listen 80;
proxy_intercept_errors on;
error_page 400 = @fallback;
if ($whitelist = 0) {
return 403;
}
proxy_pass $whitelist;
}
Respuesta1
Su nginx
configuración parece correcta en su mayoría, pero hay algunos cambios que puede realizar para asegurarse de que funcione como se esperaba.
Primero, debe definir la lista blanca real de dominios a los que se les permite acceder a las imágenes. En su configuración actual, ha definido dos dominios en la lista blanca como whitelist1
y whitelist2
. Debe reemplazarlos con los nombres de dominio reales a los que se les permite acceder a las imágenes.
En segundo lugar, en el contexto de su mapa, ha definido la variable $whitelist
como el valor del subdominio que realiza la solicitud. Sin embargo, lo que realmente necesita es el valor del nombre de dominio que realiza la solicitud, sin el subdominio. Puede modificar el contexto de su mapa para extraer el nombre de dominio de la siguiente manera:
map $http_host $whitelist {
default 0;
"~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;
# whitelist domains
whitelist1 example.com;
whitelist2 subdomain.example.com;
}
En el ejemplo anterior, la expresión regular captura el subdominio y el nombre de dominio por separado. Luego, la variable $domain
se establece en el valor del nombre de dominio sin el subdominio.
Finalmente, puede usar la $whitelist
variable en su bloque de servidor para determinar si permite o deniega el acceso a las imágenes. Su configuración actualizada se vería así:
map $http_host $whitelist {
default 0;
"~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;
# whitelist domains
whitelist1 example.com;
whitelist2 subdomain.example.com;
}
server {
listen 80;
proxy_intercept_errors on;
error_page 400 = @fallback;
if ($whitelist = 0) {
return 403;
}
location /images {
# allow access only to whitelisted domains
allow $whitelist;
deny all;
# serve images from disk
alias /path/to/images;
}
location @fallback {
# handle errors
return 400;
}
}