fredag den 13. januar 2017

Reverseproxy med nginx

Opsætning af nginx

Dette forudsætter at nginx er installeret på systemet. Guiden henvender sig til Debian baserede systemer, men vil også kunne anvendes på andre systemer; det er da ikke givet at stierne til konfigurationsfiler er ens.

Opret /etc/nginx/conf.d/proxy.conf med følgende indhold

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;

Denne fil kan nu inkluderes i andre konfigurationer, så man får sat headers på alle forwards fremover.

Opret /etc/nginx/conf.d/sub.domain.dk.conf (kald filen hvad du har lyst til) med følgende indhold:

server {
 listen 80;
 server_name sub.domain.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:3000;
 }
}

Linje for linje, betyder det, at vi lytter på port 80.
server_name beskriver at reglen skal gælde, når sub.domain.dk rammes.
Access og error log beskrives.
Definer en regel for location /
Her inkluderer jeg de generelle konfigurationer, der blev sat i proxy.conf
Derefter beskrives, hvor requests skal sendes hen

I de tilfælde, hvor man ønsker et login, før der redirected til en side, tilføjer man disse to linjer på en location:
  auth_basic "Restricted"; #For Basic Auth
  auth_basic_user_file /etc/nginx/.htpasswd;

Dette giver kun basic auth. Der er også ldap plugins og meget andet.
Opret en bruger i /etc/nginx/.htpasswd med htpasswd som kan findes i pakken "apache2-utils"

Eks:
  sudo htpasswd -c /etc/nginx/.htpasswd bruger1
  sudo htpasswd /etc/nginx/.htpasswd bruger2

På en location er der også mulighed for at sætte andre begrænsninger, som eks. antallet af samtidige forbindelser pr. IP, limit på bandwidth mm.

Nu har du oprettet et subdomæne, som forwardes til port 3000 på localhost. Man kan oprette flere ved at placere endnu en fil i conf.d mappen:

Opret /etc/nginx/conf.d/sub2.domain.dk.conf (kald filen hvad du har lyst til) med følgende indhold:

server {
 listen 80;
 server_name sub2.domain.dk;
 access_log /var/log/nginx.access.log;
 error_log /var/log/nginx_error.log debug;
 location / {
  include conf.d/proxy.conf;
  auth_basic "Restricted";

  auth_basic_user_file /etc/nginx/.htpasswd;
  proxy_pass http://localhost:3001;
 }
}

Nu har du oprettet endnu et subdomæne, som forwardes til port 3001 på localhost. Dette subdomæne kører med basic auth.