如何在nginx中为每个域分配不同的ipv6?

如何在nginx中为每个域分配不同的ipv6?

我有一个运行 Ubuntu 22.04 并使用 nginx 作为 Web 服务器的 KVM VPS。我有一个 IPv6 /64 块,因此我在控制面板中添加了额外的 IP。我还已在 DNS 服务器上添加了 AAAA 记录。我想为每个域分配不同的 IP,因此我上传了一个 php 文件来找出我的服务器向公众显示的 ipv6,但它显示的是错误的 ip 地址,它使用的是上次创建的 ipv6。这是我的 nginx 配置:

server {

    listen [79de:d3e4:211c:3963:e2d5:4b9d:00b8:2c60]:80;

    server_name sub.domain.com www.sub.domain.com;

    access_log /var/log/nginx/sub.domain.com.access.log rt_cache;
    error_log /var/log/nginx/sub.domain.com.error.log;


    root /var/www/sub.domain.com/htdocs;

    index index.php index.html index.htm;

    include common/php81.conf;
    
    include common/locations-wo.conf;
    include /var/www/sub.domain.com/conf/nginx/*.conf;

}

PHP的:

<?php
      // create a new cURL resource
      $ch = curl_init ();

      // set URL and other appropriate options
      curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
      curl_setopt ($ch, CURLOPT_HEADER, 0);
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

      // grab URL and pass it to the browser

      $ip = curl_exec ($ch);
      echo "The public ip for this server is: $ip";
      // close cURL resource, and free up system resources
      curl_close ($ch);
    ?>

如何使每个 IP 独立,以便 IP 1 传出 IP 显示为 IP 1,IP 2 显示为 IP 2,IP 3 显示为 IP 3 等等...

答案1

您的 PHP 脚本不确定传入的 IP 地址,而是确定传出连接的 IP 地址。

未经测试,但你应该能够转发变量$server_addr通过 php_fpmfastcgi_param指示。

Nginx的:

fastcgi_param  SERVER_ADDR $server_addr

PHP的:

echo $_SERVER['SERVER_ADDR '];

应该做的是使用add_header指令并检查客户端上的响应标头。

add_header X-Server-Addr $server_addr

这里不需要服务器端脚本。

相关内容