这可能不会像我想要的那样正确,请耐心等待。
我有一个运行 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按上面的方法使用?
您似乎混淆了两个nginx指令:fastcgi_pass和proxy_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服务器目录结构。
| 归档时间: |
|
| 查看次数: |
16694 次 |
| 最近记录: |