如何使 fastcgi_pass 使用 localhost:port

Syl*_*lar 1 nginx

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

我有一个运行 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;
}
Run Code Online (Sandbox Code Playgroud)

对于我想做的事情,可以更改fastcgi_pass为使用localhost:9000吗?端口9000未被使用。然后proxy_pass按上面的方法使用?

Pio*_*asz 7

您似乎混淆了两个nginx指令:fastcgi_passproxy_pass

  • fastcgi_pass指示nginx使用FastCGI 协议执行 CGI 脚本(在您的例子中为 PHP)。
  • proxy_pass向另一个 Web 服务器发送 HTTP 请求并返回它,就好像它来自域一样server_name

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

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

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

对于以 you 开头的请求 URI,/v2/api/有两种选择:

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

    proxy_pass http://<laravel_server>:<laravel_http_port>/api/
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    fastcgi_pass <laravel_server>:9000
    
    Run Code Online (Sandbox Code Playgroud)

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