Rubén, Crystal, & Stuart--
Your responses helped me figure it out.
In particular, Stuart, you were right. My problem was having an absolute
symlink from /var/www/pixelfed/public/storage ->
/var/www/pixelfed/storage/app/public.
Making this a relative symlink (i.e., cd /var/www/pixelfed/public && ln -s
../storage/app/public storage) did the trick.
For posterity's sake, my working /etc/httpd.conf is below:
server "www.domain.com"
listen on * tls port 443
# acme-challenge TLS location
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
# enable HTTP Strict Transport Security
hsts {
preload
subdomains
max-age 15768000
}
tls {
certificate "/etc/ssl/domain.com.fullchain.pem"
key "/etc/ssl/private/domain.com.key"
}
# set logs
log {
access "pixelfed-access.log"
error "pixelfed-error.log"
}
# set max upload size to 1G (in bytes)
connection max request body 1048576000
connection max requests 1000
connection request timeout 3600
connection timeout 3600
root "/pixelfed/public"
directory index "index.php"
# works roughly like the `try_files` line of an nginx config
location not found "*" {
request rewrite "/index.php?$QUERY_STRING"
fastcgi socket "/run/php-fpm.sock"
}
location "/*.php" {
fastcgi socket "/run/php-fpm.sock"
}
}
On Tue, May 28, 2024 at 2:13 AM Stuart Henderson <[email protected]>
wrote:
> On 2024-05-27, Am Jam <[email protected]> wrote:
> >
> > Most of what makes pixelfed work is located in /var/www/pixelfed/public,
> > and hence pixelfed requires that the root directory be
> > /var/www/pixelfed/public.
> > So in /etc/httpd.conf I have the following lines:
> > - root "/pixelfed/public"
> > - directory index "index.php"
> >
> > However, for some bizarre reason, all the images are stored in
> > /var/www/pixelfed/storage (note: *not* /var/www/pixelfed/public/storage).
>
> Probably not bizarre. I expect they arrange things so that everything
> under /var/www/pixelfed/public can be read-only (or at least not writable
> by the user running the web server).
>
> > And part of the pixelfed installation process includes creating the
> > following symlink in /var/www/pixelfed:
> > - lrwxr-xr-x 1 root www 37B May 27 12:15 storage@ ->
> > /var/www/pixelfed/storage/app/public/
> >
> > That, unfortunately, is "outside" of the root directory specified in
> > /etc/httpd.conf.
>
> httpd is in a chroot jail so the absolute symlink won't work.
>
> Either use a relative symlink for the above link, or set things up so
> that /var/www still works inside the chroot -
>
> mkdir /var/www/var; ln -s .. /var/www/var/www
>
>
>