Nodejs https server ssl url ile nasıl çalışır?

Nodejs projemizi https yani ssl olan urlde nasıl çalıştırabileceğimizi node js ssl oluşturarak hem http ip urlinde hemde ssl domain url adresimizde kullanacağız.

Bir önceki konumuzda Php ve Socket.io kullanarak Real Time haberleşme işlemiştik. Fakat http server üzerinde sunucuda çalıştırdık.

Peki sorun ne? biz http server yani bir ip üzerinde çalıştırdık sunucuda fakat sitemizi ssl kullanıyorsak şunun gibi hata alırız: "the page at '' was loaded over https, but requested an insecure xmlhttprequest endpoint ''. this request has been blocked; the content must be served over https."

Şimdi ise bu hatayı gidererek sunucumuz üzerinde var olan ssl koruması altındaki sitemizde nodejs https server kurarak çalışmasını sağlayacağız. Hazırsanız başlayalım!

Nodejs ile ssl certifikası oluşturma

Sunucuda projemizin bulunduğu klasore gidelim ve orada terminalden ssl oluşturma kodlarımızı yazalım:

  cd projemizinklasoradi

  openssl req -new -newkey rsa:2048 -nodes -keyout ismailgultekin.com.key -out ismailgultekin.com.csr
  openssl x509 -req -days 365 -in ismailgultekin.com.csr -signkey ismailgultekin.com.key -out ismailgultekin.com.crt

3 adet csr,crt ve key dosyalarımızın oluştuğunu göreceksiniz. Şimdi sıra geldi nodejs https server dosyamızı oluşturmaya.

Nodejs https server oluşturma

Proje klasörümüz içinde server.js adında bir dosya oluşturalım ve içine https serverımızın kodlarını yazarak nodejs dosyamızı çalıştıralım.

  var https = require('https');
  var fs = require('fs');

  var options = {
    key: fs.readFileSync('siteadiniz.com.key'),
    cert: fs.readFileSync('siteadiniz.com.crt')
  };

  https.createServer(options, function (req, res) {
    res.writeHead(200);
    res.end("Node.js HTTPS Server Kuruldu");
  }).listen(8443);

Şimdi server.js dosyamızı terminalden çalıştıralım. Kodumuz:

  node server.js

Çalışıp çalışmadığını https://siteadiniz.com:8443 portu ile urlde yazarak deneyelim. Açılan sayfada "Node.js HTTPS Server Kuruldu" yazıyorsa işlem başarılır.

nodejs https server

 

Şuanda bende tarayıcıdan kontrol ettiğimde https://ismailgultekin.com:8443/ HTTPS Server Kuruldu yazıyor. Harika işlem tamamdır.

Şimdi hem http, hemde http ile ayrı portlarda nodejs servırımızı çalıştıralım.

Nodejs Server HTTP ve HTTPS çalıştırma

Buradaki amacımız şu hem ssl https girilerek çalışan nodejs serverımız aynı anda http ile girildiğinde de çalışıyor olmasını sağlamak. server.js Kodumuz:

  const fs           = require('fs')
  const http         = require('http');
  const https        = require('https');
  const httpPort     = 8442;
  const httpsPort    = 8443;

  const CORS_fn = (req, res) => {
      res.setHeader( "Access-Control-Allow-Origin"     , "*"    );
      res.setHeader( "Access-Control-Allow-Credentials", "true" );
      res.setHeader( "Access-Control-Allow-Methods"    , "*"    );
      res.setHeader( "Access-Control-Allow-Headers"    , "*"    );
      if ( req.method === "OPTIONS" ) {
          res.writeHead(200);
          res.end();
          return;
      }
  };


  var options = {
    key: fs.readFileSync('ismailgultekin.com.key'),
    cert: fs.readFileSync('ismailgultekin.com.crt')
  };

  const httpServer   = http.createServer((req, res) => {
    res.end('Server Kuruldu!');
  }, CORS_fn);

  const httpsServer = https.createServer(options, (req, res) => {
    res.writeHead(200);
    res.end("HTTPS Server Kuruldu");
  }, CORS_fn);

  httpServer.listen(httpPort);
  httpsServer.listen(httpsPort);

  const ioServer = require("socket.io");
  const io       = new ioServer();
  io.attach(httpServer);
  io.attach(httpsServer);

  io.sockets.on('connection', (socket) => {
    console.log('sockete birileri bağlandı.');

    //data send-message eventına veri geldiğinde messages eventına datayı emit ile göndersin
    socket.on('send-message', function(data){
        console.log("Server Dinliyor: ");
        console.log(data);

        //emit ile client gelen datayı gonderiyoruz
        io.emit('messages', data);
    });

    // socket bağlantısı sonlandığında burası çalışır
    socket.on('disconnect', function(){
        console.log('birileri geldi ve gitti.');
    });
  });

Socket.io kullanarak real time haberleşme

Projemizde socket.io kullarak nodejs serverımızla realtime haberleşme yaparak projemizin çalışıp çalışmadığınıda kontrol edelim. Bunun için index.html dosyası oluşturalım ve kodlarımızı yazalım.

  
  
  
  

  

İşlemler bu kadar sizde index.html dosyanızı tarayıcıda açtığınızda verilerin geldiğini görebiliyorsanız sorun yok demektir. Umarım faydalı bir anlatım olmuştur.

Nodejs https server ssl

 

Burada ne yaptık nodejs server'ımız ile html sayfamız arasında real time haberleşme sağladık. Umarım faydalı bir konu olmuştur.

Client Tarafı Canlı Demo
Projeyi indir Githup İndir

Görüş Hata Bildir

Güvenlik Kodunuz:

Yorum Yap

Yorum kodunuz:

0.0908