我正在单个域的子文件夹下设置多个 Laravel 应用程序(社交网络应用程序,需要 https,单个证书)。
无法弄清楚如何编写 nginx 配置以将 HTTP 请求映射/app1/
到 Laravel 安装/var/www/other_folder/public/
这是配置测试的最新迭代。调试日志被省略。Laravel 根位置 /app1/ 有效,但路由映射 ( /app1/api/method/
) 无效。请帮助,如何调试 nginx 如何逐步处理请求(调试日志不是那么解释),或者给我一个提示如何将子文件夹映射/app1/...
到index.php
Laravel。
server {
listen 80;
server_name apps.mydomain.com;
root /var/www/apps.mydomain.com/docs;
location / {
index index.html index.php;
}
location /app1 {
alias /var/www/other_folder/public;
index index.php index.html;
try_files $uri $uri/ /app1/index.php$is_args$args /app1/index.php?$query_string;
}
location ~ /app1/.+\.php$ {
rewrite ^/app1/(.*)$ /$1 break;
include /etc/nginx/fastcgi.conf;
fastcgi_param SCRIPT_FILENAME /var/www/other_folder/public$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass php;
# Database access parameters
fastcgi_param DB_HOST "localhost";
fastcgi_param DB_USER "apps";
fastcgi_param DB_PASS "xxxxxxxx";
fastcgi_param DB_NAME "app1";
}
# Other locations skipped
include /etc/nginx/global/php.conf; # other php scripts
}
我认为您应该更改该位置的根目录。根据 Nginx 文档,根指令还具有上下文“位置”:
因此,您应该能够执行以下操作:
据我了解, alias 指令将一个 URL 重新映射到另一个 URL 并继续处理,它没有定义一个目录从哪里到源文件。我不确定您是否仍需要在 PHP 位置进行重写。
此代码未经测试。但是您说它适用于 /app1/ 但不适用于 /app1/api/method/ 。我猜你的问题出在这部分:
所以这基本上是告诉去尝试
url
,如果不匹配,尝试将其作为目录匹配url/
,如果不存在文件和目录,则我们尝试将其匹配为/app1/index.php?someargs
,如果不存在,则匹配它作为/app1/index.php?$query_string
首先,alias 和 try_files不能一起工作,所以你可以使用 root 来代替。将 /app1 位置块更改为以下内容,以查看它是否解决了您的问题。
其次, $query_string 与 $args 相同,唯一的区别是它是只读的。
就像我说的,这是未经测试的,但如果它有效,那就太好了。如果没有,我还有另一个想法。