
Syncthing by default runs on localhost on port 8384
I wasn’t too keen to run syncthing publicly directly, so I created an nginx reverse proxy for it.
The other reason being I wanted to put a basic authentication to access the syncthing main page so nginx seemed perfect for this job.
For this, I first created a basic auth file for which apache2-utils is required.
Operations below performed as root.
Create a Basic-Auth password file
apt-get install -y apache2-utils cd ~/basic-auth htpassword -cb <password file> <basic auth username> <password>
Configure Nginx
Have a subdomain to point to syncthing and set the reverse-proxy.
This file is /etc/nginx/conf.d/syncthing.conf
server {
listen 80;
listen [::]:80;
server_name <url>;
auth_basic "Restricted";
auth_basic_user_file /home/<username>/basic-auth/<password-file from step 1>;
location / {
root /home/<username>/syncthing/;
index index.html index.htm;
}
location /syncthing/ {
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 $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_pass http://localhost:8384/;
}
}
Of course, it’s better to serve this on an https port, in which case an ssl cert would be required.
Test and restart Nginx
nginx -t nginx -s reload
Now, the syncthing page is not accessible without a password which is a big relief. I wanted it to be accessible and configurable only by me!