mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-12-23 19:11:14 +01:00
Add apache2 reverse proxy documentation (#4502)
* fix: add JetBrains IDE exclusions * add: document apache2 reverse proxy configuration * fix: qualify that steps included do not constitute a security guide (and users must rely on own experience) * Update reverse_proxy.md * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update docs/docs/guides/reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> * Update reverse_proxy.md * Update reverse_proxy.md Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
This commit is contained in:
parent
a46c37018f
commit
499866bf94
1
.gitignore
vendored
1
.gitignore
vendored
@ -15,3 +15,4 @@ web/node_modules
|
|||||||
web/coverage
|
web/coverage
|
||||||
core
|
core
|
||||||
!/web/**/*.ts
|
!/web/**/*.ts
|
||||||
|
.idea/*
|
84
docs/docs/guides/reverse_proxy.md
Normal file
84
docs/docs/guides/reverse_proxy.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
id: reverse_proxy
|
||||||
|
title: Setting up a Reverse Proxy
|
||||||
|
---
|
||||||
|
|
||||||
|
This guide outlines the basic configuration steps needed to expose your Frigate UI to the internet.
|
||||||
|
A common way of accomplishing this is to use a reverse proxy webserver between your router and your Frigate instance.
|
||||||
|
A reverse proxy accepts HTTP requests from the public internet and redirects them transparently to internal webserver(s) on your network.
|
||||||
|
|
||||||
|
The suggested steps are:
|
||||||
|
- **Configure** a 'proxy' HTTP webserver (such as [Apache2](https://httpd.apache.org/docs/current/) or [NPM](https://github.com/NginxProxyManager/nginx-proxy-manager)) and only expose ports 80/443 from this webserver to the internet
|
||||||
|
- **Encrypt** content from the proxy webserver by installing SSL (such as with [Let's Encrypt](https://letsencrypt.org/)). Note that SSL is then not required on your Frigate webserver as the proxy encrypts all requests for you
|
||||||
|
- **Restrict** access to your Frigate instance at the proxy using, for example, password authentication
|
||||||
|
|
||||||
|
:::caution
|
||||||
|
A reverse proxy can be used to secure access to an internal webserver but the user will be entirely reliant
|
||||||
|
on the steps they have taken. You must ensure you are following security best practices.
|
||||||
|
This page does not attempt to outline the specific steps needed to secure your internal website.
|
||||||
|
Please use your own knowledge to assess and vet the reverse proxy software before you install anything on your system.
|
||||||
|
:::
|
||||||
|
|
||||||
|
There are several technologies available to implement reverse proxies. This document currently suggests one, using Apache2,
|
||||||
|
and the community is invited to document others through a contribution to this page.
|
||||||
|
|
||||||
|
## Apache2 Reverse Proxy
|
||||||
|
|
||||||
|
In the configuration examples below, only the directives relevant to the reverse proxy approach above are included.
|
||||||
|
On Debian Apache2 the configuration file will be named along the lines of `/etc/apache2/sites-available/cctv.conf`
|
||||||
|
|
||||||
|
### Step 1: Configure the Apache2 Reverse Proxy
|
||||||
|
|
||||||
|
Make life easier for yourself by presenting your Frigate interface as a DNS sub-domain rather than as a sub-folder of your main domain.
|
||||||
|
Here we access Frigate via https://cctv.mydomain.co.uk
|
||||||
|
```xml
|
||||||
|
<VirtualHost *:443>
|
||||||
|
ServerName cctv.mydomain.co.uk
|
||||||
|
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyPass "/" "http://frigatepi.local:5000/"
|
||||||
|
ProxyPassReverse "/" "http://frigatepi.local:5000/"
|
||||||
|
|
||||||
|
ProxyPass /ws ws://frigatepi.local:5000/ws
|
||||||
|
ProxyPassReverse /ws ws://frigatepi.local:5000/ws
|
||||||
|
|
||||||
|
ProxyPass /live/ ws://frigatepi.local:5000/live/
|
||||||
|
ProxyPassReverse /live/ ws://frigatepi.local:5000/live/
|
||||||
|
|
||||||
|
RewriteEngine on
|
||||||
|
RewriteCond %{HTTP:Upgrade} =websocket [NC]
|
||||||
|
RewriteRule /(.*) ws://frigatepi.local:5000/$1 [P,L]
|
||||||
|
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
|
||||||
|
RewriteRule /(.*) http://frigatepi.local:5000/$1 [P,L]
|
||||||
|
</VirtualHost>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Use SSL to encrypt access to your Frigate instance
|
||||||
|
|
||||||
|
Whilst this won't, on its own, prevent access to your Frigate webserver it will encrypt all content (such as login credentials).
|
||||||
|
Installing SSL is beyond the scope of this document but [Let's Encrypt](https://letsencrypt.org/) is a widely used approach.
|
||||||
|
This Apache2 configuration snippet then results in unencrypted requests being redirected to the webserver SSL port
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName cctv.mydomain.co.uk
|
||||||
|
RewriteEngine on
|
||||||
|
RewriteCond %{SERVER_NAME} =cctv.mydomain.co.uk
|
||||||
|
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
|
||||||
|
</VirtualHost>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Authenticate users at the proxy
|
||||||
|
|
||||||
|
There are many ways to authenticate a website but a straightforward approach is to use [Apache2 password files](https://httpd.apache.org/docs/2.4/howto/auth.html).
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<VirtualHost *:443>
|
||||||
|
<Location />
|
||||||
|
AuthType Basic
|
||||||
|
AuthName "Restricted Files"
|
||||||
|
AuthUserFile "/var/www/passwords"
|
||||||
|
Require user paul
|
||||||
|
</Location>
|
||||||
|
</VirtualHost>
|
||||||
|
```
|
@ -8,6 +8,7 @@ module.exports = {
|
|||||||
"guides/false_positives",
|
"guides/false_positives",
|
||||||
"guides/ha_notifications",
|
"guides/ha_notifications",
|
||||||
"guides/stationary_objects",
|
"guides/stationary_objects",
|
||||||
|
"guides/reverse_proxy",
|
||||||
],
|
],
|
||||||
Configuration: [
|
Configuration: [
|
||||||
"configuration/index",
|
"configuration/index",
|
||||||
|
Loading…
Reference in New Issue
Block a user