[REDIS] 자바에서의 nginx와 포트 포워딩
REDIS자바에서의 nginx와 포트 포워딩
나는 백엔드로 레디 스를 사용하는 자바 응용 프로그램을 만들기 위해 노력하고있어. 레디 스 내가 사용하고 싶습니다 정말 빠른 키 - 값 저장소이지만, 레디 스은 사용자를위한 옵션 필요가 없도록 한 클라이언트와 함께 사용하도록되어 있기 때문에 : 통과 인증을. 나는 내가 redis2 확장자로 nginx를 시도 있도록, 인증의 일종을 구현하는 방법을 찾고 싶습니다. 내가 클라이언트 측 certficates 및 HTTPS를 사용할 수 있기 때문에이했다. 하지만 내 응용 프로그램이 정말 느리게 만들고있다.
나는 레디 스를 통해 nginx를 프록시에 연결하는 터널의 어떤 종류를 사용하는 방법에 대해 생각하고 있어요. 이 레디 스뿐만 HTTPS 인증, localhost를 수신 할 것이며 내가 레디 스에 도달하기 위해 사용하려는 주소가있을 것입니다. 그래서 기본적으로 내 현재의 방법
JAVA - Jedis - LAN - REDIS ,would be
JAVA - Jedis(with localhost as the tunnel entrance?)-
-SSL LAN - Nginx(tunnel exit) - Redis
이를 달성하기위한 모든 팁? 나는 마지막 날에 대한 웹 검색 좀 봤는데하지만 난 네이티브 연결에만 약간의 오버 헤드를 추가 아무것도 올 수 없었다.
해결법
-
==============================
1.레디 스는 백엔드 애플리케이션 뒤에, 보안 네트워크에서 작동하도록 설계되었습니다. 클라이언트 응용 프로그램은 레디 스에 직접 연결되어 있지 않습니다. 그것은 레디 스 2 계층 응용 프로그램에 대한 빈약 한 선택입니다.
레디 스는 백엔드 애플리케이션 뒤에, 보안 네트워크에서 작동하도록 설계되었습니다. 클라이언트 응용 프로그램은 레디 스에 직접 연결되어 있지 않습니다. 그것은 레디 스 2 계층 응용 프로그램에 대한 빈약 한 선택입니다.
당신은 여전히 이것에 대한 레디 스를 사용하려는 경우 지금, 당신은 몇 가지 옵션이 있습니다. 당신은 HTTP 인터페이스의 레디 스 서버를 캡슐화 할 수 있습니다. 이것은 nginx를 redis2 모듈이 제공하는 것입니다. 당신은 또한 유사하다 webdis 한 번 봐 가지고 할 수 있습니다 (와의 nginx에 의존하지 않는다). 이벤트 몇 가지 액세스 제어 메커니즘을 Webdis. 설명서를 참조하십시오.
당신이 제안 된 또 다른 해결책은 터널을 설정하는 것입니다. 나는 이것에 대한 nginx를 사용하지만, 그냥 평범한 오래된 SSH하지 않을 것입니다. 하자 가정 해 기계 B에 레디 스 서버가 실행 (포트 6379) 및 클라이언트 실행 시스템 A에
시스템 A에, 나는 실행할 수 있습니다 :
ssh user@host_B -L 7008:host_B:6379 -N
그것은 로컬 포트 7008 (임의 선택), 및 대기에서 B A에서 터널을 열 것이다. 사용자는 호스트 B에 선언, 그 암호는 알려 져야한다. 다른 세션에서 여전히 호스트 (A)에, 우리는 지금 실행할 수 있습니다 :
redis-cli -p 7008 ping
표준 레디 스 클라이언트가 사용을 유의하시기 바랍니다. 클라이언트에 대한 투명 방식으로 터널 핸들 인증, 암호화 및 선택적 압축.
지금, 당신의 클라이언트는 자바 응용 프로그램입니다, 당신은 아마 설정에 터널을 SSH 명령을 실행하지 않습니다. 바라건대, 당신은 자바에서 직접 터널을 엽니 다 Jsch 패키지를 사용할 수 있습니다. 다음으로 Jedis 예이다 :
import redis.clients.jedis.*; import java.util.*; import com.jcraft.jsch.*; public class TestTunnel { Jedis jedis; Session session; JSch jsch = new JSch(); int port; // None of the following should be hardcoded static String USER = "user"; // SSH user on the redis server host static String PASSWD = "XXXXXXXX"; // SSH user password static String HOST = "192.168.1.62"; // Redis server host static int PORT = 6379; // Redis server port public TestTunnel() { try { // Open the SSH session session = jsch.getSession( USER, HOST, 22 ); session.setPassword( PASSWD ); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); config.put("Compression", "yes"); config.put("ConnectionAttempts","3"); session.setConfig(config); session.connect(); // Setup port forwarding from localhost to the Redis server // Local port is ephemeral (given by the OS) // Jedis connects to localhost using the local port port = session.setPortForwardingL( 0, HOST, PORT ); jedis = new Jedis( "127.0.0.1", port ); } catch ( JSchException e ) { // Proper error handling omitted System.out.println(e); } } public void disconnect() { jedis.disconnect(); try { session.delPortForwardingL( port ); session.disconnect(); } catch ( JSchException e ) { // Proper error handling omitted System.out.println(e); } } public void mytest( int n ) { for ( int k = 0; k < n; k++) { jedis.set("k" + k, "value"+k); } System.out.println("Read: "+jedis.get("k0") ); } public static void main(String[] args) { TestTunnel obj = new TestTunnel(); obj.mytest(10); obj.disconnect(); } }
그것은 잘 작동하지만, 오버 헤드 인해 터널이 유의하시기 바랍니다가. 네트워크 (예를 들어 인터넷) 속도가 느린 때 오버 헤드가 매우 낮습니다. 고속 LAN (1 기가비트 이더넷)에, 그것은 훨씬 더 눈에 띈다 : 터널을 사용할 때 대기 시간은 최대 3을 곱한 수 있습니다. 유지 수있는 레디 스 서버 처리량 최대도 영향을받습니다. 서버 측에서 sshd 데몬은 (레디 스 자체보다도) 일부 CPU 걸린다.
그건 내가 2 계층 응용 프로그램에 대한 많은 원시 성능 문제를 생각하지 않습니다 말했다.
-
==============================
2.참고 : GitHub의에서 찾을 수 있습니다 SSL-레디 스라는 레디 스의 SSL 버전이있다 : https://github.com/bbroerman30/ssl-redis 2.6ish
참고 : GitHub의에서 찾을 수 있습니다 SSL-레디 스라는 레디 스의 SSL 버전이있다 : https://github.com/bbroerman30/ssl-redis 2.6ish
https://github.com/tritondigital/ssl-redis 2.4ish
이것과 Jedis 자바 클라이언트를 수정으로, SSL 인증을 달성 할 수있다.
from https://stackoverflow.com/questions/16789727/port-forwarding-with-nginx-from-java by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 센티넬과 올바른 @EnableRedisHttpSession 구성 (0) | 2020.01.25 |
---|---|
[REDIS] Java 클라이언트에 키 - 값 데이터베이스 (0) | 2020.01.25 |
[REDIS] ZeroMQ에서와 레디 스 pubsub 메시지 큐하지만, 콜백, (0) | 2020.01.25 |
[REDIS] 한 번에 레디 스 목록에서 모든 목록 항목을 팝업 할 수있는 방법이 있습니까? (0) | 2020.01.25 |
[REDIS] 트래비스 CI에 레디 스를 실행 (0) | 2020.01.25 |