nginx를 통해 Play 서버에 대한 프록시 보안 웹 소켓

DeveloperInResidence

저는 플레이 프레임 워크 애플리케이션을 실행하고 있는데, 자바 스크립트 한 조각이 서버의 웹 소켓에 연결해야합니다. 서버는 다음 설정을 사용하여 Play 애플리케이션 앞에서 SSL을 사용하는 nginx 프록시를 실행하고 있습니다.

proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=one:10m max_size=500m;
proxy_cache_methods GET HEAD;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 10m;
proxy_http_version 1.1;

upstream backend {
    server 127.0.0.1:9001;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ssl on;
    server_name www.studiecirkel.net;
    gzip off;

    ssl_certificate     /home/sfr/certs/ssl-bundle.crt;
    ssl_certificate_key /home/sfr/certs/server.key;
    ssl_session_timeout 5m;
    ssl_ciphers     EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass https://backend;
        auth_basic "Internt alpha-test";
        auth_basic_user_file /home/sfr/studiecirkel/.htpasswd;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        tcp_nodelay on;
    }
}

자바 스크립트는 다음과 같습니다.

var chatSocket = new WS("@routes.HomeController.connectChat().webSocketURL(request)");

그리고 connectChat 메소드는 다음과 같습니다.

public LegacyWebSocket<JsonNode> connectChat() {
        return new LegacyWebSocket<JsonNode>() {
            public void onReady(WebSocket.In<JsonNode> in, WebSocket.Out<JsonNode> out){
                // Some internal code here
            }
        };
    }

모든 것이 localhost에있을 때 제대로 작동했지만 이제 서버가 클라우드에 있으므로 Chromium에서 다음 오류가 발생합니다.

'wss : // backend / messages / socket /'에 대한 WebSocket 연결 실패 : 연결 설정 오류 : net :: ERR_NAME_NOT_RESOLVED

또한 proxy_pass 지시문 주소를 백엔드에서 127.0.0.1:9001로 전환하려고 시도한 다음 대신 ERR_CONNECTION_REFUSED를 얻습니다.

"proxy_pass http : // backend " 를 사용 하고 프록시 뒤에서 비 SSL로 전환하려고하면 브라우저에서 웹 소켓 연결이 안전하지 않고 연결되지 않는다고 말합니다.

여기서 무엇이 잘못 되었을까요? 웹 소켓이 프록시 된 URL에 직접 연결할 수 있어야합니까? SSL 사용 웹 소켓이이 방식으로 작동하지 않습니까?

상 그람 자다브

문제는이 코드에 있습니다.

var chatSocket = new WS("@routes.HomeController.connectChat().webSocketURL(request)")

서버에서 해결되어 ERR_NAME_NOT_RESOLVED 오류가 나타납니다. 클라이언트가 귀하의 케이스에서 백엔드 인 호스트를 확인 하지 못하고 브라우저가이를 해결할 수없는 경우 이는 DNS 오류 입니다.

이것을 아래 코드로 바꾸고 작동하는지 확인하십시오.

var chatSocket = new WS("messages/socket/");

최신 정보. 위의 코드로는 충분하지 않은 것 같습니다. 다음은 문서 객체에서 호스트를 얻는 방법입니다.

var webSocketURL = 'wss://' + window.location.host + '/messages/socket/';
var chatSocket = new (webSocketURL);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

nginx를 통해 웹 소켓 프록시

웹 프록시를 통해 편안한 웹 서비스 사용

웹 소켓 및 게시 요청에 대한 전달 프록시로서의 Nginx

jetty 웹 서버를 사용한 웹 소켓 보안 연결 문제

비보안 웹 소켓 연결을 통해 통신해야하는 웹 사이트에서 getUserMedia를 사용합니다.

클라이언트 웹 소켓은 프록시를 통해 연결

주기적으로 봄 웹 소켓을 통해 클라이언트에 메시지를 보내기

크롬에 한동안 메시지를 보내지 않은 연결된 웹 소켓에 대한 시간 초과가 있습니까?

TCP / IP 소켓 (웹 서버)을 통해 파일 보내기

Nginx 리버스 프록시 웹 소켓 인증-HTTP 403

localhost의 웹 소켓에 대한 보안 연결을 설정하려면 어떻게해야합니까?

웹 소켓에서의 Nginx를 통해 사용자의 IP 전달

NodeJS의 다른 웹 소켓에 대한 웹 소켓 연결을 프록시하는 방법

웹 소켓 서버에서 실시간 데이터를 검색하도록 제안

요청에 대한 응답으로 Spring을 사용하여 반응 형 웹 소켓을 통해 데이터를 푸시하는 방법은 무엇입니까?

웹 소켓을 통해 다른 사용자에게 다른 메시지를 보내도록 예약하는 방법

웹 소켓을 통해 STOMP 프레임 보내기

웹 소켓을 통해 RabbitMQ 메시지 보내기

C #에서 보안 웹 소켓 사용

JS 보안 웹 소켓을 C# 웹 소켓 서버에 연결(Fleck)

스프링 웹 소켓을 사용하여 BLOCKING ..에 대해 10000 보류중인 차단 메시지

비동기 웹 소켓 클라이언트를 통해 웹 소켓 서버와 연결 유지

typescript 웹 소켓에서 메시지를 보내는 방법

타이프 스크립트에서 웹 소켓을 통해 부동 소수점 데이터를받는 방법

http를 통한 압정 웹 소켓

프록시를 통해 소켓을 http 서버에 연결하는 방법은 무엇입니까?

서버의 PHP 파일에 대한 AJAX 요청을 통해 데이터를 DB로 푸시하는 보안

Apache 2.4를 사용하는 반짝이는 서버의 프록시 웹 소켓

Hapi.js 웹 소켓 프로토콜 통신은 클라이언트가 웹 소켓에 연결하기 위해 hapi.js를 사용해야합니까?

TOP 리스트

  1. 1

    셀레늄의 모델 대화 상자에서 텍스트를 추출하는 방법은 무엇입니까?

  2. 2

    Blazor 0.9.0 및 ASP.NET Core 3 미리보기 4를 사용한 JWT 인증

  3. 3

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  4. 4

    C # 16 진수 값 0x12는 잘못된 문자입니다.

  5. 5

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  6. 6

    오류 : MSB4803 : MSBuild의 .NET Core 버전에서 "ResolveComReference"작업이 지원되지 않습니다.

  7. 7

    R에서 Excel로 내보낼 때 CET / CEST 시간 이동이 삭제됨

  8. 8

    node.js + postgres : "$ 1"또는 그 근처에서 구문 오류

  9. 9

    확대 후 하이 차트에서 Y 축이 잘못 정렬 됨

  10. 10

    EPPlus에서 행 높이를 설정할 때 이상한 동작

  11. 11

    Ionic 2 로더가 적시에 표시되지 않음

  12. 12

    MS Access 부분 일치 2 테이블

  13. 13

    EPPlus에서 병합 된 셀의 행 높이 자동 맞춤

  14. 14

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  15. 15

    ResponseEntity를 사용하고 InputStream이 닫히는 지 확인하는 적절한 스트리밍 방법

  16. 16

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  17. 17

    오류 : "const wchar_t *"유형의 인수가 "WCHAR *"유형의 매개 변수와 호환되지 않습니다.

  18. 18

    Java에서 이미지를 2 색으로 변환

  19. 19

    overflow-y를 사용할 때 스크롤 버벅 거림 줄이기 : scroll;

  20. 20

    Java에서 Apache POI를 사용하여 테이블 크기 및 간격을 단어로 설정하는 방법

  21. 21

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

뜨겁다태그

보관