고성능 웹 서버이자 역방향 프록시 서버인 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!