Gå til innhold

Problem med samspill mellom reverse proxy og web-server


Anbefalte innlegg

Hei.

Jeg har konfigurert en Linux Ubuntu server med Nginx som reverse proxy og satt opp en Go web-server hvor jeg tenker å kjøre en Vue.js frontend. Har satt opp IP-en på serveren mot et domene via DNS.

Problemet er som følger; når jeg besøker IP-en så blir jeg videresendt til domenet med SSL-kryptering, men 502 error. Når jeg går til IP:PORT så kommer jeg til Go-serveren uten SSL.

Jeg har klødd meg i hue i for mange timer nå og må krype til korset å be om hjelp.

 

NGINX reverse proxy oppsett:

server {
   listen 80;
   server_name www.xxx.zzz xxx.zzz;
   return 301 https://www.xxx.zzz$request_uri;
 }

server {
   listen 443 ssl;
   server_name www.xxx.zzz xxx.zzz;
   ssl_certificate  /etc/letsencrypt/live/xxx/fullchain.pem;
   ssl_certificate_key  /etc/letsencrypt/live/xxx/privkey.pem;
   ssl_prefer_server_ciphers on;
   ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

   location / {
        proxy_pass https://xxx.xxx.xx.xx:8080;

        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
        }
}

Go-servern

package main

import (
        "fmt"
        "net/http"
)

func main() {
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                fmt.Fprintf(w, "Testing")
        })

        http.ListenAndServe(":8080", nil)
}

 

Setter pris på all hjelp.


 

 

Lenke til kommentar
Videoannonse
Annonse

Har du riktig IP på proxy_pass? Skjønner ikke hvorfor du har maskert den, det skal være en intern IP og det gjør ingenting om andre får vite den. 

Det skal også være http på proxy_pass og ikke https. 

Har du satt opp CNAME hos din DNS tilbyder? 

Har du åpnet port 443 på routeren? 

  • Hjerte 1
Lenke til kommentar

Jepp, har skrevet IP til server der, har også prøvd med localhost og intern IP uten hell. Har også prøvd både http og https.
Nei, har ikke satt opp CNAME, kun A-oppføringer. Hva skulle den bli satt til isåfall?
443 er åpen.

Endret av mr_h4sh
Lenke til kommentar

Ser også du bruker let's encrypt. Du må sette opp subdomene som du setter som CNAME i let's encrypt oppsettet ditt også. Evt wildcard er jo det beste. Så må du sjekke let's encrypt loggen at sub domenet ditt blir validert. 

 

Lenke til kommentar
8 minutes ago, strike_ said:

A record peker kun mot IP. Du må sette opp CNAME som peker mot domenet ditt. Ser du har www som subdomene så akkurat i det her tilfellet så blir www CNAME om du skal bruke www

Så lenge A recordene peker på samme IP så må man ikke bruke et CNAME, det gjør å oppdatere IPen lettere i fremtiden, men er ikke noe man må gjøre.

 

Hva sier NGINX loggene på serveren?

Lenke til kommentar

Kunne gitt deg ett eksempel på nginx config, men er på mobilen i senga så får evt ta det i mårra om du ikke kommer noen vei. 

2 minutes ago, xaco said:

Så lenge A recordene peker på samme IP så må man ikke bruke et CNAME, det gjør å oppdatere IPen lettere i fremtiden, men er ikke noe man må gjøre.

 

Hva sier NGINX loggene på serveren?

Da må man jo bruke IP i nginx configen også vel? Han har jo ingenting som peker mot www på domenet sitt om han ikke har satt opp www som CNAME som peker mot domenet. 

Lenke til kommentar
1 minute ago, strike_ said:

Da må man jo bruke IP i nginx configen også vel? Han har jo ingenting som peker mot www på domenet sitt om han ikke har satt opp www som CNAME som peker mot domenet. 

www kan fint være et A record også. Men problemet her er nok ikke DNS. Da hadde ikke trådstarter fått en 502 tilbake fra NGINX.

  • Liker 1
Lenke til kommentar
1 minute ago, xaco said:

www kan fint være et A record også. Men problemet her er nok ikke DNS. Da hadde ikke trådstarter fått en 502 tilbake fra NGINX.

