Nginx config with both SSR Client and API server

670 Views Asked by At

I'm facing a problem with an Nginx sites-available config file. I'm trying to set up a client that uses Server Side Rendering (SSR) with Nodejs, and a RestfulAPI that uses Ruby on Rails. What I want is to have my default path location "/" that goes to the Nodejs server, and I also want to have all the calls to my server (my API) to the path location "/api".

Here is my config file :

listen 80;
server_name didsomeonesayfrankerz.com;

passenger_friendly_error_pages on;
passenger_enabled on;
passenger_app_group_name didsomeonesayfrankerz;
passenger_min_instances 15;
passenger_max_request_queue_size 200;
passenger_app_env production;
client_max_body_size 10M;

# API server
location /api {
  passenger_app_type ruby;
  passenger_ruby /home/ost/.rvm/gems/ruby-3.0.0/wrappers/ruby;
  root /home/ost/didsomeonesayfrankerz/server/public;
}

# SSR
location / {
  root /home/ost/didsomeonesayfrankerz/client/dist/ssr;
  passenger_app_type node;
  passenger_nodejs /home/ost/.nvm/v18.16.0;
  passenger_startup_file /home/ost/didsomeonesayfrankerz/client/dist/ssr/index.js;
}

charset utf-8;

location ~ /\.(?!well-known).* {
  deny all;
}

My problem is pretty simple : every calls I make to the server ("/api") are catched by the Node Server (SSR). I tried using "location ^~ /api" but didn't work.

Any help or suggestions are appreciated!

1

There are 1 best solutions below

0
OST On BEST ANSWER

Turns out I finally found the issue : the passenger_app_group_name. Simply comment it and everything works fine. It is also possible to put the passenger_app_group_name inside each location spots.

listen 80;
server_name didsomeonesayfrankerz.com;

passenger_friendly_error_pages on;
passenger_enabled on;
# passenger_app_group_name didsomeonesayfrankerz;
passenger_min_instances 15;
passenger_max_request_queue_size 200;
passenger_app_env production;
client_max_body_size 10M;

# API server
location /api {
  passenger_app_type ruby;
  passenger_ruby /home/ost/.rvm/gems/ruby-3.0.0/wrappers/ruby;
  root /home/ost/didsomeonesayfrankerz/server/public;
  passenger_app_group_name didsomeonesayfrankerzAPI;
}

# SSR
location / {
  root /home/ost/didsomeonesayfrankerz/client/dist/ssr;
  passenger_app_type node;
  passenger_nodejs /home/ost/.nvm/v18.16.0;
  passenger_startup_file /home/ost/didsomeonesayfrankerz/client/dist/ssr/index.js;
  passenger_app_group_name didsomeonesayfrankerzSSR;
}

charset utf-8;

location ~ /\.(?!well-known).* {
  deny all;
}