Caddy not loading CSS sheets?

I’m trying to reverse proxy Ombi V3. It loads the page but doesn’t show any content. It just loads the background. any ideas that may cause this?

proxy /ombi 192.168.1.17:5000 {
transparent
}

Have you configured Ombi’s Base URL setting to /ombi?

A common problem is having this set to something other than what you’re using as the proxy base path in Caddy, which would cause Ombi to link to assets (JS, CSS, images) outside of /ombi (which would likely be 404’d by Caddy, breaking the site).

1 Like

This is what I added to my Caddy file for Ombi.
rewrite / {
r ^/dist/([0-9\d*]).js
to /ombi/dist/{1}.js
}

1 Like

Can confirm this rewrite worked for me

Solid copy

I’m having similar issues with a few similar apps I’m trying to reverse proxy to, would something like this help for the following?

Organizr
Mylar
Tautulli
Pi-Hole
Portainer

An example of what I’m seeing is below

Log snippet

172.10.0.1 - - [12/Apr/2018:10:58:27 +0000] "GET /organizr HTTP/2.0" 200 11610
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/bootstrap/dist/css/bootstrap.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/font-awesome/css/font-awesome.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/mdi/css/materialdesignicons.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/selects/cs-select.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/selects/cs-skin-elastic.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/Waves/dist/waves.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/metisMenu/dist/metisMenu.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/google-material-color/dist/palette.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/smoke/dist/css/smoke.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/notifications/ns-style-other.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/notifications/ns-style-growl.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/sweetalert/dist/sweetalert.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/sha1.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/user.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /css/style.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /css/weather-icons.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/animate.css/animate.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /css/addtohomescreen.css HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/addtohomescreen.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/menu/modernizr.custom.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/push.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/ajax.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /images/organizr-load-w-thick.gif HTTP/2.0" 404 14
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/jquery/dist/jquery.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/bootstrap/dist/js/bootstrap.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/metisMenu/dist/metisMenu.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/Waves/dist/waves.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/moment/min/moment.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/jquery.nicescroll/jquery.nicescroll.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/slimScroll/jquery.slimscroll.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/cta/dist/cta.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/menu/classie.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/menu/gnmenu.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/selects/selectFx.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/sweetalert/dist/sweetalert.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /bower_components/smoke/dist/js/smoke.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/notifications/notificationFx.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/common.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/mousetrap.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/jquery.simpleWeather.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:28 +0000] "GET /js/jquery.mousewheel.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /js/sha1.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /js/user.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /css/style.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /css/weather-icons.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /css/addtohomescreen.css HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /js/addtohomescreen.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /bower_components/animate.css/animate.min.css?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /js/push.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:29 +0000] "GET /js/ajax.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/jquery/dist/jquery.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/bootstrap/dist/js/bootstrap.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/metisMenu/dist/metisMenu.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/Waves/dist/waves.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/moment/min/moment.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/jquery.nicescroll/jquery.nicescroll.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/slimScroll/jquery.slimscroll.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/cta/dist/cta.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/menu/classie.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/menu/gnmenu.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/selects/selectFx.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/sweetalert/dist/sweetalert.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /bower_components/smoke/dist/js/smoke.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/notifications/notificationFx.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/common.js?v=1.75 HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/mousetrap.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/jquery.simpleWeather.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:30 +0000] "GET /js/jquery.mousewheel.min.js HTTP/2.0" 404 38
172.10.0.1 - - [12/Apr/2018:10:58:35 +0000] "GET /images/favicon/favicon-32x32.png HTTP/2.0" 404 14
172.10.0.1 - - [12/Apr/2018:10:58:35 +0000] "GET /images/favicon/favicon-16x16.png HTTP/2.0" 404 14
172.10.0.1 - - [12/Apr/2018:10:58:35 +0000] "GET /images/favicon/android-chrome-192x192.png HTTP/2.0" 404 14
172.10.0.1 - - [12/Apr/2018:10:58:35 +0000] "GET /images/favicon/favicon.ico HTTP/2.0" 404 14

full Caddyfile

####################################################################################
# Snippets
####################################################################################
 
####### Snippet 1 #######
 
(mycommon) {
  ext .html .htm .php
  root /srv           # Change path syntax for your OS or your preferred location!
  gzip
 
  header / {
    X-Content-Type-Options nosniff
    X-XSS-Protection "1; mode=block"
    Strict-Transport-Security "max-age=31536000;"
  }
}

####### Snippet 2 #######
 
