Monday, May 27, 2024

Re: httpd & pixelfed

Wild guess:

When a request is made against a picture in /storage/, it triggers the
location not found * rule.

The rewritten request does never hit the location "/storage/*" rule
because it now requests /index.php$something instead of any object
within /storage.

Try placing a matching /storage rule before the location not found *
rule and see what happens. This is where the rule belongs anyway,
because specific rules ought to be placed before more generic rules.



Am Jam wrote:
> Hi Everyone,
>
> I am trying to install and run pixelfed (think of it as a self-hosted
> instagram alternative) on OpenBSD 7.5, but I am having a problem with my
> /etc/httpd.conf. Unfortunately, pixelfed's installation instructions
> only provide an nginx example. For those of you familiar with nextcloud,
> pixelfed is similar -- it's essentially a large php application that one
> can unpack under /var/www/.
>
> I have chosen to "install" (i.e. unpack) pixelfed into
> /var/www/pixelfed. After chown -R www:www'ing the entire directory,
> everything "works" except for one critical part -- none of the images
> load, which, for an instagram alternative, is an issue :)
>
> What works is everything else -- I can browse around, create a user,
> login, adjust my settings, and post images (which ultimately don't show
> up). Everything works except displaying images. This expands to more
> than just uploaded photos -- for example, the main page's header image
> won't load.
>
> I believe I have pinpointed the issue, but I struggle to translate that
> into my /etc/httpd.conf.
>
> 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).
> 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.
>
> My /etc/httpd.conf is below, and you can see that I have tried to re-set
> the root directory whenever someone navigates to "/storage/*", but it
> doesn't work. Does anyone know what I'm doing wrong?
>
> P.S. -
> Running the following makes all images work, but I hesitate to use this
> as a long-term solution:
> -   cd /var/www/pixlfed/public
> -   cp -a /var/www/pixelfed/storage /var/www/pixelfed/public/storage_blah
> -   ln -s /var/www/pixelfed/public/storage_blah/app/public storage
>
>
> Many Thanks.
>
> /etc/httpd.conf:
>
> server "www.domain.com <http://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 "/storage/*" {
>                 root "/pixelfed/storage/app/public"
>                 fastcgi socket "/run/php-fpm.sock"
>         }
>
>         location "/*.php" {
>                 fastcgi socket "/run/php-fpm.sock"
>         }
>  }
>

No comments:

Post a Comment