저는 항상 redis 구성 파일에서 바인딩의 역할이 redis 서버가 redis 연결 요청을 수신하는 데 사용하는 서버(IP 주소)를 제한하는 것이라고 생각했습니다. 바인딩에 지정된 IP 주소를 가진 컴퓨터만 이 Redis 서버에 액세스할 수 있습니다. .
위의 결론은 완전히 틀렸다는 것이 사실로 입증되었습니다.
오늘 Redis 서비스 클러스터를 구축하던 중 Redis의 바인딩에 대한 오해를 발견했습니다.
예:
bind 127.0.0.1은 로컬 시스템만 Redis 서비스 연결에 연결할 수 있도록 제한하는 데 사용됩니다.
bind 0.0.0.0은 모든 컴퓨터가 Redis 서비스 연결에 연결할 수 있도록 허용하는 데 사용됩니다.
참고: 위의 이해는 잘못되었습니다. 그것들은 우연히 특별한 경우이고 우리에 대한 환상을 만들어냅니다.
믿을 수 없다면 시도해 볼 수 있습니다. (한 번 시도해 보는 것이 가장 좋습니다)
bind 10.0.0.1(또는 127.0.0.1 및 0.0.0.0을 제외한 모든 IP 주소)
그런 다음 다시 시작하세요. redis를 실행하면 Can't start를 찾을 수 있습니다.
시작할 수 없는 이유는 바인드의 진정한 의미를 알고 나면 시작할 수 없는 이유를 이해하게 될 것입니다.
Redis의 바인딩에 대한 올바른 이해는 다음과 같습니다.
bind: 로컬 시스템에 바인딩된 IP 주소입니다(정확히: 로컬 네트워크 카드에 해당하는 IP 주소, 각 네트워크 카드에는 IP 주소가 있음). Redis에서는 허용되지 않습니다. 다른 컴퓨터의 IP 주소.
바인드가 지정되면 지정된 네트워크 카드의 Redis 요청만 허용된다는 의미입니다. 지정하지 않으면 모든 네트워크 카드의 Redis 요청을 수락할 수 있음을 의미합니다.
예: Redis 서버(로컬 시스템)에 두 개의 네트워크 카드가 있는 경우 각 네트워크 카드는 IP1 및 IP2와 같은 IP 주소에 해당합니다. (IP1과 IP2는 모두 이 기기의 IP 주소입니다.)
구성 파일: IP1 바인딩. IP1을 통해 Redis 서버에 액세스하는 경우에만 Redis 서버에 연결할 수 있습니다. IP2를 통해 Redis 서버에 액세스하면 Redis에 연결할 수 없습니다.
로컬 네트워크 카드에 해당하는 IP 주소를 확인하려면 ifconfig 명령을 사용하세요.
(동영상 공유 학습: redis 동영상 튜토리얼)
위에서 볼 수 있듯이 두 개의 네트워크 카드가 있습니다. 즉, 127.0.0.1 및 172.18.235.206만 바인딩으로 사용할 수 있습니다. 그렇지 않으면 redis가 시작됩니다. 일어날 수 없습니다.
해당 네트워크 카드 IP 주소가 없기 때문에 위의 예(바인드 10.0.0.1)를 시작할 수 없는 이유를 설명합니다. 이는 바인드가 Redis에서 서버 요청을 수락할 수 있는 IP 주소를 지정하지 않음을 보여줍니다.
대신: 바인딩은 로컬 네트워크 카드에 해당하는 IP 주소를 지정하는 데 사용됩니다.
참고:
바인드 127.0.0.1에 대한 설명: (이 기계만 연결할 수 있고 다른 기계는 연결할 수 없는 이유)
ifconfig에서 볼 수 있습니다: lo 네트워크 카드(127.0.0.1 IP 주소에 해당): 루프백입니다. 주소(로컬 루프백), 즉 로컬 컴퓨터만 이 루프백 주소에 액세스할 수 있고 다른 컴퓨터는 자신의 루프백 주소에만 액세스할 수 있습니다.
그러면 이 lo 네트워크 카드의 컴퓨터에는 이 컴퓨터만 있으므로 이 컴퓨터만 접속할 수 있고 다른 컴퓨터는 접속할 수 없습니다.
bind 172.18.235.206, Redis 요청이 이 네트워크 카드 주소(172.18.235.206)를 통해 오는 한 Redis에 액세스할 수 있습니다. 저는 Alibaba Cloud의 서버를 사용합니다. 다른 서버에서 redis-cli Alibaba Cloud 공용 IP 주소를 요청하면 redis 서버에 연결됩니다.
공용 네트워크 주소에 대한 요청은 모두 eth0 네트워크 카드 주소(172.18.235.206)를 통과하므로 이 redis 요청을 받습니다.
해당 루프백 주소를 사용하지 않으면 기본적으로 모든 외부 컴퓨터가 로컬 Redis 서버에 액세스할 수 있습니다.
지정된 호스트만 Redis에 연결하도록 제한하려면 방화벽을 통해서만 제어할 수 있으며 Redis의 바인딩 매개변수를 통해서는 제어할 수 없습니다.
Alibaba Cloud의 보안 그룹을 사용하여 특정 호스트가 포트 6379에 연결하는 것을 제한합니다.
redis의 [보호 모드] 이해:
redis 자체는 [지정된 호스트만] Redis에 연결하는 것을 제한할 수 없습니다. 위에서 말했듯이 바인드 사양은 인터페이스 주소(인터페이스)를 설정하는 데만 사용됩니다.
1. 바인드가 127.0.0.1로 설정되어 있으면 이 호스트만 Redis에 연결할 수 있으므로 매우 안전합니다. 비밀번호를 설정하지 않아도 누군가가 서버에 로그인하지 않는 한 안전합니다.
2. 바인딩이 0.0.0.0으로 설정되어 있으면 모든 호스트가 Redis에 연결할 수 있음을 의미합니다. (전제조건: 서버가 Redis 포트를 열어야 합니다). 이때 비밀번호를 설정하면 추가 보호 계층이 제공되며 비밀번호를 아는 사람만 액세스할 수 있습니다. 즉, 비밀번호를 아는 모든 호스트가 Redis에 액세스할 수 있습니다.
protected-mode는 Redis 자체의 보안 계층입니다. 이 보안 계층의 기능은 [이 시스템]만 Redis에 액세스할 수 있고 다른 누구도 Redis에 액세스할 수 없다는 것입니다. 이 보안 계층은 열 때 세 가지 조건을 충족해야 합니다. 그렇지 않으면 보안 계층이 닫힙니다.
(1) 보호 모드 예(켜짐)
(2) 바인드 명령이 없습니다. 원본 텍스트: 서버는 "bind" 지시문을 사용하여 주소 집합에 명시적으로 바인딩되지 않습니다.
(3) 비밀번호가 설정되지 않았습니다. 원본 텍스트: 비밀번호가 구성되지 않았습니다.
이때 Redis의 보호 메커니즘이 켜집니다. 활성화된 후에는 로컬 머신만 Redis에 액세스할 수 있습니다. 위의 세 가지 조건 중 하나라도 충족되지 않으면 보호 메커니즘이 활성화되지 않습니다.
관련 권장사항: redis 데이터베이스 튜토리얼
원본 링크: https://blog.csdn.net/cw_hello1/article/details/83444013
위 내용은 Redis에서 바인드의 실제 역할은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!