(mylocations) {

   # This code allows your browser/server to look at Organizr and verify if the currently logged in user's status is 
   # admin, user, or neither. This is based on assigned group in Organizer's "Manage users" tab
   # Admin allows users to see Admin, User, and guest pages
   # User allows a user to see User and Guest pages. 
   # Guest pages should not be assigned to either of these options.
   # each page should only be present in ONE of the blocks if auth is required.

	proxy /auth-admin https://sub.domain.com/Organizr/auth.php?admin
	proxy /auth-user https://sub.domain.com/Organizr/auth.php?user
	
   # this is where the protection happens. there is one call for users and one for admins
	
  reauth {
	path /sonarr   # protect what i have set a proxy to be called /sonarr
	path /radarr
	path /lidarr
	path /mylar
	path /lazy
	path /nzbget
	path /hydra2
	path /pihole
	path /portainer
	
    # if someone is not authorized for a page, send them here instead of allowing them through to the intended page
	
	failure redirect target=https://sub.domain.com/organizr
	
	# The above listed directories with be pretected from anyone not listed in Organizr as an Admin  
	
	upstream url=https://sub.domain.com/auth-admin,cookies=true  
	}
	
    # This bracket does the same as the above annotated bracket but the minimum required group is User
  
  reauth {
	path /ombi
	path /tautulliFN
	path /tautulliSK
	
	failure redirect target=https://sub.domain.com/organizr
	
	upstream url=https://sub.domain.com/auth-user,cookies=true
	}


  proxy /QNAP 172.10.0.1:8080 {			# PARTIALLY WORKING
	without /QNAP
	transparent
	}	
	
  proxy /organizr 172.10.0.12:80 {			#https://organizr.us/ PARTIALLY WORKING
	without /organizr
	transparent
	}

  proxy /radarr 172.10.0.4:7878 {            # https://radarr.video/
    transparent
    }
   
  proxy /sonarr 172.10.0.5:8989 {          # https://sonarr.tv/
    transparent
    }

  proxy /lidarr 172.10.0.6:8686 {          # https://github.com/lidarr/Lidarr
    transparent
    }
	
  proxy /mylar 172.10.0.8:8090/home {           # https://github.com/evilhero/mylar PARTIALLY WORKING
    without /mylar
	transparent
	}
 
  proxy /lazy 172.10.0.7:5299 {            # https://github.com/DobyTang/LazyLibrarian
    transparent
    }
  
  proxy /nzbget 172.10.0.3:6789 {          # http://nzbget.net/
    transparent
    }
 
  proxy /hydra2 172.10.0.2:5076 {        # https://github.com/theotherp/nzbhydra2
    transparent
    }

  proxy /ombi 172.10.0.10:3579 {            # https://github.com/tidusjar/Ombi NOT WORKING
	transparent
    }
   
  proxy /tautulliFN 172.10.0.13:8181/home {          # http://tautulli.com/ PARTIALLY WORKING
    without /tautulliFN
	transparent
    }

  proxy /tautulliSK 172.10.0.14:8181/home {          # http://tautulli.com/ PARTIALLY WORKING
    without /tautulliSK
	transparent
    }

  proxy /pihole 172.10.0.11:80/admin/index.php {        # https://pi-hole.net/ PARTIALLY WORKING
    without /pihole
	transparent
    }
 
  proxy /portainer 172.10.0.20:9000 {            # https://portainer.io/ PARTIALLY WORKING
    without /portainer
	transparent
    }	
	
  # The code below will proxy PHP requests
	
  fastcgi / 127.0.0.1:9000 php # php variant only
  
}
  
####################################################################################
# web domain server block
####################################################################################

sub.domain.com {
 
  tls email@address.com {  # Email for Let's Encrypt Verification
	max_certs 10
	}
	
  log /srv/logs/access.log {
	rotate_size 1          # Rotate after 1 MB
    rotate_age  7          # Keep log files for 7 days
    rotate_keep 2          # Keep at most 2 log files
	}
	
  errors /srv/logs/errors.log {
	rotate_size 1          # Rotate after 1 MB
    rotate_age  7          # Keep log files for 7 days
    rotate_keep 2          # Keep at most 2 log files
	}	
  
  on startup php-fpm7 # php variant only
  
    redir 301 {
    if {path} is /              # Only redirect if the request is for the webroot
    / https://www.google.com    # Replace with wherever you like
  }
	
  import mycommon          # Import code snippet 1 defined above
  import mylocations       # Import code snippet 2 defined above	
 
}
 
####################################################################################
# localhost or Machine server block
####################################################################################
 
http://localhost http://192.168.29.2 http://172.10.0.1 {
 
  import mycommon          # Import code snippet 1 defined above
  import mylocations       # Import code snippet 2 defined above
 
}
 
####################################################################################
# Plex subdomain code block
####################################################################################
 
plex.sub.domain.com {

  tls email@address.com {  # Email for Let's Encrypt Verification
	max_certs 10
	}
	
  gzip
 
  # Separate log file for Plex server
 
  log /srv/logs/plexaccess.log {
    rotate_size 1          # Rotate after 1 MB
    rotate_age  7          # Keep log files for 7 days
    rotate_keep 2          # Keep at most 2 log files
  }
 
  errors /srv/logs/plexerror.log {
    rotate_size 1          # Set max size 1 MB
    rotate_age  7          # Keep log files for 7 days
    rotate_keep 2          # Keep at most 2 log files
  }
 
  proxy / 172.10.0.9:32400 {
    transparent
  }
 
}
 

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.