Trying to use nginx + passenger for a rails 6 + angular 14 app...

Patrick J. Collins patrick at collinatorstudios.com
Fri Feb 16 16:48:03 UTC 2024


Nevermind, I got it all figured out.

Patrick J. Collins
https://collinatorstudios.com


On Thu, 15 Feb 2024, Patrick J. Collins wrote:

> I have a rails app that is purely an api server, with an angular frontend living under a subfolder in the public directory..  So the server's file structure is like this:
>
> ```
> home/
>   my-app/
>     app/
>       controllers/
>       ..etc
>     config/
>       ..etc
>     public
>       favicon.ico
>       404.html
>       angular-app/
>         index.html
>         12345.js
>         45678.js
>         some-picture.jpg
> ```
>
> I had a wildcard route in my rails app that was manually loading the angular files and serving them, and I am trying to let nginx server them as static files and no longer do this.  The desired behavior that I am looking for is:
>
> * visiting '/api/*' will render the response from the rails server
> * visiting '/' will render the index file inside `public/angular-app/index.html`
> * visiting '/404.html' will render `public/404.html`
> * visiting '/some-picture.jpg' will render `public/angular-app/some-picture.jpg`
>
> it seems that passenger is breaking the behavior that I want...  If I have just a vanilla nginx config that has:
>
> ```
> server {
>   ...
>   root '/home/my-app/public'
>
>   location = / {
>     index angular-app/index.html;
>   }
>
>   location {
>     try_files $uri angular-app/$uri;
>   }
>   ...
> }
> ```
>
> Then the behavior for visiting `/`, `/404.html`, and `/some-picture.jpg` is all perfect...  But to get the rails server stuff to work, I need passenger... and as I add to the config:
> ```
>     passenger_app_root /home/my-app/;
>     passenger_enabled on;
> ```
>
> Then trying to go to anything other than an api route (routes defined in the rails app's config) will result in a 500...
>
> I tried experimenting with restructuring my nginx config to something like:
> ```
> server {
>   ...
>   root '/home/my-app/public'
>
>   location /api/ {
>     passenger_app_root /home/my-app/;
>     passenger_enabled on;
>   }
>
>   location ^/api/ {
>     index angular-app/index.html;
>     passenger_enabled off;
>   }
>   ...
> }
> ```
> And I still end up with 500s going anywhere other than api endpoints...  Does
> anyone one know what I can do to make this work?
>
> Patrick J. Collins
> https://collinatorstudios.com
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx
>


More information about the nginx mailing list