
특정 도메인 이름을 허용 목록에 추가하는 방법을 알아보려고 합니다. 요청이 와 같은 특정 하위 도메인에서 시작된 경우 <id>.domain-name.com
이미지에 대한 액세스는 승인된 도메인의 허용 목록으로 제한됩니다. 화이트리스트에 없는 도메인에서 요청하면 403 오류가 발생합니다.
정확히 무엇을 해야 할지 잘 모르겠습니다. 컨텍스트를 사용합니까 map
?
예를 들어 내 nginx.conf는 다음과 같습니다.
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;
}
답변1
구성 nginx
은 대부분 정확해 보이지만 예상대로 작동하도록 몇 가지 변경 사항을 적용할 수 있습니다.
먼저, 이미지에 액세스할 수 있는 실제 도메인 화이트리스트를 정의해야 합니다. 현재 구성에서는 두 개의 화이트리스트 도메인을 whitelist1
및 으로 정의했습니다 whitelist2
. 이를 이미지에 액세스할 수 있는 실제 도메인 이름으로 바꿔야 합니다.
$whitelist
둘째, 맵 컨텍스트에서 변수를 요청하는 하위 도메인의 값으로 정의했습니다 . 그러나 실제로 필요한 것은 하위 도메인 없이 요청을 하는 도메인 이름의 값입니다. 다음과 같이 맵 컨텍스트를 수정하여 도메인 이름을 추출할 수 있습니다.
map $http_host $whitelist {
default 0;
"~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;
# whitelist domains
whitelist1 example.com;
whitelist2 subdomain.example.com;
}
위의 예에서 정규식은 하위 도메인과 도메인 이름을 별도로 캡처합니다. 그런 다음 변수 $domain
는 하위 도메인이 없는 도메인 이름 값으로 설정됩니다.
마지막으로 서버 블록의 변수를 사용하여 $whitelist
이미지에 대한 액세스를 허용할지 거부할지 결정할 수 있습니다. 업데이트된 구성은 다음과 같습니다.
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;
}
}