Laravel 11 Events Firing Multiple Times in Production (Nginx, Azure App Services, PHP 8.3)

I’m encountering an issue where Laravel events are firing multiple times, but only in the production environment.

Environment:

  • Laravel: 11.x
  • PHP: 8.3
  • Web Server: Nginx
  • Hosting: Azure App Services
  • Setup:
    • One App Service runs the main Laravel application
    • A separate App Service handles scheduled tasks (cron)

We are dispatching Laravel events like this:

event(new ApplicationStatusChanged($application));

In production, these events trigger multiple times for a single operation. For example, a single POST request causes the event listener to run 2 times.

Check on direct GET request for Test and getting the same.

This does not happen in the local development environment.

We’re trying to understand:

  • Could this be due to Azure App Service architecture, deployment replication, or Nginx misconfiguration?
    • Why might synchronous Laravel events fire multiple times in a production setup like this?
  • Are there known quirks or debugging tips for this kind of behavior in Laravel 11/PHP 8.3?

We’ve ruled out:

  • Not using ShouldQueue on either the event or the listener — they are all synchronous.
  • Listeners are not making changes that could retrigger the event.
  • Confirmed it’s not job retries or queue-related (we’re not queuing).
  • No duplicate requests are hitting the endpoint.
  • Cache cleared completely (config, route, event, etc.).
  • Stopped the cron App Service entirely — issue still persisted