尝试反转目录结构时更新 nginx 配置
Updating nginx config while attempting to invert directory structure
我正在尝试翻转 PHP 应用程序的目录结构,该应用程序包含 Laravel 当前具有以下目录结构的子应用程序:
/-
/directory1-
script1.php
/laravel-
/public-
/css-
some-file.css
... other laravel files ...
我现在要做的是将父目录中的 "legacy" 代码翻转到 Laravel 应用程序中,这样目录结构现在如下所示:
/-
/legacy-
/directory1-
script1.php
/public-
/css-
some-file.css
... other laravel files ...
我 运行nginx 配置遇到困难,我能够成功 运行 /legacy
脚本并加载静态 public 文件 Laravel(例如上面的 some-file.css),但是我的 Laravel 路由中的 none 工作正常。这很复杂,因为我不想改变任何遗留路径(我仍然想/去现在 /legacy/index.php)并且我想要 Laravel应用程序以 /laravel 为前缀(因为我有前端代码在 /laravel/api/v1 调用 API,我现在还不想更新)。
这是我在两个不同位置的 nginx 配置:
server {
# ...
root /var/www/legacy;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ $uri.html $uri.php?$query_string;
}
location /laravel {
fastcgi_index index.php;
include fastcgi_params;
rewrite ^/laravel/public/(.*) /../public/;
try_files $uri /../public/index.php?$query_string;
}
}
我从 nginx 得到的错误是:FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
,我认为这是在谈论 SCRIPT_FILENAME FastCGI 参数。我尝试为此添加一个命名位置,类似于 :
中的方法
location / {
try_files $uri $uri/ $uri.html $uri.php?$query_string @laravel;
}
location @laravel {
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME /var/www/public/index.php?$query_string;
include fastcgi_params;
}
但是这个是一样的效果。如果有人有解决方案能够将来自 /laravel/api/v1/.*
和 /api/v1/.*
的请求路由到 Laravel 应用程序,那我们也将不胜感激。
假设父目录是 www
,我认为下面的配置(来自 this post)可以工作:
server {
# ...
root /var/www/legacy;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ $uri.html $uri.php?$query_string;
}
location /laravel {
alias /var/www/public;
try_files $uri $uri/ @laravel;
location ~ \.php {
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass php-upstream;
}
}
location @laravel {
rewrite /laravel/(.*)$ /laravel/index.php?/ last;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php-upstream;
}
}
要处理重复的 fastcgi_*
声明,您可以在 server
块中声明它们,或者将它们复制到一个文件中并包含它,this article 解释了 Nginx 中的继承是如何工作的.
我正在尝试翻转 PHP 应用程序的目录结构,该应用程序包含 Laravel 当前具有以下目录结构的子应用程序:
/-
/directory1-
script1.php
/laravel-
/public-
/css-
some-file.css
... other laravel files ...
我现在要做的是将父目录中的 "legacy" 代码翻转到 Laravel 应用程序中,这样目录结构现在如下所示:
/-
/legacy-
/directory1-
script1.php
/public-
/css-
some-file.css
... other laravel files ...
我 运行nginx 配置遇到困难,我能够成功 运行 /legacy
脚本并加载静态 public 文件 Laravel(例如上面的 some-file.css),但是我的 Laravel 路由中的 none 工作正常。这很复杂,因为我不想改变任何遗留路径(我仍然想/去现在 /legacy/index.php)并且我想要 Laravel应用程序以 /laravel 为前缀(因为我有前端代码在 /laravel/api/v1 调用 API,我现在还不想更新)。
这是我在两个不同位置的 nginx 配置:
server {
# ...
root /var/www/legacy;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ $uri.html $uri.php?$query_string;
}
location /laravel {
fastcgi_index index.php;
include fastcgi_params;
rewrite ^/laravel/public/(.*) /../public/;
try_files $uri /../public/index.php?$query_string;
}
}
我从 nginx 得到的错误是:FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
,我认为这是在谈论 SCRIPT_FILENAME FastCGI 参数。我尝试为此添加一个命名位置,类似于
location / {
try_files $uri $uri/ $uri.html $uri.php?$query_string @laravel;
}
location @laravel {
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME /var/www/public/index.php?$query_string;
include fastcgi_params;
}
但是这个是一样的效果。如果有人有解决方案能够将来自 /laravel/api/v1/.*
和 /api/v1/.*
的请求路由到 Laravel 应用程序,那我们也将不胜感激。
假设父目录是 www
,我认为下面的配置(来自 this post)可以工作:
server {
# ...
root /var/www/legacy;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ $uri.html $uri.php?$query_string;
}
location /laravel {
alias /var/www/public;
try_files $uri $uri/ @laravel;
location ~ \.php {
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass php-upstream;
}
}
location @laravel {
rewrite /laravel/(.*)$ /laravel/index.php?/ last;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php-upstream;
}
}
要处理重复的 fastcgi_*
声明,您可以在 server
块中声明它们,或者将它们复制到一个文件中并包含它,this article 解释了 Nginx 中的继承是如何工作的.