我们计划将我们的 Web 应用程序从基于 php 本机的应用程序升级到基于 PHP 框架 (Laravel) 以增强应用程序的安全性和性能。我的任务是拆分流量,其中每个请求都指向app.localhost
没有后缀的域,/v3
仍然转发到 Web 服务器节点上的旧应用程序,并使用到 Web 服务器节点的路径php-native
代理所有请求。下面是我的配置,导致 Laravel 生成的所有资产(css 和 js)和 URL 都指向根路径。/v3
laravel
前端代理(公共网络)
server {
listen 80;
listen [::]:80;
server_name app.localhost;
# PHP Native APP
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://php-native/;
}
# Laravel (APP v3)
location /v3/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://laravel/;
}
}
Web 服务器(专用网络)
php-native
网络服务器
server {
listen 80;
listen [::]:80;
server_name app.localhost;
root /usr/share/nginx/html/webapp/app;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php56-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app/$fastcgi_script_name;
include fastcgi_params;
}
}
laravel
网络服务器
server {
listen 80;
server_name app.localhost;
root /usr/share/nginx/html/webapp/app-v3/public;
index index.php index.html index.htm;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php74-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app-v3/public/$fastcgi_script_name;
include fastcgi_params;
}
}
谢谢
更新
我的问题是:如何拆分流量,所以指向的任何请求app.localhost
仍然转发到php-native
Web 服务器并且所有指向的请求都app.localhost/v3
指向laravel
Web 服务器?
我已经找到了我的解决方案。
第 1 步:添加
X-Frowarded-Prefix
到前端代理Step2:覆盖
getTrustedHeaderNames
函数这是基于 Symfony问题 symfony-issues-44572