Nginx, Alpine Linux 및 Docker를 사용하여 특정 국가에서 웹사이트에 액세스하지 못하도록 차단
4719 단어 nginxlinuxdockergeoblocking
Nginx GeoIP 모듈 설치
모듈을 설치하려면 다음을 실행하십시오.
apk --no-cache add nginx-mod-http-geoip
the old GeoIP module , not the paid-for GeoIP2 one that requires Nginx Plus 입니다.
GeoIP 데이터베이스 다운로드
GeoIP 데이터베이스는 최근에 형식을
mmdb
형식으로 전환했지만 GeoIP 모듈은 여전히 레거시dat
형식을 사용합니다.ways of converting from mmdb to dat이 있지만 운 좋게도 사용자 provides download of pre-converted files가 있으므로 거기에서 최신 버전을 다운로드할 수 있습니다.
국가 데이터베이스를 다운로드하고 압축을 풀고 경로에 넣으십시오
/usr/share/GeoIPCountry.dat
.nginx.conf 수정
nginx.conf
파일을 수정하고 다음을 추가합니다.http
블록 내부에 다음을 추가합니다.geoip_country /usr/share/GeoIPCountry.dat;
# Allowed proxy addresses
geoip_proxy 10.0.0.0/8;
geoip_proxy 172.17.0.1/16;
# List of disallowed countries
map $geoip_country_code $allowed_country {
default yes;
AL no;
BS no;
}
역방향 프록시/로드 밸런서(예: AWS ALB) 앞에서 Nginx를 사용하는 경우에만
geoip_proxy
항목이 필요합니다. 여기에 포함된 범위의 경우 Nginx는 요청이 제공된 IP와 반대로 X-Forwarded-For
헤더에서 IP를 찾습니다. 그러한 설정이 없으면 해당 라인을 제거할 수 있습니다.알바니아와 바하마를 나열하는 예제에서 국가 코드 목록도 수정해야 합니다. 모든 국가 코드on this site를 찾을 수 있습니다.
사이트의
server
블록 안에 다음을 추가합니다.# Add Country header for debugging
add_header X-Cntry "$geoip_country_code";
if ($allowed_country = no) {
return 444;
}
IP가 차단된 국가 중 하나에 속하는 경우 콘텐츠를 반환하지 않음으로써 IP 주소를 차단합니다. 또한 모든 것이 올바르게 작동하는지 확인할 수 있도록 국가 코드와 함께
X-Cntry
라는 헤더를 설정합니다. 예를 들어 이제 다음 명령을 사용하여 서버와 국가 코드를 볼 수 있습니다curl
.curl https://your-site.com --HEAD --silent | grep -i X-Cntry
결과는 다음과 같습니다.
X-Cntry: SE
도커 설정
전체 Docker 예제in this repository도 볼 수 있습니다.
메모 / 감사의 말
Reference
이 문제에 관하여(Nginx, Alpine Linux 및 Docker를 사용하여 특정 국가에서 웹사이트에 액세스하지 못하도록 차단), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/khromov/block-specific-countries-from-accessing-your-website-using-nginx-alpine-linux-and-docker-5ji텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)