parent
33c16db802
commit
31762a3e50
@ -0,0 +1,109 @@ |
||||
# Setting up a reverse proxy |
||||
|
||||
A reverse proxy is a public-facing web server sitting in front of an internal |
||||
server such as Libresonic. The Libresonic server never communicates with the |
||||
outside ; instead, the reverse proxy handles all HTTP(S) requests and forwards |
||||
them to Libresonic. |
||||
|
||||
This is useful in many ways, such as gathering all web configuration in the |
||||
same place. It also handles some options (HTTPS) much better than the bundled |
||||
Libresonic server or a servlet container such as Tomcat. |
||||
|
||||
This guide assumes you already have a working Libresonic installation after |
||||
following the [installation guide](documentation/INSTALL.md). |
||||
|
||||
## Getting a TLS certificate |
||||
|
||||
This guide assumes you already have a TLS certificate. [Let's |
||||
Encrypt](https://letsencrypt.org) currently provides such certificates for |
||||
free. |
||||
|
||||
## Libresonic configuration |
||||
|
||||
A few settings can be tweaked in Libresonic's startup script or Tomcat |
||||
configuration. |
||||
|
||||
The reverse proxy will handle HTTPS connections, so there is no need for |
||||
Libresonic to handle them, which is why we set `httpsPort` to 0: |
||||
|
||||
libresonic.httpsPort=0 |
||||
|
||||
Furthermore, the internal Libresonic server should only be accessible from the |
||||
inside of the reverse proxy : we tell Libresonic to listen on the local IP |
||||
only: |
||||
|
||||
libresonic.host=127.0.0.1 |
||||
libresonic.port=4040 |
||||
|
||||
Finally, if Libresonic should be accessible from a subdirectory, the context |
||||
path must be set correctly: |
||||
|
||||
libresonic.contextPath=/libresonic |
||||
|
||||
## Reverse proxy configuration |
||||
|
||||
### Nginx |
||||
|
||||
The following configuration works for Nginx (HTTPS with HTTP redirection): |
||||
|
||||
```nginx |
||||
# Redirect HTTP to HTTPS |
||||
server { |
||||
listen 80; |
||||
server_name example.com; |
||||
return 301 https://$server_name$request_uri; |
||||
} |
||||
|
||||
server { |
||||
|
||||
# Setup HTTPS certificates |
||||
listen 443 default ssl; |
||||
server_name example.com; |
||||
ssl_certificate cert.pem; |
||||
ssl_certificate_key key.pem; |
||||
|
||||
# Proxy to the Libresonic server |
||||
location /libresonic { |
||||
proxy_set_header X-Real-IP $remote_addr; |
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
||||
proxy_set_header X-Forwarded-Proto https; |
||||
proxy_set_header Host $http_host; |
||||
proxy_max_temp_file_size 0; |
||||
proxy_pass http://127.0.0.1:4040; |
||||
proxy_redirect http:// https://; |
||||
} |
||||
} |
||||
``` |
||||
|
||||
### Apache |
||||
|
||||
The following configuration works for Apache (without HTTPS): |
||||
|
||||
```apache |
||||
<VirtualHost *:80> |
||||
ServerName example.com |
||||
ErrorDocument 404 /404.html |
||||
DocumentRoot /var/www |
||||
ProxyPass /libresonic http://localhost:4040/libresonic |
||||
ProxyPassReverse /libresonic http://localhost:4040/libresonic |
||||
</VirtualHost> |
||||
``` |
||||
|
||||
### HAProxy |
||||
|
||||
The following configuration works for HAProxy (HTTPS only): |
||||
|
||||
```haproxy |
||||
frontend https |
||||
bind $server_public_ip$:443 ssl crt /etc/haproxy/ssl/$server_ssl_keys$.pem |
||||
|
||||
# Let Libresonic handle all requests under /libresonic |
||||
acl url_libresonic path_beg -i /libresonic |
||||
use_backend libresonic-backend if url_libresonic |
||||
|
||||
# Change default backend to libresonic backend if you don't have a web backend |
||||
default_backend web-backend |
||||
|
||||
backend libresonic-backend |
||||
server libresonic 127.0.0.1:4040 check |
||||
``` |
Loading…
Reference in new issue