lørdag den 28. januar 2017

Reverseproxy med nginx - part 2

Reverseproxy med nginx - part 2 - SSL og static content

I første del af denne guide, beskrev jeg, hvordan man sætter nginx op til at agere reverseproxy, hvis man har flere subdomæner, man ønsker at udstille. Nu vil jeg beskrive hvordan man får nginx til at servere https trafik og hvordan man lader sine applikationer servere dynamisk indhold, mens nginx tager sig af alt det statiske.

Vi starter med et eksempel på en konfiguration, der udstiller en service på port 443 (https), men som også tager mod forespørgsler på port 80 (http) og dirigerer dem til samme service på port 443.

server {
 listen 443 ssl;
 ssl_certificate /etc/letsencrypt/live/test.sysprog.dk/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/test.sysprog.dk/privkey.pem;
 server_name test.sysprog.dk;
 access_log /var/log/nginx.access.log;
 error_log /var/log/nginx_error.log debug;
 location / {
        include conf.d/proxy.conf;
        proxy_pass http://localhost:1337;
 }
}

server {
 listen 80;
 server_name test.sysprog.dk;
 return 301 https://$host$request_uri;
}

besøger man http://test.sysprog.dk, vil man få en http 301 og ryge videre til https://test.sysprog.dk, som er en proxy til en service, der kører lokalt på port 1337 på serveren. Http servicen på port 1337 udstilles altså via https takket være nginx og certifikat-servicen letsencrypt: https://letsencrypt.org/

Static content

Lad os antage, at servicen på test.sysprog.dk er en Spring boot applikation, som også har noget statisk indhold, jeg ikke behøver belemre applikationen med at levere. Når jeg alligevel har sat en nginx op foran, kan jeg jo lade den klare sådan en opgave.

server {
 listen 443 ssl;
 ssl_certificate /etc/letsencrypt/live/test.sysprog.dk/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/test.sysprog.dk/privkey.pem;
 server_name test.sysprog.dk;
 access_log /var/log/nginx.access.log;
 error_log /var/log/nginx_error.log debug;
 location / {
        include conf.d/proxy.conf;
        proxy_pass https://localhost:8443;
 }
 location /assets {
     root /path/to/application/target/classes/static;
 }
}

server {
 listen 80;
 server_name test.sysprog.dk;
 return 301 https://$host$request_uri;
}


På denne måde vil alle requests til /assets/.... blive håndteret af nginx, som finder det statiske inhold i /path/to/application/target/classes/static

Ingen kommentarer:

Send en kommentar