|
@@ -0,0 +1,47 @@
|
|
|
+# Serving an App with HTTPS encryption behind a Reverse Proxy (NGINX)
|
|
|
+
|
|
|
+This example shows how to serve NiceGUI with HTTPS encryption behind NGINX.
|
|
|
+For running the App under a Subpath, have a look at https://github.com/zauberzeug/nicegui/blob/main/examples/nginx_subpath.
|
|
|
+
|
|
|
+## Try Out
|
|
|
+
|
|
|
+1. Create the `certs/` directory:
|
|
|
+
|
|
|
+ ```bash
|
|
|
+ mkdir certs
|
|
|
+ ```
|
|
|
+
|
|
|
+2. Generate and self-sign SSL an certificate for `localhost`
|
|
|
+
|
|
|
+ ```bash
|
|
|
+ openssl req -x509 -out certs/localhost.crt -keyout certs/localhost.key -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' -extensions EXT -config <( printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
|
|
|
+ ```
|
|
|
+
|
|
|
+3. Run the containerized app
|
|
|
+
|
|
|
+ ```bash
|
|
|
+ docker compose up
|
|
|
+ ```
|
|
|
+
|
|
|
+4. Try to access http://localhost without the "s".
|
|
|
+ You will be automatically redirected to the https version.
|
|
|
+
|
|
|
+5. Depending on your browser, you should typically receive a warning that the certificate authority is invalid.
|
|
|
+ This is perfectly normal as we issued and self-signed a simple certificate for demo use locally.
|
|
|
+ So proceed anyway, e.g. on Chrome, click on `Advanced` > `Proceed to localhost (unsafe)`
|
|
|
+
|
|
|
+6. Note the Hello World message from the app accessed with encrypted connection
|
|
|
+
|
|
|
+## Deploy in production in your self-hosted NGINX
|
|
|
+
|
|
|
+- For production, you'll need your own domain and a proper SSL certificate issued by a recognized Certificate Authority (CA).
|
|
|
+ You can consider the free CA [Let's Encrypt](https://letsencrypt.org/) provided by the Internal Security Research Group, and use their [Certbox](https://certbot.eff.org/instructions) tool to generate the certicates for your own domain.
|
|
|
+
|
|
|
+- If you already have an NGINX server running and want to add your NiceGUI app, you can reuse a stripped down version of the nginx.conf file, [nginx_site.conf](https://github.com/zauberzeug/nicegui/blob/main/example/nginx_https/nginx_site.conf)
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo cp nginx_site.conf /etc/nginx/sites-available/my_nicegui_app.conf
|
|
|
+sudo nano /etc/nginx/sites-available/my_nicegui_app.conf # customize your domain, certificates, port number, etc.
|
|
|
+sudo ln -s /etc/nginx/sites-available/mynicegui_app.conf /etc/nginx/sites-enabled
|
|
|
+sudo systemctl reload nginx
|
|
|
+```
|