RatChet PHP를 사용하는 메시징 시스템에 대한 튜토리얼을 따르려고 합니다. https://www.twilio.com/blog/create-php-websocket-server-build-real-time-even-driven-application 나는 일반적인 HTML 페이지를 가지고 있고 이를 일반 웹사이트로 제공해야 하는 example.com이라는 도메인을 가지고 있습니다. 메시징 시스템에는 8445라는 포트가 필요합니다.
그래서 우분투 22.04에 apache2를 설치했습니다. SSL 사이트를 암호화하면 제대로 작동합니다.
이제 웹소켓 서버를 설정하고 방화벽에서 TCP 포트 8445를 열었습니다.
활성화된 아파치 모듈
a2enmod 프록시 a2enmod Proxy_http a2enmod Proxy_wstunnel
원래 도메인을 example.com으로 교체했습니다.
내 conf 파일은 example.com.conf와 같습니다
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/public_html/logs/error.log
CustomLog /var/www/example.com/public_html/logs/access.log combined
ProxyRequests Off
ProxyPass / https://example.com:8445/
ProxyPassReverse / https://example.com:8445/
</VirtualHost>
그리고
example.com-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
SSLEngine On
SSLProxyEngine On
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/public_html/logs/error.log
CustomLog /var/www/example.com/public_html/logs/access.log combined
ProxyRequests Off
ProxyPass / wss://example.com:8445/
ProxyPassReverse / https://example.com:8445/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
<Location />
ProxyPassReverse /
Options FollowSymLinks
Require all granted
</Location>
</VirtualHost>
</IfModule>
연결하려고 하면 503 오류가 발생하고 Apache 로그에 다음과 같은 메시지가 표시됩니다.
[proxy_http:error] [pid 20090] [client 49.34.XX:55961] AH01114: HTTP: 백엔드에 연결하지 못했습니다: example.com [Sat Dec 03 16:47:04.378489 2022] [proxy:error] [pid 20091 ] (111)연결 거부됨: AH00957: wss: 45.33.XX:8445(example.com)에 연결 시도 실패
문제 해결에 도움을 줄 수 있는 사람이 있으면 알려주세요.
감사해요!
답변1
문제는 Apache 프록시가 포트 8445에서 백엔드 서버에 연결하지 못하는 것 같습니다. 이 문제를 해결하기 위해 확인할 수 있는 몇 가지 사항이 있습니다.
websocket 서버가 실행 중이고 포트 8445에서 수신 대기 중인지 확인하십시오. netstat 명령을 사용하여 이를 확인할 수 있습니다.
sudo netstat -tlnp | grep 8445
websocket 서버가 실행 중이면 다음과 같은 줄이 표시됩니다.
tcp 0 0 0.0.0.0:8445 0.0.0.0:* LISTEN <websocket server PID>/websocket
포트 8445에 대한 트래픽을 차단하는 방화벽이나 보안 그룹이 없는지 확인하십시오. 서버 자체에서 websocket 서버에 연결을 시도하여 이를 확인할 수 있습니다.
telnet localhost 8445
연결에 성공하면 빈 화면이 나타납니다. 연결이 거부되면 방화벽이나 보안 그룹에서 트래픽을 차단하고 있을 수 있습니다.
Websocket 서버가 Apache 프록시의 연결을 허용하도록 구성되었는지 확인하십시오. 사용 중인 웹소켓 서버에 따라 수신 대기할 특정 IP 주소나 호스트 이름을 설정하거나 Apache 서버의 IP 주소로부터의 연결을 허용하도록 ACL(액세스 제어 목록)을 구성하는 작업이 포함될 수 있습니다.
웹소켓 서버의 로그를 확인하여 연결이 거부되는 이유를 나타내는 오류 메시지가 있는지 확인하세요.