Email verification link is 404

Hi, I’m new to Parse and stumped trying to configure email verification. I configured Parse to send the email (see below). It sent the email. I clicked the link:

https://www.danger.team/apps/dramawithfriends/verify_email?token=nXTt5eHdbeS2fHl3Cx3zMxdul&username=test1%40michaelcole.com

Parse responds:

Cannot GET /apps/dramawithfriends/verify_email

www.danger.team has A records to 127.0.0.1, where nginx reverse proxies to localhost:1337. That URL also gives the same response:

http://localhost:1337/apps/dramawithfriends/verify_email?token=nXTt5eHdbeS2fHl3Cx3zMxdul&username=test1%40michaelcole.com

Cannot GET /apps/dramawithfriends/verify_email

I don’t see anything in the Parse logs.

Here’s the server config I pulled from the documentation:

const parseServer = new ParseServer({
    appId: process.env.APPLICATION_ID,
    masterKey: process.env.MASTER_KEY,
    databaseURI: process.env.DATABASE_URI,
    serverURL: process.env.SERVER_URL,  // ends with '/parse'
  
    // Email: https://github.com/parse-community/parse-server#email-verification-and-password-reset
    verifyUserEmails: true,
    preventLoginWithUnverifiedEmail: false, // defaults to false
    publicServerURL: process.env.PUBLIC_SERVER_URL || process.env.SERVER_URL,
    appName: 'Drama With Friends',
    emailAdapter: {...},
    customPages: {
      invalidLink: `${process.env.PUBLIC_SERVER_URL}/hello/invalid-link`,
      verifyEmailSuccess: `${process.env.PUBLIC_SERVER_URL}/hello/verified`,
  
      choosePassword: `${process.env.PUBLIC_SERVER_URL}/hello/resetPassword`,
      passwordResetSuccess: `${process.env.PUBLIC_SERVER_URL}/hello/passwordSaved`,
    },
    accountLockout: {
      duration: 5, // duration policy setting determines the number of minutes that a locked-out account remains locked out before automatically becoming unlocked. Set it to a value greater than 0 and less than 100000.
      threshold: 3, // threshold policy setting determines the number of failed sign-in attempts that will cause a user account to be locked. Set it to an integer value greater than 0 and less than 1000.
    },
    passwordPolicy: {
      validatorPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/, // enforce password with at least 8 char with at least 1 lower case, 1 upper case and 1 digit
      validationError: 'Password must contain lowercase, uppercase, and at least 1 digit.',
      doNotAllowUsername: true, // optional setting to disallow username in passwords
      resetTokenValidityDuration: 24*60*60, // expire after 24 hours
    }
  })

What am I missing?

The server was misconfigured and created malformed URL’s. This won’t work:

http://localhost:1337/apps/dramawithfriends/verify_email?token=nXTt5...

This worked:

http://localhost:1337/parse/apps/dramawithfriends/verify_email?token=nXTt5...