使用 NGINX 的 php-fpm SERVER_NAME 子域

Dan*_*nze 2 php nginx php-fpm

在我的 PHP 应用程序中:

die($_SERVER['SERVER_NAME']);
Run Code Online (Sandbox Code Playgroud)

请求:

sub1.example.com
Run Code Online (Sandbox Code Playgroud)

结果:

example.com
Run Code Online (Sandbox Code Playgroud)

我的 NGINX 配置:

server
{
    server_name .example.com;
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
    root /var/www/html/example;
    index index.php;

    location ~ \.php$ {
        if (-f $request_filename) {
            fastcgi_pass    127.0.0.1:9000;
        }
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }

    location / {
        if ($request_filename ~ /sub1) {
            rewrite ^ http://sub1.example.com/? permanent;
        }
        if ($request_filename ~ /sub2) {
            rewrite ^ http://sub2.example.com/? permanent;
        }
        if (!-f $request_filename) {
            rewrite ^(.*)$ /index.php last;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么子域没有在 php 中被拾取?

cee*_*yoz 5

$_SERVER['SERVER_NAME']是虚拟主机的名称,它.example.com在你的 nginx 配置中。$_SERVER['HTTP_HOST']无论 nginx server_name 值如何,您是否都需要请求中的主机名。