Tenga paciencia conmigo, ya que no tengo mucha experiencia en la configuración de Nginx.
Quiero crear microservicios como subcarpetas. por ejemplo: www.ejemplo.com/usuarios
USUARIOS es el microservicio, por lo que USUARIOS también será el nombre de la subcarpeta.
El sitio web se puede alojar en /var/www/html/ o /var/www/html/example.com/public_html (suponiendo que este sea para esta pregunta)
Entonces, dentro de la carpeta principal, /var/www/html/example.com/public_html, hay muchas carpetas, cada una de las cuales representa un microservicio.
/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/
Cada microservicio tendrá una carpeta más reciente que contiene el código que se ejecutará.
/var/www/html/example.com/public_html/users/latest/
Cada carpeta más reciente tiene 2 carpetas: APLICACIÓN que contiene el código de interfaz de usuario de SPA y API que contiene el código de API
/var/www/html/example.com/public_html/users/latest/app/ /var/www/html/example.com/public_html/users/latest/api/
Me gustaría agregar y eliminar carpetas según sea necesario sin realizar cambios en el archivo de configuración de Nginx. Si la carpeta existe, me gustaría que se muestre el código front-end relevante. más 404
Soy consciente de que puedo agregar las carpetas según sea necesario en la ubicación de Nginx, pero eso no es lo que quiero.
(NO QUIERO HACER EL CÓDIGO ABAJO)
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 }
Estoy tratando de averiguar si puedo configurar NGINX para que apunte a la carpeta relevante según la URL.
Esto es lo que tengo hasta ahora, pero solo se muestra como 404 para todo lo que estoy intentando. Estoy trabajando para escribir la API en Go-lang, pero como tengo experiencia en el uso de PHP, tomaré esa ruta primero antes de cambiar a 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; } }
Creo que puedes usar expresiones regulares en la ubicación y las líneas del servidor.
Tal vez eso ayude
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';
Personalmente, me gusta crear diferentes archivos conf para cada servicio, luego emitir una "recarga de nginx de servicio". Quizás también podría automatizar la generación de archivos conf.
En caso de que alguien más esté intentando un enfoque similar. Entré en Freelancer.com y contraté a alguien para que me ayudara.
location ~ ^/api/([az]+)/.*?$ { alias $folder_path/$1/$api_path; rewrite ^/api/([az]+)/.*?$ /$1/$api_path last; } location ~ ^/([az]+)/(?:(?!\blatest\b).)*$ { alias $folder_path/$1/$app_path; rewrite ^/([az]+)/(?:(?!\blatest\b).)*$ /$1/$app_path last; }