我们说我的网站位于/srv/http/www
,可在www.mydomain.com
处找到。
我试图让子域devel.mydomain.com
成为我可以在释放它们之前测试功能的地方。功能'代码在/srv/http/www-devel
我们的想法是,在尝试访问devel.mydomain.com
时,会考虑/srv/http/www-devel
中可用的所有资源,并在/srv/http/www
中检索所有不可用的资源作为后备资源。因此,只需将/srv/http/www-devel
中的所有文件移至/srv/http/www
(并可能覆盖现有文件),即可部署我的功能。
以下nginx配置几乎适用于所有资源:
server {
listen 80;
listen 443 ssl;
server_name devel.mydomain.com;
access_log /var/log/nginx/20-devel.access.log;
error_log /var/log/nginx/20-devel.error.log;
ssl_certificate ...;
ssl_certificate_key ...;
index index.php index.html;
root /srv/http/www-devel;
location ~ /\. { deny all; }
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
location / { try_files $uri @fallback; }
location @fallback { root /srv/http/www; }
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
问题还在于处理php文件。如果我在/srv/http/www-devel
放入一个需要一些资源的php脚本,如果这些资源在/srv/http/www-devel
中不可用,那么php解释器就不会查看/srv/http/www
。如何在php级别启用此行为?
编辑:我还注意到location ~ \.php$
指令没有在devel目录中获取php页面。如何在指令中启用后备?
答案 0 :(得分:0)
在PHP中使用后备目录的一种方法是include path。
如果您这样加载文件:
require_once 'src/Foo/Bar.php';
,并且您已将包含路径配置为:
set_include_path('/srv/http/www-devel:/srv/http/www');
然后PHP将首先尝试/srv/http/www-devel/src/Foo/Bar.php
,然后尝试/srv/http/www/src/Foo/Bar.php