1

I am running WordPress under the following configuration:

Varnish (Port 80) -> nginx (Port 8080)

This is all working great except when some plugin or other tries to get my server name using $_SERVER['SERVER_NAME']. When that happens, it is getting back _:8080 as my server name and port. This is what the nginx config has:

server {
listen 8080;
server_name _;

What I need it to return is domain.com but if I change the nginx config, obviously, it stops listening on the port it needs to be (8080) (but changing the server_name works fine).

How can I have nginx listen on 8080 but have $_SERVER['SERVER_NAME'] return the correct port (or rather, not append the wrong port)?

2 Answers 2

1

_:8080 is the correct value for $_SERVER['SERVER_NAME'] in this configuration. It's explicitly defined to return the value of server_name. From the documentation:

The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host.

It sounds like you are looking for $_SERVER['HTTP_HOST']. Note that you also need to have not configured Varnish to alter the Host: request header.

3
  • I agree... but I can't control what plugin developers are using to get my server name. Which is why I am looking for a work-around to set it to what they are looking for. I'll check into what we are or are not doing with Host in varnish. Thanks! Jul 31, 2018 at 18:49
  • 1
    Well, you can't control them directly, but if they're trying to look at SERVER_NAME then that's a pretty serious bug. Plugins should call get_site_url() to find the site URL, and parse it if necessary. You can always report bugs. You can't guarantee a developer will fix bugs, though... Jul 31, 2018 at 18:50
  • And that's exactly what they did! I am updating the site now to test it out. Jul 31, 2018 at 19:02
0

You can override the default value of $_SERVER['SERVER_NAME'] by adding a fastcgi_param directive after the include fastcgi_params; statement.

For example:

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param  SERVER_NAME  $http_host;
    ...
}

The value defined in the include file will be silently overwritten with the value of $http_host.

2
  • Excellent! I'll try this for the other plugin that does this (see below, one of the devs already updated their code)! Jul 31, 2018 at 19:12
  • Keep in mind that this might not fix a broken plugin that is inappropriately depending on SERVER_NAME. For instance, this value will never have anything useful on a WP multisite subdomain install. The developer will still need to fix the bug in that case. Jul 31, 2018 at 19:57

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .