Digitalocean, nginx ile düğüm https uygulamasını dağıtıyor

Sep 22 2020

Uygulamamı nginx kullanarak bir Digitalocean damlacığında çalıştırıyorum, uygulamamı http ile çalıştırırsam mükemmel çalıştığını, ancak https nginx ile çalıştırdığımda bana 502 BAD GATEWAYdiğer digitalocean kılavuzlarını denediğimi ve stackoverflow çevresinde arama yaptığımı öğrendim. çözümü buldum, bu yüzden bu yazıyı yapmayı düşündüm.

NGINX VARSAYILAN DOSYA:

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name mydomain.io www.mydomain.io;

        ssl_certificate /home/myapp/ssl/myapp.crt;
        ssl_certificate_key /home/myapp/ssl/myapp.key;

        location / {
                proxy_pass http://localhost:3000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}

UYGULAMA KODUM:

const express = require("express");
//const http = require('http');
const https = require('https');
const helmet = require("helmet");
const cors = require("cors");
const fs = require("fs");
const path = require("path");
const app = express();
const config = require("./config");
const passport = require("passport");
const credentials = { key: fs.readFileSync('ssl/myapp.key', 'utf-8'), cert: fs.readFileSync('ssl/myapp.crt', 'utf-8'), ca: fs.readFileSync('ssl/myapp.ca-bundle', 'utf-8') };

app.use(helmet());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(
  require("express-session")({
    secret: require("./config.json").app.secretKey,
    resave: false,
    saveUninitialized: true,
    cookie: {
      secure: false,
      maxAge: 60 * 60 * 1000 * 24 * 365,
    },
  })
);

app.use(passport.initialize());
app.use(passport.session());
passport.use(require("./service/passport"));

app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.use(express.static(path.join(__dirname, "views")));

app.use('/', require('./api/home'));
app.use("/auth", require("./api/auth"));
app.use("/user", require("./api/user"));

app.get('/tos',(req,res)=>{
  res.render('tos');
});


//var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

httpsServer.listen(config.app.port,'localhost',()=>{
        console.log("App started on port:"+config.app.port);
});

Nginx'te yeniyim, birisi bunun nasıl yapılacağını açıklayabilir mi?

Yanıtlar

3 Bharath Sep 30 2020 at 17:08

Uygulama Kodunuz HTTPS kullanılarak çalışıyor, NGINX ise proxy_pass http: // localhost: 3000 kullanıyor.

Sorunu düzeltmenin iki yolu vardır:

  1. Proxy_pass'ı https: // localhost: 3000 ile güncelleyin ve NGINX'i yeniden başlatın
  2. APP düzeyinde HTTPS yerine HTTP kullanın ve uygulamayı yeniden başlatın

Herhangi bir seçenek sorunu çözecektir, en az çaba birinci seçeneği kullanmak olacaktır.

2 architjn Sep 29 2020 at 09:48

80 üzerinde node.js uygulamalarını çalıştıran birden fazla sunucum var ve 443 mükemmel derecede iyi.

Kullandığım yapılandırmayı kullanmanızı tercih edeceğim.

server {
    server_name yourdomain.com;
    proxy_buffering off;
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host; proxy_cache_bypass $http_upgrade;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = yourdomain.com) { return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 0.0.0.0:80;
    server_name yourdomain.com;
    return 404; # managed by Certbot
}

SSL sertifikalarım için ağırlıklı olarak Certbot kullanıyorum, istediğiniz her şeyi kullanabilirsiniz!

1 vitalyster Oct 01 2020 at 09:31

Uygulamada hiçbir şeyi değiştirmenize ve HTTP kullanmaya devam etmenize gerek yoktur, Nginx https isteklerini sunacak ve HTTP'yi uygulamanıza yönlendirecektir.