如何使 fastcgi_pass 使用 localhost:port

如何使 fastcgi_pass 使用 localhost:port

这可能不会像我想要的那样正确表达,请耐心等待。

我有一台运行 php 7.2 和 nginx 的 ubuntu 服务器。我们有一个反向代理设置,因此 laravel 服务器使用内部 IP(AWS)。安装成功,但我们需要修改路由。

对于 laravel,所有路由都以 开头/api/。我们的反向代理将流量转发/v2/api/到私有 IP laravel 服务器。这有效,但我们得到404。laravel 服务器访问日志显示/v2/api未找到。太好了。我需要做一些更改。我需要路由/v2/api//api/。怎么做?设置:

server_name <private-ip-address>;

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

location /v2/api/ {
  # proxy_pass http://localhost:9000/$2;
}

location ~ /\.ht {
    deny all;
}

对于我想要做的事情,可以fastcgi_pass改用localhost:9000? 端口9000未被使用。然后proxy_pass按上述方式使用?

答案1

你好像混淆了两个nginx指令:fastcgi_passproxy_pass

  • fastcgi_pass指示nginx使用以下方式执行 CGI 脚本(本例中为 PHP)FastCGI 协议
  • proxy_pass将 HTTP 请求发送到另一个 Web 服务器并将其返回,就好像它是来自域一样server_name

您可以使用 提供静态内容proxy_pass,但不能使用fastcgi_pass

回到你的配置,你需要设置server_name域名nginx将可供访问。

在您当前的配置中,所有以 结尾的请求 URI(.php以 开头的除外)都/v2/api将在nginx主机。您可能不想将fastcgi_pass指令参数更改为localhost:9000,因为 Unix 套接字run/php/php7.2-fpm.sock速度更快。

对于以 开头的请求 URI,/v2/api/您有两个选项:

  • 您可以将proxy_pass指令更改为:

    proxy_pass http://<laravel_server>:<laravel_http_port>/api/
    

    在这种情况下nginx将使用 HTTP/v2/api/whatever获取。http://<laravel_server>:<laravel_http_port>/api/whatever

  • 或者如果Laravel服务器不提供任何静态内容,您可以运行PHP-FPM在 TCP/IP 套接字上(假设为 9000)并使用

    fastcgi_pass <laravel_server>:9000
    

并添加FastCGI 参数反映Laravel服务器目录结构。

相关内容