Make WordPress ActivityPub plugin work with Nginx

WordPress content management system can successfully federate – there is a nice ActivityPub plugin. However, when running WordPress on Nginx server (as HTTP server, not only reverse proxy) there might be an issue – after setting up ActivityPub on auto.coffee I couldn't find @gytis@auto.coffee from my Mastodon instance.

After doing some digging I found out ActivityPub standard requires webfinger end-point under .well-known folder which by proposed default WordPress configuration for Nginx is forbidden.

First I tried to allow access to .well-known but even though JSON API started working, trying to access specific user end-point it kept throwing following error:

{
  "code": "rest_missing_callback_param",
  "message": "Missing parameter(s): resource",
  "data": {
    "status": 400,
    "params": [
      "resource"
    ]
  }
}

While following example of successfully federating WordPress instance it was expected to return something like this:

{
  "subject": "acct:gytis@blog.gyt.is",
  "aliases": [
    "https://blog.gyt.is/author/gytis/"
  ],
  "links": [
    {
      "rel": "self",
      "type": "application/activity+json",
      "href": "https://blog.gyt.is/author/gytis/"
    },
    {
      "rel": "http://webfinger.net/rel/profile-page",
      "type": "text/html",
      "href": "https://blog.gyt.is/author/gytis/"
    }
  ]
}

Actually problem was that URL was not passed to WordPress' index.php – workaround was provided in issue #8 of ActivityPub plugin. Solution is easy as adding extra location directive in Nginx configuration:

location ~* /.well-known {
    try_files $uri $uri/ /index.php?$args;
}

And there it goes – Auto.Coffee is ready to federate :)

Read more #server and #nginx #configuration tips.