这可能不会像我想要的那样正确表达,请耐心等待。
我有一台运行 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_pass
和proxy_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服务器目录结构。