Nginx / Php:代理包括php脚本

时间:2015-09-01 15:05:16

标签: php nginx proxy

我们说我的网站位于/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页面。如何在指令中启用后备?

1 个答案:

答案 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