Https teveel doorverwijzingen (nginx-ssl voor Varnish cache)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09 17:01
Hi all,

Ik heb een serverser setup gemaakt met 1 "loadbalancer" (die draait Varnish met round-robin) met daar achter twee Nginx nodes. De Nginx nodes draaien intern netwerk op poort 8080 en de Varnish server op poort 80. Laatstgenoemde is het entrypoint voor verbindingen vanuit buiten. Op die zelfde server draait ook een Nginx applicatie op poort 443 die het SSL verkeer opvangt met een proxy_pass naar zichzelf op poort 80 (http://127.0.0.1:80; ).

Als ik nu een ssl certificaat installeer en een site over https aanroep, dan krijg ik een browser error die aangeeft dat er teveel doorverwijzingen zijn. In de Nginx logs op de nodes zie ik heel veel requests in de access.log voorbij komen. Het verkeer beeikt de nodes dus wel, maar blijkbaar zit er ergens een loop :?. Wie kan me helpen??

Paar stukjes uit de config files:

Nginx (loadbalancer):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {

        listen 443 ssl;

        server_name url.nl;

        ssl on;
        ssl_certificate /etc/nginx/ssl/url.pem;
        ssl_certificate_key /etc/nginx/ssl/url.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;


        location / {
            proxy_pass http://127.0.0.1:80;
            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 https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }
}


Varnish config:
code:
1
2
3
4
5
6
7
8
# Port 8080 Backend Servers
backend node01 { .host = "192.168.1.11"; .port = "8080"; .probe = { .url = "/"; .interval = 10s; .timeout = 1s; .window = 5;.threshold = 3; }}
backend node02 { .host = "192.168.1.12"; .port = "8080"; .probe = { .url = "/"; .interval = 10s; .timeout = 1s; .window = 5;.threshold = 3; }}

director default_director round-robin {
    { .backend = node01; }
    { .backend = node02; }
}

Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 13:50

Blokker_1999

Full steam ahead

Kan je de Nginx config van 1 van je nodes op 8080 ook eens posten? Het feit dat de request in hun acces.log zichtbaar is toont aan dat zij die request terug bouncen naar ergens anders.

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09 17:01
Blokker_1999 schreef op zondag 15 november 2015 @ 19:39:
Kan je de Nginx config van 1 van je nodes op 8080 ook eens posten? Het feit dat de request in hun acces.log zichtbaar is toont aan dat zij die request terug bouncen naar ergens anders.
Ja, natuurlijk! Alstublieft..

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
 listen  8080;

        index index.html index.php index.htm;

location ~ /\.ht { deny all; }

location / {
                try_files $uri $uri/ /index.php?$args ;
        }

add_header Access-Control-Allow-Headers "X-Requested-With";
        add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS";
        add_header Access-Control-Allow-Origin "*";


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server{

server_name url;

root /home/url;

include /etc/nginx/default-config.new.conf;

        location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9123;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

}

Acties:
  • 0 Henk 'm!

  • Ravefiend
  • Registratie: September 2002
  • Laatst online: 09:12

Ravefiend

Carpe diem!

En wat zit er precies in /etc/nginx/default-config.new.conf ?

Acties:
  • 0 Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 16:21

samo

yo/wassup

Dit komt doordat het verkeer achter je loadbalancer nooit https is - de loadbalancer offloadt het. Daardoor zal de applicatie nooit een HTTPS-verzoek binnenkrijgen.

Je kan het forceren verhuizen naar de loadbalancer of kijken naar alternatieve headers waar je applicatie naar moet kijken.

Zo werkte mijn WP pas achter https nadat ik
fastcgi_param HTTPS on;

had toegevoegd

[ Voor 14% gewijzigd door samo op 15-11-2015 20:35 ]

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 16:13

Kees

Serveradmin / BOFH / DoC
Als de server je redirect naar https dan zul je de server moeten vertellen dat hij via https verbonden is, want de server kan dat zelf niet meer achterhalen.

Ikzelf doe dat door de ssl-terminator een extra header te laten zetten 'X-https-proxy' oid in de request naar de backends. Deze backends checken vervolgens of die header er is, en als dat het geval is dan faken ze naar PHP toe dat de site via https loopt op eenzelfde manier als samo doet.

In jouw geval is dat niet eens nodig en kun je de backend servers altijd laten weten dat ze via https verbonden zijn als je de redirect in varnish doet. bijvoorbeeld
code:
1
2
3
4
5
6
7
8
9
10
11
12
sub vcl_recv {
  if (client.ip != '127.0.0.1') {
    set req.http.x-new-location = 'https://' + req.http.host + req.url;
    error 750 "Moved Permanently";
  }
}
sub vcl_error {
  if (obj.status == 750) {
    set obj.http.Location = req.http.x-new-location;
    return(deliver)
  }
}

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan

Pagina: 1