Adding SSL via NGINX
This section will guide you through setting up SSL via NGINX so you can query the SuperTokens Core with a secure connection.
important
- This guide assumes you have already installed NGINX on your server.
- For the example given below we will be running the SuperTokens core on domain
localhost
and port3567
#
1. Reverse Proxy the SuperTokens Core with NGINXThe SuperTokens core does not support SSL so we need to use NGINX as a reverse proxy to setup a secure connection.
We can start by opening the default NGINX site config file in a code editor. This file can be found at :
- Linux:
/etc/nginx/sites-available/default
. - Mac:
/usr/local/etc/nginx/sites-available/default
. - Windows:
C:\nginx\conf\nginx.conf
.
In the config you want to scroll down to the server
directive.
By default it should look like this:
/etc/nginx/sites-available/defaultserver { listen 80; server_name localhost; ...}
We can now configure the
server
directive by adding thelocation
directive with the following values:/etc/nginx/sites-available/defaultserver { listen 80; server_name localhost; location / { proxy_pass http://localhost:3567; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }}
The location
directive tells NGINX what to do with the incoming request, proxy_pass
will point the redirect to localhost:3567
You can now test and apply the changes to the NGINX by running the following command:
nginx -t && service nginx restart
We can use the /hello
api of the SuperTokens core to test the connection.
Navigate to http://localhost/hello
and check if it gives a valid response from the core.
#
2. Setting up SSLWe now need to obtain a digital certificate to enable a secure connection with a users browser.
We are going to be using a self signed certificates since we are developing locally, but, you can also use a certificate autorities like Let's Encrypt to generate valid certificates.
Run the following command to generate a self signed certificate using OpenSSL:
openssl req -x509 -nodes newkey rsa:2048 -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt
You can set the values
ssl_certificate
andssl_certificate_key
in the NGINX config to specify the locations of the newly generated certificates./etc/nginx/sites-available/defaultserver { listen 80; listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }}
Run the test and resetart commands to test and apply your changes:
nginx -t && service nginx restart