Bir Node.js Socket.IO WebSocket'e bağlanacak bir web sitesi oluşturuyorum. Bu düğüm sunucusu, 4923 numaralı bağlantı noktasında çalışıyor ve Socket.IO düğümü, uç noktada yapılandırıldı /socket
. Üzerinden bağlanmak istemiyorum, https://domain1.com:4932/socket
bunun yerine https://domain1.com/socket.io
Apache Sunucuma hangi noktadan bağlanmak istiyorum . Güvenlik duvarı, engellemek için 4932 numaralı bağlantı noktasını engeller https://domain1.com:4932/socket
.
Apache Sunucusu, SSL dahil olmak https://domain1.com/socket.io
üzere tüm bağlantılarda proxy yapmalıdır https://localhost:4932/socket
. SSL sertifikası, Let's Encrypt tarafından sağlanan bir sertifikadır.
Yeni bir bağlantı oluşturulduğunda Apache ve Node.JS sunucuları arasındaki SSL anlaşması başarısız olur.
Web sitem trafiği, Tam evrensel SSL etkinken Cloudflare'den geçiyor.
Apache sanal konağında aşağıdaki yapılandırmaya sahibim:
<VirtualHost *:443>
...
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/letsencrypt/live/domain1.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain1.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
# Handle wss proxy connections
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:4923/$1 [P,L]
# Autogenerated ProxyPass
ProxyPass /socket.io http://localhost:4923/socket
ProxyPassReverse /socket.io http://localhost:4923/socket
...
</VirtualHost>
HTTPS aracılığıyla node.js sunucum:
const port = 4923;
const fs = require('fs');
var options = {
key: fs.readFileSync('/etc/letsencrypt/live/domain1.com/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/domain1.com/fullchain.pem'),
};
var app = require('https').createServer(options);
var io = require('socket.io')(app, {
path: '/socket',
serveClient: false,
pingInterval: 10000,
pingTimeout: 5000,
cookie: false
});
app.listen(port);
io.httpServer.on('listening', function () {
console.log("Listening on", port);
});
io.on('connect', (socket) => {
console.log("Socket connected: " + socket.id);
socket.on('disconnect', () => {
console.log("Socket disconnected: " + socket.id);
});
socket.on('download-request', (id) => {
onDownloadRequest(socket, id);
});
});
function onDownloadRequest(socket, id) {
console.log("Request from " + socket.id + " and video id: " + id);
}
Bu arada, istemci tarafında, pencere yüklemesinde yeni bir WebSocket bağlantısı oluşturuyorum ve ardından bir düğmeye tıklandığında mesajı gönderiyorum.
...
const websocketOptions = {
server : {
protocol : 'https://',
host : 'domain1.com',
port : 443,
endpoint : '/socket.io'
}
};
function requestDownload() {
if (isAnySelected() || socket !== null) {
console.log(document.getElementsByClassName("download-input-box")[0].value);
socket.emit('download-request', {id: document.getElementsByClassName("download-input-box")[0].value});
}
}
function createConnection() {
console.log("Creating websocket connection!");
socket = io.connect(websocketOptions.server.protocol
+ websocketOptions.server.host
+ ':'
+ websocketOptions.server.port
+ websocketOptions.server.endpoint,
{transport: 'websocket'});
}
function onWindowLoad() {
createConnection();
}
window.onload = onWindowLoad;
Bu, bir yanıt kodu 500 ve apache hata günlüğünde şu hata mesajıyla sonuçlanır:
AH00898: Error during SSL Handshake with remote server returned by /socket.io/, referer: https://domain1.com/
Neyi yanlış yapıyorum? Herhangi bir yardım takdir edilmektedir.
DÜZENLE:
Artık SSL anlaşması sorunu çözüldüğüne göre, bana yeni bir sorun oluyor. Buradan görüntüleyebilirsiniz .
"Localhost" u SSL edemezsiniz, bu nedenle üç seçenek vardır:
SSL talep edebileceğiniz bir alan adı kullanın
HTTP ile "localhost" kullanın (s değil)
SSL ile "localhost" kullanın, ancak Apache2 yapılandırmasında "SSLProxyCheckPeerName" i devre dışı bırakın. ( Bu referansa bakın )
SSLProxyCheckPeerName kapalı
Jana Duggar, aşkı arayışı konusunda açıktı. İşte konu hakkında söylediği her şey ve beş yıllık evlilik penceresi.
Outlander'ın yıldızı Sam Heughan kısa süre önce kendisini yıldız yapan rol olan Jamie Fraser'ı hatırlamak için setten ne alacağını açıkladı.
'She Loves You' bir saatte yazıldı, bir günde kaydedildi ve kariyerlerinin en iyi performanslarından birine sahip The Beatles şarkısı oldu.
Dolly Parton ve büyükannesi Bessie'nin özel bir ilişkisi vardı. Büyükanne Parton çok hastaydı ama bu Dolly'nin ona şaka yapmasını engellemedi.
Savana (bazen yanlışlıkla "Savannah" olarak yazılır, Georgia eyaletindedir) otlaklar ve asgari ağaç yoğunluğuna sahip bir Afrika bölgesini tanımlar. Bu geniş açık alan, her hayvanın içgüdülerinin ve benzersiz evrimsel becerilerinin test edildiği bir tiyatroya dönüşür.
Hiç belirli bir planınız olmadığı ve işleri ilerledikçe çözmeniz gereken bir durumda kaldınız mı? İşte o zaman "duruma göre oynamaya" karar verebilirsiniz.
Nesnel ve öznel düşünceyi kavramak için, her bir akıl yürütme türünü benzersiz kılan şeyin ne olduğunu anlamak çok önemlidir. Öznel bilgi, belirli bir konu hakkındaki kişisel görüşlere veya duygulara dayanır. Buna karşılık, nesnel bilgi gerçek, veri tabanlı ve tarafsızdır.
Hava durumu tartışılırken, nem sürekli bir sohbet ve şaşkınlık konusudur, özellikle de o nemli yaz aylarında. İnsanlar, "En azından kuru bir sıcak," dediklerinde, bu sadece "Oh! En azından nemli değil!" demenin başka bir yoludur.
“Children”dan ünlü bir konuk oyuncu ve bazı yıkıcı haberler yayınlanıyor
Bu RAV4'ün mükemmel durumda olduğu ve sandalye oyununa hazır olduğu iddia ediliyor.
İtfaiye ekiplerinin yangını söndürmeye çalıştığı görüntüler drone ile görüntülendi.
Eyes of Wakanda doğrudan MCU'ya bağlanıyor ve ayrıca X-Men '97, What If..., Daredevil ve daha fazlasıyla ilgili güncellemeler sunuyor.
'Laguna Beach', 2000'lerin ortalarında lise öğrencileri Lauren Conrad, Kristin Cavallari, Stephen Colletti ve daha fazlasının hayatlarını takip ediyordu. İşte MTV gerçeklik dizisinin oyuncu kadrosunun şu anki hali.
Ava Gardner, Mickey Rooney ve Frank Sintra ile evlenecekti ve birkaç Hollywood yıldızıyla daha çıktı. İşte Ava Gardner'ın çıkma geçmişine bir bakış.
John Cleese, eşi Jennifer Wade ile 2012 yılında evlendi. John Cleese'in eşi Jennifer Wade hakkında bilmeniz gereken her şey burada.
Michael C. Hall, 2016 yılından bu yana eşi Morgan Macgregor ile evli. Michael C. Hall'un eşi hakkında bilmeniz gereken her şey burada.
Çoğu zaman olduğu gibi birdenbire gözüme çarpıyor Her şey yeniden yarı yolda <Hayır, Pasifik'te kesip attığınız değil, karnavalda olan> Her manşet yüksek sesle… ..
2022'de GPT-3'ün piyasaya sürülmesiyle yazma becerisinin önemi azalmış gibi görünüyor. AI ile, zayıf yazıya sahip kişiler de kaliteli personel oluşturabilir.
Günümüzün hızlı tempolu ve rekabetçi dünyasında, kişinin kariyeri kişisel gelişim, finansal istikrar ve genel yaşam memnuniyetinde önemli bir rol oynamaktadır. Bununla birlikte, birçok kişi profesyonel yaşamlarında giderek tükenmekte olan amansız bir durgunluk ve tatminsizlik döngüsüne kapılmış durumda.
Geçen hafta PressGazette (İngiliz medya haber sitesi) aracılığıyla gönderilen bir basın bildirisi fark ettim. Makale, Scandi podcast barındırma ve reklamcılık şirketi Acast'ın podcasting alanında "muhtemelen en etkili" yayıncılardan oluşan bir konsorsiyuma liderlik edeceğini duyurdu.