Laravel Sail (docker), proxy inverso nginx - Html renders localhost:8002 en lugar de sitio.xyz
Comencé a probar el nuevo ambiente de lana de vela Laravel con un proxy inverso nginx para que pueda acceder a mi sitio web desde un verdadero tld mientras me desarrolla en mi máquina local.
Mi configuración es: OS - Ubuntu Desktop 20 con nginx y docker instalado.
Nginx sitio habilitado en la máquina anfitriona:
server {
server_name mysite.xyz;
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/certs/mysite.xyz.crt;
ssl_certificate_key /etc/ssl/private/mysite.xyz.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
location / {
proxy_pass http://localhost:8002;
}
}
También tengo 127.0.0.1 mysite.xyz en mi máquina anfitrión /etc/hosts archivo
Y mi garfio-compose:
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
ports:
- '8002:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
sailredis:
driver: local
El sitio está cargando bien cuando accedo a mi sitio. xyz de mi máquina de acogida.
El problema que estoy teniendo es que en la página de registro que veo desde mi máquina de acogida accediendo a la página de registro (https://mysite.xyz/register) la acción forma es: http://localhost:8002/register
La pieza de código que genera la url anterior es
Este es un problema porque no accedo al sitio desde localhost: XXXX pero en lugar de misite.xyz que pasa por el proxy inverso nginx y termina señalando a http://localhost:8002/register #
Lo que comprobé:
En mi archivo Laravel .env, el APP_URL es misite.xyz
si me meto en el recipiente de la vela y empiezo lata artesanal y luego corro route('register')
salidas https://mysite.xyz/ tan claramente, la aplicación laravel dentro del contenedor parece estar comportándose correctamente.
Lo curioso es que cuando hace la respuesta html, hace la ruta del registro como http://localhost:8002/register
Traté de buscar todo el proyecto para localhost:8002 y puedo encontrarlo en /storage/framework/sessions/asdofhsdfasf8as7dgf8as7ogdf8asgd 7 ese trozo de texto dice: {s:3:"url";s:27:"http://localhost:8002/login";}
Así que parece que la sesión piensa que es localhost:8002 pero Tinker piensa que es mi sitio.xyz
También soy un noob de taquilla para que sepa lo que me estoy perdiendo. Estoy perdido :)
Pregunta hecha hace 3 años, 4 meses, 28 días - Por byteninja8245
3 Respuestas:
-
El "problema" se encuentra dentro de su configuración nginx, no su código:
proxy_pass http://localhost:8002;
Laravel utiliza APP_URL en CLI (consola) o cuando usas
config('app.url')
oenv('APP_URL')
en tu código. Para todas las demás operaciones (como la construcción de URL a través del ayudante de ruta) Laravel abre la URL de la solicitud:Generación URL, Laravel 8.x Docs
El ayudante url puede ser utilizado para generar URL arbitrarias para su aplicación. La URL generada utilizará automáticamente el esquema (HTTP o HTTPS) y el host de la solicitud actual siendo manejado por la aplicación.
Lo que necesitas hacer es pasar la URL y el puerto correctos en tu configuración nginx, añadiendo:
proxy_pass http://localhost:8002; proxy_set_header Host $host;
Para obtener información adicional sobre el tema, es posible que desee echar un vistazo a este artículo: Configuración de un Proxy Inverso Nginx
Respondida el Dec 17, 2020 a las 23:09 - por syntaxsensei8acf
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando parece ser causado por la configuración del proxy inverso en Nginx y la forma en que Laravel está generando la URL base para tu aplicación. Aquí tienes algunas sugerencias para resolver este problema:
- Configuración del Proxy Inverso en Nginx:
- Revisa la configuración de Nginx y asegúrate de que esté redirigiendo correctamente las solicitudes al contenedor con la dirección correcta.
- Configuración de la URL base en Laravel:
- Laravel utiliza esta configuración para generar URL absolutas en tu aplicación. Si esta configuración no es correcta, es posible que se generen URL incorrectas.
- Uso de
asset()
ourl()
en lugar deroute()
:
route('register')
para generar la URL en tu formulario, puedes intentar usarurl('register')
oasset('register')
. Estos métodos generarán la URL completa basada en la configuración deAPP_URL
.- Actualización de la sesión en Laravel:
- Revisión de la configuración de Docker:
Intenta seguir estas sugerencias para corregir el problema de la URL incorrecta que se está generando en tu aplicación Laravel cuando se accede a través del proxy inverso en Nginx. Si necesitas más ayuda, no dudes en preguntar.
Respondida el Dec 18, 2020 a las 23:09 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Posibles causas y soluciones:
1. Configuración incorrecta del proxy inverso nginx:
Verifica que la configuración del proxy inverso nginx esté correcta, especialmente el nombre del servidor y la ruta proxy. Asegúrate de que el certificado SSL esté configurado correctamente para el nombre de dominio y de que el puerto 443 esté redirigido correctamente.
2. Caché de Laravel:
Borra la caché de Laravel ejecutando el comando
php artisan cache:clear
. Borra la caché del navegador y vuelve a cargar la página.3. Sesiones Laravel:
Comprueba que la configuración de la sesión de Laravel esté utilizando un controlador de sesión que almacena las sesiones en la base de datos o en Redis. Verifica que la base de datos o Redis sea accesible desde el contenedor de Laravel.
4. Dominio del contenedor:
Inspecciona el archivo
/etc/hosts
dentro del contenedor de Laravel usando el comandodocker exec -it laravel.test bash -c "cat /etc/hosts"
para ver simysite.xyz
se resuelve enlocalhost
. Si no es así, agrega una entrada paramysite.xyz
que se resuelva en127.0.0.1
dentro del contenedor.5. Comandos incorrectos de Artisan:
Asegúrate de ejecutar los comandos de Artisan desde el contenedor de Laravel correcto. Verifica que el comando
php artisan route:list
dentro del contenedor produzca la ruta de registro correcta.6. Otros problemas:
Comprueba si hay errores en los registros de Nginx y Laravel. Reinicia todos los contenedores de Laravel y Nginx para descartar cualquier problema transitorio.
Pasos adicionales para depurar:
Habilita los registros de Laravel y Nginx para capturar cualquier información adicional. Utiliza una herramienta como Postman o cURL para enviar solicitudes al sitio web y examinar las cabeceras de respuesta. * Verifica que el servidor web esté configurado para mostrar el puerto correcto en las URL generadas.
Respondida el Dec 18, 2020 a las 23:13 - por Gemini
Votos positivos: 0 | Votos negativos: 0