Nginx를 사용하여 MySQL 연결을 프록시하고 액세스 가능한 IP를 제한하는 방법은 무엇입니까?

출처: toutiao.com/article/7234104886726705716

1. 소개

우리의 프로덕션 환경은 기본적으로 애플리케이션 서버, MySQL 서버 등 클라우드 서버에 배포됩니다. MySQL 서버가 공용 네트워크에 직접 노출되면 큰 위험이 따르게 되며, 데이터 보안을 위해 MySQL 서버의 포트는 외부에 공개되지 않습니다.

공교롭게도 온라인 비즈니스에 버그가 발생했는데, 개발 파트너가 데이터를 보기 위해 원격으로 MySQL에 접속해야 하는데 어떻게 해야 할까요?

Nginx 프록시("스프링보드")를 통해 연결할 수 있습니다.

오픈 소스 및 무료 Spring Boot 실습 프로젝트를 추천합니다.

https://github.com/javastacks/spring-boot-best-practice

2. Nginx 프록시 연결

연결의 프록시 전달을 달성하려면 Nginx가 설치된 서버가 필요하며 이는 MySQL 서버와 동일한 인트라넷에 있고 인트라넷 간에 액세스할 수 있습니다.

둘째, 기본적으로 빌드되지 않는 모듈을 사용해야 하며 , ngx_stream_core_module구성 시 빌드 --with-stream에 추가해야 합니다.

추가 과정은 [Nginx 기본 명령어 및 논스톱 버전 업그레이드] 글을 참고하시면 되며, 여기서는 자세히 다루지 않겠습니다.

ngx_stream_core_module모듈이 사용될 예정이므로 가장 먼저 해야 할 일은 모듈이 제공하는 지침을 살펴보고 구성 방법을 아는 것입니다 .

1) 스트림

이 지시문은 스트림 서버를 정의합니다. 이는 http 블록과 동일한 수준에 있으며 기본 블록에 정의되어 있습니다.

  • 범위: 메인
  • 구문: 스트림 {...}

예:

 stream {
     server {
         ......
     }
 }

2) 서버

이 지시문은 http 블록의 서버와 유사한 가상 호스트를 정의합니다. 스트림 블록에 여러 서버 블록을 정의할 수 있습니다.

  • 범위: 스트림
  • 구문: 서버 {...}
stream {
     server {
         ......
     }
     server {
         ......
     }
 }

3) 들어봐

이 명령어는 가상 호스트 서버가 모니터링할 소켓의 주소와 포트를 정의합니다.

  • 범위: 서버
  • 구문: 수신 주소:포트;

예:

listen 127.0.0.1:3306;
 listen *:3306;
 # 效果与listen *:3306一样
 listen 3306;
 listen localhost:3306;

4) 구성 예

MySQL 서버, 포트 3306(독립형 환경)

stream  {
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }

MySQL 서버, 포트 3306(클러스터 환경)

stream  {
     upstream mysql_socket {
         server 192.168.110.101:3306;
     }
     server {
             listen 3306;
             proxy_pass mysql_socket;
     }
 }

이 시점에서 Navicat과 같은 클라이언트를 통해 연결할 수 있습니다.

3. IP에 대한 접근 제한

연결을 위한 에이전트가 구현되어 누구나 Nginx에 접근하여 MySQL 서버에 연결할 수 있게 되어 외부 네트워크에 연결할 수 없는 문제를 해결합니다.

접근 범위를 더욱 좁히고 데이터 보안을 보장하기 위해 회사 네트워크의 IP 주소만 Nginx를 통해 연결할 수 있도록 제한할 수 있습니다.

Nginx는 ngx_stream_access_module허용 및 거부 지시문만 포함하는 지시문이 매우 간단한 모듈을 제공합니다.

1) 허용

이 명령은 액세스를 허용하도록 지정된 IP를 설정합니다. 거부 명령과 함께 사용할 수 있습니다.

  • 범위: 스트림, 서버
  • 구문: 주소 허용 | CIDR | unix: | 모두;

예:

 # 允许192.168.110.1访问
 allow 192.168.110.1;

 # 允许192.168.110.1到192.168.255.254
 allow 192.168.110.0/16;

 # 允许192.168.110.1到192.168.110.254
 allow 192.168.110.0/24;

 # 允许所有的IP访问
 allow all;

2) 거부

이 명령은 지정된 IP를 액세스 금지로 설정합니다. 허용 명령과 함께 사용할 수 있습니다.

  • 범위: 스트림, 서버
  • 구문: 거부 주소 | CIDR | unix: | 모두;
# 禁止192.168.110.1访问
 deny 192.168.110.1;

 # 禁止192.168.110.1到192.168.255.254
 deny 192.168.110.0/16;

 # 禁止192.168.110.1到192.168.110.254
 deny 192.168.110.0/24;

 # 禁止所有的IP访问
 deny all;

3) 구성 예

192.168.110.100을 제외한 모든 IP 접속을 금지합니다.

allow 192.168.110.100;
 deny all;

팁: 허용이 지정된 경우 거부와 함께 사용해야 합니다. 그렇지 않으면 모든 IP 주소에 대한 액세스가 허용됩니다.

4. 종합사례

192.168.110.100만 Nginx를 통해 MySQL 서버에 연결할 수 있습니다.

stream  {
     allow 192.168.110.100;
     deny all;
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }

최근 핫한 기사 추천:

1. 1,000개 이상의 Java 면접 질문과 답변(2022년 최신 버전)

2. 훌륭해요! Java 코루틴이 출시됩니다. . .

3. Spring Boot 2.x 튜토리얼은 너무 포괄적입니다!

4. 화면을 폭발과 폭발로 가득 채우지 말고 데코레이터 모드를 사용해 보세요. 이것이 우아한 방법입니다! !

5. "Java 개발 매뉴얼(송산판)" 최신 릴리스를 빠르게 다운로드하세요!

기분 좋으시구요, 좋아요+전달 잊지 마세요!

Supongo que te gusta

Origin blog.csdn.net/youanyyou/article/details/132539179
Recomendado
Clasificación