Run the RPKI Validator UI and API behind an nginx proxy - RIPE-NCC/rpki-validator-3 GitHub Wiki

Minimalistic example to use Nginx as a proxy to the RPKI Validator
Allowing to use Nginx for handling HTTP/HTTPS, and using basic authentication
to disallow unauthenticated updates.

Install Nginx on Centos: (Skip if you already have Nginx installed)

sudo yum install -y epel-release
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

HTTP example

location / {

    limit_except GET HEAD {
      auth_basic 'Private property';
      auth_basic_user_file /etc/nginx/.htpasswd;
    }

    proxy_pass_request_headers on;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_pass http://localhost:8080;

}

The location can be added on any virtual host in Nginx, or if the server is using only RPKI you can replace nginx.conf location.


Install LetsEncrypt with Centos (Skip if you already have SSL certificate)

sudo yum install epel-release
sudo yum install certbot-nginx
certbot --nginx -d rpki.example.com

Don't forget to add LetsEncrypt to automated renewal of certificate.

crontab -e
15 3 * * * /usr/bin/certbot renew --quiet

HTTPS example using LetsEncrypt with domain

server {
    server_name rpki.example.com; # managed by Certbot
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
            limit_except GET HEAD {
              auth_basic 'Private property';
              auth_basic_user_file /etc/nginx/.htpasswd;
            }

            proxy_pass_request_headers on;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_pass http://localhost:8080;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/rpki.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/rpki.example.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 = rpki.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen       80 ;
    listen       [::]:80 ;
    server_name rpki.example.com;
    return 404; # managed by Certbot
}

The HTTPS version will allow only https connections to the server, and any http requests will be redirected to HTTPS.


Creating a password protection file /etc/nginx/.htpasswd

htpasswd -c /etc/nginx/.htpasswd youruser
#SETSOMEHARDPASSWORD