31 Aralık 2017 Pazar

Nginx Socket.IO Reverse Proxy SSL

Merhaba arkadaşlar, bu yazımda birçok kere sorun olan sonunda istediğim kıvamda çözdüğüm Nginx NodeJS socket.io ve ssl configurasyonundan bahsetmek istiyorum. Ben her nereye yazılacaksa direk yazacağım buraya elimden geldiğince de açıklamaya çalışacağım.

Önce Nginxten başlayalım.

   ssl_certificate /etc/letsencrypt/live/siteadi.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/siteadi.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/siteadi.com/chain.pem;




                location /sckt {
                         proxy_pass https://dawnchat.com:6001;

                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection 'upgrade';
                        proxy_set_header Host $host;
                        proxy_set_header 'Access-Control-Allow-Origin' '*';
                        proxy_cache_bypass $http_upgrade;

                }


Bu kısım olduğu gibi serverin icinde. Ben tarayıcıya /sckt yazınca socket.io ya baglansın istiyorum. O yüzden içeride bir reverse proxy yaptım bu şekilde.



Gelelim NodeJS kısmına.
SSL konfigurasyonu farklı gibi gorunuyor ama aynı dosyaları alıyor siz öyle yaparsınız en azından ben örnek için bu şekilde yazdım hızlıca. Aşağıda gördüğünüz üzere benim node için seçtiğim port 6001 ama nginx tarafında reverse proxy yaptığım için 
https://siteadi.com/sckt/socket.io/?EIO=3&transport=polling&t=M2ktBqC 
tarzı bir url verdiğim zaman bana aşağıdaki gibi bir sonuç döndürmeli.
97:0{"sid":"bj1oeJOjjSHCmBpVAAAF","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000}

const protocol = 'https';const domain = 'dawnchat.com';
const timer = 5
const randomStr = require('randomstring');const request = require('request');
var fs = require('fs');var https = require('https');
var express = require('express');var app = express();
var options = {
    key: fs.readFileSync("/home/layfon/dawnchat.com/ws.server/privkey1.pem"),    cert: fs.readFileSync('/home/layfon/dawnchat.com/ws.server/cert1.pem'),    ca: fs.readFileSync('/home/layfon/dawnchat.com/ws.server/fullchain1.pem'),    requestCert: true,    rejectUnauthorized: false};
var server = https.createServer(options, app);
server.listen(6001, function() {
    console.log('Secure server running on port 6001')
})
var io = require('socket.io').listen(server,{path:"/sckt"});

Gelelim client tarayıcı tarafına. Tarayıcının socket.ioya baglanacağı kısma path olarak aynı nodejsdeki gibi bir option eklerseniz o da sorunsuz bir şekilde bağlanacaktır.

io("",{path:"/sckt/socket.io"})

Sorusu olaranlar buradan yorum yazabilir veya hello et veyselsahin.com.tr adresinden bana ulaşabilir. Herkese bol kodlamalı güzel günler dilerim.
Share: