NGINX + Passenger + Rails + X-Accel

I have nginx + passenger + rails. Nginx vhost:

passenger_set_header X-Accel-Mapping /home/passenger/.rvm/gems/ruby-3.3.6@updateserver/gems/sidekiq-7.3.9/web/assets/=/sidekiq_assets/;
passenger_pass_header X-Accel-Redirect;

location ^~ /sidekiq_assets/ {
    alias /home/passenger/.rvm/gems/ruby-3.3.6@updateserver/gems/sidekiq-7.3.9/web/assets/;
    internal;
}

It works fine (of course in Rails production I have config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'). I tried to set up symlink and use it inside vhost config. Simple symlink script:

#!/bin/bash

APP_ROOT="/home/passenger/updateserver"
LINK="/home/passenger/updateserver/sidekiq_assets"

cd "$APP_ROOT"
GEM_ASSETS="$(bundle show sidekiq)/web/assets"
ln -sfn "$GEM_ASSETS" "$LINK"

and above mentioned form would became this:

passenger_set_header X-Accel-Mapping /home/passenger/updateserver/sidekiq_assets/=/sidekiq_assets/;
passenger_pass_header X-Accel-Redirect;

location ^~ /sidekiq_assets/ {
    alias /home/passenger/updateserver/sidekiq_assets/;
    internal;
}

but unfortunatelly nginx gives 403 on assets. Symlinks are not accepted in the X-Accel-Mapping path?

I have resolved by changing the config this way:

passenger_set_header X-Accel-Mapping /home/passenger/.rvm/gems/=/__gems_internal__/;

and location block:

    location ^~ /__gems_internal__/ {
        alias /home/passenger/.rvm/gems/;
        internal;
    }

This solution gives me possibility to not use any scripts. :slight_smile: