>  기사  >  운영 및 유지보수  >  Nginx가 WebSocket 구성을 구현하는 방법

Nginx가 WebSocket 구성을 구현하는 방법

PHPz
PHPz원래의
2023-11-08 10:37:561427검색

Nginx가 WebSocket 구성을 구현하는 방법

고성능 웹 서버이자 역방향 프록시 서버인 Nginx에는 WebSocket 요청을 처리하는 고유한 구성 방법도 있습니다. WebSocket은 TCP 기반 프로토콜입니다. WebSocket 연결을 설정하려면 핸드셰이크가 완료된 후 클라이언트와 서버 간에 양방향 통신이 이루어질 수 있습니다. 아래에서는 구체적인 코드 예제와 함께 Nginx에서 WebSocket 구성을 구현하는 방법을 소개합니다.

먼저 Nginx 구성 파일에 WebSocket 관련 구성을 추가해야 합니다.

http {
  ...
  upstream websocket {
    server localhost:9001;
  }
  ...
  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
  }
  ...
  server {
      listen 80;
      server_name example.com;

      location / {
          proxy_pass http://websocket;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection $connection_upgrade;
          proxy_set_header Host $host;
      }
      ...
  }
  ...
}

위 구성에서는 WebSocket의 대상 서버 주소와 포트를 지정하기 위해 "websocket"이라는 업스트림을 추가했습니다. 동시에 map 지시어는 $http_upgrade(클라이언트 업그레이드 요청 헤더)와 $connection_upgrade(nginx 업그레이드 요청 헤더)를 매핑하는 데 사용됩니다. 이러한 방식으로 클라이언트의 업그레이드 요청 헤더에 "Upgrade" 및 "Connection" 필드를 추가하면 Nginx가 트리거되어 HTTP 프로토콜을 WebSocket 프로토콜로 업그레이드하여 양방향 통신을 달성할 수 있습니다.

서버 블록에서는 Proxy_pass 지시문을 사용하여 모든 WebSocket 요청을 웹소켓 업스트림으로 프록시하고 프로토콜 버전과 요청 헤더 정보를 설정합니다. Nginx에서 WebSocket을 프록시할 때 "Upgrade" 및 "Connection" 요청 헤더를 함께 대상 서버로 전송해야 합니다. 그렇지 않으면 연결이 닫히므로 이 두 요청 헤더는 Proxy_set_header 지시어를 통해 수동으로 설정해야 합니다. 에 추가하세요.

또한 위 구성에서는 HTTP(80) 포트만 수신했다는 점에 유의해야 합니다. HTTPS에서 WebSocket을 구성해야 하는 경우 서버 블록에 다음 지침을 추가해야 합니다.

listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

위 지침은 HTTPS(443) 포트를 모니터링하고 인증서 및 키 파일의 경로와 이름을 지정하는 데 사용됩니다.

다음은 Node.js를 사용하여 구현된 특정 WebSocket 서버 코드 예제입니다.

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 9001 });

server.on('connection', (socket, req) => {
  console.log('Client connected');

  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    socket.send(`Your message: ${message}`);
  });

  socket.on('close', () => {
    console.log('Client disconnected');
  });
});

이 코드에서는 WebSocket 서버를 생성하고 포트 9001을 수신했습니다. 연결이 설정된 후 "클라이언트 연결됨" 정보를 출력하고, 클라이언트의 메시지를 받은 후 해당 메시지를 클라이언트에 반환한 후 종료 이벤트를 수신하여 "클라이언트 연결 끊김" 정보를 출력합니다.

위의 코드와 구성 예제를 사용하면 Nginx에서 WebSocket 프로토콜의 프록시 및 통신 작업을 구현할 수 있습니다. WebSocket 프로토콜 사용에는 여전히 특정 제한 사항이 있다는 점에 유의해야 합니다. 특히 WebSocket 연결 설정 프로세스는 HTTP/HTTPS 프로토콜과 유사하지만 연결이 성공적으로 설정되면 둘 사이의 통신이 이루어집니다. 당사자는 WebSocket 프로토콜에 전적으로 의존합니다. 더 이상 HTTP/HTTPS 프로토콜에 의존하지 않습니다. 따라서 WebSocket 프로토콜을 사용할 때는 기존의 웹 개발 제한 사항을 피하는 동시에 보안 및 안정성과 같은 문제에도 주의를 기울여야 합니다.

위 내용은 Nginx가 WebSocket 구성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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