NGINX Файл конфигурации для архитектуры подпапок микросервиса - PullRequest
1 голос
/ 20 марта 2020

Пожалуйста, потерпите меня, поскольку у меня нет большого опыта настройки Nginx.

Я хочу создавать микроуслуги как подпапки. Например: www.example.com/users

USERS - это микро-сервис, поэтому USERS также будет именем подпапки.

Веб-сайт может быть размещен в / var / www/html/ или / var / www/html/example.com/public_html (Предполагается, что это вопрос)

Итак, внутри главной папки / var / www/html/example.com/public_html есть много папок, каждая из которых представляет микро-сервис.

/var/www/html/example.com/public_html/users/
/var/www/html/example.com/public_html/students/
/var/www/html/example.com/public_html/teachers/
/var/www/html/example.com/public_html/parents/

В каждой микросервисе будет самая последняя папка, содержащая код для выполнения.

/var/www/html/example.com/public_html/users/latest/

В каждой последней папке есть 2 папки - APP, которая содержит код переднего плана SPA, и API, в котором находится код API

/var/www/html/example.com/public_html/users/latest/app/
/var/www/html/example.com/public_html/users/latest/api/

Я хотел бы добавлять и удалять папки по мере необходимости, не внося изменений в файл конфигурации Nginx. Если папка существует, я бы хотел, чтобы отображался соответствующий код переднего плана. Еще 404

Я знаю, что могу добавлять папки по мере необходимости в Nginx месте, но это не то, что я хочу.

(НЕ ХОЧУ ДЕЛАТЬ НИЖЕ КОД)

location /users {
  alias /var/www/html/example.com/public_html/users/latest/app
}

location /api/users {
  alias /var/www/html/example.com/public_html/users/latest/api
}

Я пытаюсь выяснить, могу ли я настроить NGINX, чтобы он указывал на соответствующую папку на основе URL.

Это то, что у меня пока есть, но это просто показывает как 404 за все, что я пытаюсь. Я работаю над написанием API на Go -lang, но, поскольку у меня есть опыт использования PHP, я сначала выбираю этот маршрут, прежде чем переключиться на Go.

server {

    listen 80;
    listen [::]:80;
    server_name _;

    root /var/www/html/example.com/public_html;
    index index.html;

    location ^/<service>/<additional-optional-parameters-can-go-here>$ {
      root /var/www/html/example.com/public_html/<service>/latest/app;
      try_files $uri $uri/ =404
    }

    location ^/api/<service>/<additional-optional-parameters-can-go-here>$ {
      root /var/www/html/example.com/public_html/<service>/latest/api;
      try_files $uri $uri/ =404

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

    }

    location ~ /\.ht {
        deny all;
    }

}

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Просто, если кто-нибудь еще попробует подобный подход. Я пошел на Freelancer.com и нанял кого-то, чтобы помочь мне.

location ~ ^/api/([a-z]+)/.*?$ {
    alias $folder_path/$1/$api_path;
    rewrite ^/api/([a-z]+)/.*?$ /$1/$api_path last;
}

location ~ ^/([a-z]+)/(?:(?!\blatest\b).)*$ {
    alias $folder_path/$1/$app_path;
    rewrite ^/([a-z]+)/(?:(?!\blatest\b).)*$ /$1/$app_path last;
}
0 голосов
/ 21 марта 2020

Я думаю, вы можете использовать регулярные выражения в расположении и в строках сервера.

Возможно, это поможет

server_name ~^(?<subdomain>.+)\.domain\.tdl$ ~^(?<subdomain>.+)\.domain2\.tdl$ domain.tdl domain2.tdl;

location ~ ^/sitename/[0-9a-z]+/index.php$ {
    fastcgi_pass phpcgi;
}

location ~ \.php$ {
    return 404;
}

location ~ ^/a/b/(?<myvar>[a-zA-Z]+) {
   # use variable $myvar here
   if ($myvar = "sth") { ... }
}

# Example using the subdomain var created in last steps
sub_filter_once off;
sub_filter 'Site Text' '$subdomain';
sub_filter 'Site Text' '$myvar';

Лично мне нравится создавать разные conf-файлы для каждого сервиса, а затем выдавать "service nginx reload". Возможно, вы также можете автоматизировать генерацию conf-файлов.

...