如何配置 nginx 从两个不同的文档根目录为一个站点提供服务,并根据 URL 使用不同的 php

如何配置 nginx 从两个不同的文档根目录为一个站点提供服务,并根据 URL 使用不同的 php

我正在尝试将 nginx 配置为根据 url 使用两个不同的文档根目录,因此如果有人连接到 www.example.com,将从 /portal/public_html 获取站点,但如果客户端连接到 www.example.com/account,将从其他目录 /portal2/public 获取站点,并且该站点应由 php 7 提供服务。我正在使用 nginx 配置中的变量来实现我的目标,但有些东西并没有像我想象的那样工作。我收到错误 500。在我的日志中,我看到 nginx 正在其默认目录“/usr/share/nginx/html”中查找站点文件 2017/11/20 10:31:38 [debug] 21729#0: *421789 fastcgi param: "DOCUMENT_ROOT: /usr/share/nginx/html

也许配置会比我生疏的英语更容易阅读和理解,所以这是我的 nginx 配置:

服务器 {
    听 81 默认;
    服务器名称www.example.com;

    访问日志/var/log/nginx/www.example.com.access.log;
    错误日志 /var/log/nginx/www.example.com.error.log 调试;

    地点 / {

    设置$my_root/portal/public_html;

    #PHP v5
        设置$php_host_port 127.0.0.1:9000;
        根/$my_root;
        索引索引.php;
        代理读取超时200;

        包括/nginx_conf/portal_rewrite_params;

    }

    位置 ~^/(帐户|新购物车|登录|注册|n) {
    设置$my_root/portal2/public;
        根$my_root;
        代理读取超时200;
        索引索引.php;
        try_files $uri $uri/ /index.php$is_args$args;

    #PHP v7  
     设置$php_host_port 127.0.0.1:9071;

    }

    位置 ~ \.php$ {

        fastcgi_pass $php_host_port;
        fastcgi_index索引.php;
        包括/nginx_conf/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $document_root;
    }
}

所以我的问题是,如何实现 nginx 从不同的文档根目录为同一站点提供服务,并根据 URL 使用不同的 php?我的方法好吗?

我的环境是 centos 7、nginx/1.10.2、php 5.6 和 php7.1

答案1

你的变量很令人困惑..

 root /portal/public_html; 

 location ~^/(account|new-cart|signin|register|n) {
     root /portal2/public;
     index index.php;
     location ~* \.php {
         fastcgi_index  index.php; 
         fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param  DOCUMENT_ROOT $document_root;
         fastcgi_pass 127.0.0.1:9071;
         # include other fascgi_params
     }
 }

 location / {
    try_files $uri $uri/ /index.php$is_args$args;
 }

 location ~* \.php {
     fastcgi_pass 127.0.0.1:9000;
     fastcgi_index  index.php; 
     fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
     fastcgi_param  DOCUMENT_ROOT $document_root;
     # include other fascgi_params
 }

相关内容