>  기사  >  운영 및 유지보수  >  Nginx가 요청 소스 도메인 이름을 기반으로 액세스 제어 구성을 구현하는 방법

Nginx가 요청 소스 도메인 이름을 기반으로 액세스 제어 구성을 구현하는 방법

WBOY
WBOY원래의
2023-11-08 09:06:481587검색

Nginx가 요청 소스 도메인 이름을 기반으로 액세스 제어 구성을 구현하는 방법

Nginx가 요청 소스 도메인 이름을 기반으로 액세스 제어 구성을 구현하려면 특정 코드 예제가 필요합니다.

Nginx는 정적 파일 서버 역할을 할 수 있을 뿐만 아니라 유연한 액세스 제어를 달성할 수 있는 고성능 웹 서버 소프트웨어입니다. 구성을 통해. 이 글에서는 Nginx를 통해 요청 소스 도메인 이름을 기반으로 액세스 제어 구성을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

Nginx 구성 파일은 일반적으로 /etc/nginx/nginx.conf에 있으며 이 파일에 관련 구성을 추가할 수 있습니다. 다음은 기본 Nginx 구성 파일의 예입니다.

http {
    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://localhost:8000;
        }
    }
}

위 예에서는 포트 80에서 수신 대기하고 모든 요청을 로컬 포트 ​​8000으로 전달합니다. server_name 지시문은 이 구성에서 요청을 수락하는 도메인 이름을 지정하는 데 사용됩니다. 기본적으로 Nginx는 모든 도메인 이름의 요청을 수락합니다. 요청 소스의 도메인 이름을 기반으로 액세스 제어 구성을 구현하려면 $request_header와 결합된 if 지시문을 사용하여 이를 달성할 수 있습니다.

다음은 예입니다.

http {
    server {
        listen 80;

        if ($http_host ~* "^(www.)?example.com$") {
            location / {
                proxy_pass http://localhost:8000;
            }
        }

        if ($http_host ~* "^(www.)?example2.com$") {
            return 403;
        }
    }
}

위 예에서는 두 개의 if 명령을 사용하여 요청 소스의 도메인 이름을 기반으로 액세스 제어 구성을 구현합니다. 첫 번째 if 블록에서는 $http_host 변수를 사용하여 example.com 도메인 이름을 일치시키고 요청을 로컬 포트 ​​8000으로 전달합니다. 두 번째 if 블록에서는 $http_host 변수를 사용하여 example2.com 도메인 이름을 일치시키고 403 오류를 반환합니다.

Nginx에서 if 명령을 사용하면 성능이 저하된다는 점에 유의해야 합니다. 가능하다면 도메인 이름 일치에 정규식을 사용하고 위치 지시문을 사용하여 보다 효율적인 구성을 달성하는 것이 좋습니다.

if 지시문을 사용하는 것 외에도 Nginx는 ngx_http_access_module 모듈, ngx_http_auth_basic_module 모듈 등과 같이 더 복잡한 액세스 제어 구성을 구현하기 위한 다른 많은 지침과 모듈도 제공합니다. 실제 필요에 따라 적절한 구성 방법을 선택할 수 있습니다.

요약하자면 Nginx를 통해 요청 소스의 도메인 이름을 기반으로 한 액세스 제어 구성을 구현할 수 있습니다. 구성 파일의 $http_host 변수와 함께 if 지시문을 사용하면 요청한 도메인 이름을 기반으로 조건부 판단을 내릴 수 있으므로 유연한 액세스 제어가 가능합니다. 물론 성능을 보장하려면 적절한 구성 방법을 선택하고 이를 다른 모듈과 결합하여 보다 복잡한 제어 요구 사항을 달성하는 것이 좋습니다.

위 내용은 Nginx가 요청 소스 도메인 이름을 기반으로 액세스 제어 구성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.