Nei, A record peker kun mot IP så du får ikke satt www som A record. Det får hvertfall ikke jeg gjort hos cloudflare 

Lenke til kommentar
4 minutes ago, strike_ said:

Nei, A record peker kun mot IP så du får ikke satt www som A record. Det får hvertfall ikke jeg gjort hos cloudflare 

Har 3 A-records, 1 mot www, 1 mot blank og 1 mot wildcard. Så trodde ikke det var bruk for CNAME, og ser ikke helt hvordan det skal løse det. Nginx viderefører jo IP-en til domenet smertefritt. Begynner å lure på om problemet ligger i GO-servern.

Lenke til kommentar
1 minute ago, strike_ said:

Nei, A record peker kun mot IP så du får ikke satt www som A record. Det får hvertfall ikke jeg gjort hos cloudflare 

Ja, jeg vet at et A record er en ipv4 adresse. Og jo, du kan fint sette et subdomene sitt A record til å peke på en hvilken som helst ip adresse du vil. www er et subdomene på samme måre som sub1.example.com er et subdomene. At Cloudflare ikke lar deg gjøre det betyr ikke at resten av verden ikke lar deg det. Og her har har jo trådstarter satt A records for det subdomene.

@mr_h4sh hva sier nginx loggene dine?

  • Liker 1
Lenke til kommentar
1 minute ago, xaco said:

Ja, jeg vet at et A record er en ipv4 adresse. Og jo, du kan fint sette et subdomene sitt A record til å peke på en hvilken som helst ip adresse du vil. www er et subdomene på samme måre som sub1.example.com er et subdomene. At Cloudflare ikke lar deg gjøre det betyr ikke at resten av verden ikke lar deg det. Og her har har jo trådstarter satt A records for det subdomene.

@mr_h4sh hva sier nginx loggene dine?

2023/06/25 01:59:15 [error] 3029#3029: *1 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: xxx.xxx.xxx.xx, server: www.zzz.yyy, request: "GET / HTTP/1.1", upstream: "https://xxx.xxx.xxx.xx:8080/", host: "www.zzz.yyy"

Lenke til kommentar
Just now, mr_h4sh said:

2023/06/25 01:59:15 [error] 3029#3029: *1 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: xxx.xxx.xxx.xx, server: www.zzz.yyy, request: "GET / HTTP/1.1", upstream: "https://xxx.xxx.xxx.xx:8080/", host: "www.zzz.yyy"

Her klager jo nginx på ssl handshake feiler fordi du prøver å koble til med https mot den go serveren din. Kjør mot http og se hva loggene spytter ut da.

  • Liker 1
Lenke til kommentar
11 minutes ago, xaco said:

Ja, jeg vet at et A record er en ipv4 adresse. Og jo, du kan fint sette et subdomene sitt A record til å peke på en hvilken som helst ip adresse du vil. www er et subdomene på samme måre som sub1.example.com er et subdomene. At Cloudflare ikke lar deg gjøre det betyr ikke at resten av verden ikke lar deg det. Og her har har jo trådstarter satt A records for det subdomene.

@mr_h4sh hva sier nginx loggene dine?

Du mente sånn ja, men det er jo en dum måte å gjøre det på. Da må du jo drive å oppdatere IP hele tiden på alle subdomner. Riktig måte å gjøre det på et å ha ett A record som peker mot example.com så lager man CNAME for alle subdomener som peker mot example.com. Da er det kun 1 A record som trenger å oppdateres som man selfølgelig bruker en automatisk "dns updater" til. Om man skal drive å manuelt oppdatere alle A records blir jo det et rent helvete om man har mange.

Lenke til kommentar
45 minutes ago, strike_ said:

Du mente sånn ja, men det er jo en dum måte å gjøre det på. Da må du jo drive å oppdatere IP hele tiden på alle subdomner. Riktig måte å gjøre det på et å ha ett A record som peker mot example.com så lager man CNAME for alle subdomener som peker mot example.com. Da er det kun 1 A record som trenger å oppdateres som man selfølgelig bruker en automatisk "dns updater" til. Om man skal drive å manuelt oppdatere alle A records blir jo det et rent helvete om man har mange.

Kommer vel an på om man bruker vanlig DNS eller DNSSEC.

Endret av mr_h4sh
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...