NGINX boiler plates

Laravel

server {
  listen 80;
  root /home/user/www/my-project/public;
  index index.php index.html index.htm index.nginx-debian.html;
  server_name my-project.com;

  error_log /var/log/nginx/my-project-error.log warn;
  access_log /var/log/nginx/my-project-access.log;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  }

  location ~ /\.ht {
    deny all;
  }
}

PM2 app

server {
  listen 80;
  server_name my-project.com;

  location / {
    include proxy_params;
    proxy_pass http://localhost:3001;
  }
}

Vue CLI App

server {
  listen 80;
  server_name my-project.com;
  root /home/user/www/my-project/dist;

  location / {
    try_files $uri $uri/ /index.html;
  }

  location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|svg|ttf|woff|woff2)$ {
    access_log off;
    expires max;
  }
}

Two apps on same domain

Config to use differents root with differents URL. Here, this example display Vue.js SPA at / of website and display api from Laravel app at api/

map $request_uri $rot {
    "~api" /home/user/www/my-project-back/public/;
    default /home/user/www/my-project-front/dist/;
}
server {
  listen 80;
  server_name my-domain.com;
  root $rot;
  index index.html index.php;

  error_log /var/log/nginx/my-project-error.log warn;
  access_log /var/log/nginx/my-project-access.log;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  }

  location ~ /\.ht {
    deny all;
  }
}

Two apps on same domains (PM2 edition)

Config to use Nuxt.js SSR app on same domain with PHP app

server {
  listen 80;
  server_name my-domain.com;
  root /home/user/www/my-project-back/public;
  index index.php;

  error_log /var/log/nginx/my-project-back-error.log warn;
  access_log /var/log/nginx/my-project-back-access.log;

  location / {
    include proxy_params;
    proxy_pass http://localhost:3001;
  }

  location ~ ^/(admin|api|css|media|uploads|storage|docs|packages|cache) {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    include         snippets/fastcgi-php.conf;
    fastcgi_pass    unix:/var/run/php/php7.4-fpm.sock;
  }
}

With ecosystem.config.js

// ecosystem.config.js
module.exports = {
  apps: [
    // ...
    {
      name: 'my-project',
      script: 'npm',
      cwd: '/home/ewilan/www/my-project-front',
      args: 'start',
      env: {
        PORT: 3001
      },
    }
  ]
}