Rumah >Operasi dan penyelenggaraan >Apache >Bagaimanakah saya mengkonfigurasi Apache untuk proxying websocket menggunakan mod_proxy_wstunnel?
Butiran artikel ini mengkonfigurasi mod_proxy_wstunnel Apache untuk proxying WebSocket. Ia meliputi modul yang membolehkan, konfigurasi tuan rumah maya menggunakan proxypass/proxypassreverse, penyelesaian masalah (log, rangkaian, konfigurasi), mengendalikan protokol WS/WSS, dan Sec
Mengkonfigurasi Apache untuk Proxying WebSocket dengan mod_proxy_wstunnel
melibatkan beberapa langkah. Pertama, pastikan anda mempunyai modul yang diperlukan. Ini biasanya melibatkan uncommenting garis mod_proxy_wstunnel
dalam fail konfigurasi Apache anda (biasanya terletak di /etc/apache2/mods-available/proxy_wstunnel.load
atau laluan yang sama, bergantung kepada sistem operasi anda). Selepas tidak menentu, anda perlu mengaktifkan modul menggunakan a2enmod proxy_wstunnel
dan kemudian mulakan semula Apache ( sudo systemctl restart apache2
pada Sistem Debian/Ubuntu, sebagai contoh).
Seterusnya, anda perlu mengkonfigurasi bahagian hos maya atau proksi dalam fail konfigurasi Apache anda. Konfigurasi ini akan menentukan bagaimana Apache mengendalikan sambungan WebSocket yang masuk dan meneruskannya ke pelayan WebSocket backend anda. Berikut adalah contoh coretan konfigurasi:
<code class="apache"><virtualhost> ServerName example.com ProxyPreserveHost On <proxy> Order deny,allow Allow from all </proxy> ProxyPass /ws wss://backend.example.com:8080/ws ProxyPassReverse /ws wss://backend.example.com:8080/ws RequestHeader set Upgrade websocket RequestHeader set Connection Upgrade </virtualhost></code>
Konfigurasi ini mengarahkan semua permintaan ke /ws
ke pelayan WebSocket backend di wss://backend.example.com:8080/ws
. ProxyPreserveHost On
memastikan pengepala tuan rumah asal pelanggan dipelihara. Arahan ProxyPass
dan ProxyPassReverse
adalah penting untuk proksing WebSocket yang betul. Arahan RequestHeader
menetapkan tajuk yang diperlukan untuk jabat tangan WebSocket. Ingat untuk menggantikan example.com
dan backend.example.com:8080
dengan nama domain dan nombor port sebenar anda. Selepas membuat perubahan ini, mulakan semula Apache untuk memohon konfigurasi baru.
Menyelesaikan masalah WebSocket Proxying masalah dengan mod_proxy_wstunnel
sering melibatkan memeriksa beberapa bidang utama:
/var/log/apache2/error.log
atau laluan yang sama) akan mengandungi maklumat yang berharga mengenai sebarang kesilapan yang dihadapi semasa proksi websocket. Periksa log ini untuk petunjuk mengenai kegagalan sambungan, kesilapan jabat tangan, atau masalah lain.ping
dan telnet
(atau nc
) untuk mengesahkan sambungan rangkaian dan kebolehcapaian pelabuhan. Semak firewall pada kedua -dua pelayan Apache dan pelayan backend untuk memastikan bahawa mereka tidak menghalang trafik websocket (port 80 dan 443 untuk WS dan WSS masing -masing).ProxyPass
dan ProxyPassReverse
, memastikan bahawa laluan dan URL adalah tepat. Tajuk yang dikonfigurasikan dengan salah juga boleh menyebabkan masalah.mod_proxy_wstunnel
yang dimuatkan dengan betul dan didayakan dalam konfigurasi Apache anda. Gunakan arahan apachectl -M
(atau setaraf) untuk mengesahkan bahawa modul disenaraikan. Ya, mod_proxy_wstunnel
boleh mengendalikan sambungan WebSocket ke atas kedua -dua WS (WebSocket Over Port 80) dan WSS (WebSocket melalui port 443, dijamin dengan SSL/TLS). Protokol (WS atau WSS) ditentukan oleh URL yang ditentukan dalam Arahan ProxyPass
dalam Konfigurasi Apache anda. Jika anda menggunakan ws://
dalam Arahan ProxyPass
, ia akan mengendalikan sambungan WS; Jika anda menggunakan wss://
, ia akan mengendalikan sambungan WSS. Pelayan backend juga mesti menyokong protokol yang sepadan.
Mengamankan proksi WebSocket anda dengan SSL/TLS melibatkan mengkonfigurasi Apache untuk menggunakan HTTPS untuk proksi. Ini memerlukan mendapatkan sijil SSL (contohnya, dari Let's Encrypt) dan mengkonfigurasi Apache untuk menggunakannya. Inilah contoh asas bagaimana melakukan ini:
<code class="apache"><virtualhost> ServerName example.com ProxyPreserveHost On SSLEngine on SSLCertificateFile /path/to/your/certificate.crt SSLCertificateKeyFile /path/to/your/private.key <proxy> Order deny,allow Allow from all </proxy> ProxyPass /ws wss://backend.example.com:8080/ws ProxyPassReverse /ws wss://backend.example.com:8080/ws RequestHeader set Upgrade websocket RequestHeader set Connection Upgrade </virtualhost></code>
Ganti /path/to/your/certificate.crt
dan /path/to/your/private.key
dengan laluan sebenar ke sijil SSL dan fail kunci peribadi anda. Anda mungkin perlu menyesuaikan laluan berdasarkan konfigurasi pelayan anda. Ingat bahawa pelayan backend juga harus dikonfigurasi untuk menerima sambungan WSS untuk komunikasi yang selamat. Pastikan pelayan Apache anda dikonfigurasikan untuk mendengar di port 443 dan peraturan firewall yang sesuai ada. Persediaan ini menetapkan sambungan selamat antara klien dan proksi Apache, dan kemudian sambungan selamat antara proksi dan pelayan backend. Anda mungkin perlu menambah arahan SSL tambahan bergantung kepada keperluan khusus dan keperluan keselamatan anda.
Atas ialah kandungan terperinci Bagaimanakah saya mengkonfigurasi Apache untuk proxying websocket menggunakan mod_proxy_wstunnel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!