$_SERVER['SERVER_NAME'] 返回 nginx 反向代理端口/名称

$_SERVER['SERVER_NAME'] 返回 nginx 反向代理端口/名称

我在以下配置下运行 WordPress:

Varnish(端口 80)-> nginx(端口 8080)

一切都运行良好,除非某些插件或其他插件尝试使用 获取我的服务器名称$_SERVER['SERVER_NAME']。当发生这种情况时,它会返回_:8080我的服务器名称和端口。这是 nginx 配置的内容:

server {
listen 8080;
server_name _;

我需要它返回的是域名.com但是如果我更改 nginx 配置,显然它会停止监听需要的端口 (8080)(但更改 server_name 可以正常工作)。

我怎样才能让 nginx 监听 8080 但返回$_SERVER['SERVER_NAME']正确的端口(或者更确切地说,不附加错误的端口)?

答案1

_:8080 在此配置中,的正确值$_SERVER['SERVER_NAME']。它明确定义为返回 的值server_name。从文档

当前脚本正在执行的服务器主机的名称。如果脚本在虚拟主机上运行,​​则这将是为该虚拟主机定义的值。

听起来您正在寻找$_SERVER['HTTP_HOST']。请注意,您还需要配置 Varnish 来更改Host:请求标头。

答案2

$_SERVER['SERVER_NAME']您可以通过添加fastcgi_param指令来覆盖默认值include fastcgi_params;声明。

例如:

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

包含文件中定义的值将被悄悄地用 的值覆盖$http_host

相关内容