If you intend to self-host Invidious within a sub-folder, like your-website.com/invidious/, this is not officially supported and is unlikely to be in the future. I understand their viewpoint, yet I believe this is a legitimate scenario. For an individual self-hoster, getting an additional domain solely for Invidious may not be that easy. While a subdomain remains an option, there are scenarios where it may not be viable.
Continuing with the example above, let's assume that you want to serve Invidious under your-website.com/invidious/. Firstly, follow the officail guide to install Invidious. Then we need to a few configuration changes in config/config.yml:
# If your nginx serves through https, then change this to 443: external_port: 443 # Again, if your nginx serves through https, then this needs to be true: https_only: true # Your domain domain: your-website.com
And here is the relevant nginx configuration:
# Change each instance of the text "/invidious/" with the subfolder
# path that you want in the following configuration:
location /invidious/ {
# 3000 is the default port, change the following if you have changed
# it (see config/config.yml port):
proxy_pass http://127.0.0.1:3000/;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_redirect / /invidious/;
# Now we are going to do some sub_filter'ing which is essentially
# doing some simple string replacements on the response.
# Disable compression (from invidious to nginx) so that sub_filter
# works
proxy_set_header Accept-Encoding "";
# Disable sub_filter_once so that each instance of strings that we
# want to replace gets replaced instead of getting replaced once.
sub_filter_once off;
sub_filter_types text/javascript application/json;
sub_filter /api/ /invidious/api/;
sub_filter /vi/ /invidious/vi/;
sub_filter /channel /invidious/channel;
sub_filter /ggpht/ /invidious/ggpht/;
sub_filter /toggle_theme /invidious/toggle_theme;
sub_filter /token /invidious/token;
sub_filter /subscription /invidious/subscription;
sub_filter 'src="/' 'src="/invidious/';
sub_filter 'href="/' 'href="/invidious/';
sub_filter 'action="/' 'action="/invidious/';
}
Also see the official nginx configuration for reference.
Of course this is not a very sound way to do things, each update to Invidious has a chance to cause some breakage but it works for now. I'll try to keep this updated.
Comments