Actualmente estoy ejecutando dos servidores web en la misma máquina, uno usando Django a través de Gunicorn, que es mi sitio original, el otro que actúa como tienda en línea usando el mismo dominio, este usando Nestjs (Nodejs). Ambos servidores tienen una ruta /admin con el original en example.com/admin y el otro quiero estar en example.com/store/admin. Sin embargo, cada vez que ingreso la segunda URL en mi navegador (es decir, example.com/store/admin), devuelve la otra página de administración, example.com/admin (sin el prefijo /store). Aquí está el fragmento de configuración que creo que necesita ser revisado:
server { server_name example.com www.example.com; location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } location /store { proxy_pass http://127.0.0.1:3000/; } location = /store/admin { proxy_pass http://127.0.0.1:3000/admin/; } ... }He probado algunas combinaciones de los bloques de ubicación /store y /store/admin, pero parece que no puedo conseguir que me dirija al sitio de administración del servidor de la tienda. Funciona en mi máquina de desarrollo local cuando se prueba con el servidor nodejs. Ir a http://example.com/store devuelve lo que espero ver del servidor Nestjs.
Los documentos establecen que:
... Para encontrar una ubicación que coincida con una solicitud dada, nginx primero verifica las ubicaciones definidas usando las cadenas de prefijos (ubicaciones de prefijos). Entre ellos, se selecciona y recuerda la ubicación con el prefijo coincidente más largo . ...
Entonces solo necesita dos bloques de ubicación:
El primero :
location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; }Y el otro con la reescritura:
location /store { rewrite ^/store(.*) $1 break; proxy_pass http://127.0.0.1:3000; } Esto significa que reescribirá cada URL que comience con /store y lo eliminará de la URL antes de pasar al upstream. y esto también incluye el /admin , ya que es lo mismo.
También tenga en cuenta que no hay sufijo / al final de proxy_pass , lo que indica a NGINX que tome el URI proporcionado por el usuario.