本文介绍百度云主机BCH多域名分别绑定不同子目录实现一机部署多站的nginx配置文件写法之一。

BCH上原有一个example.com绑定在webroot根目录,最近想增加一个newdomain.com,与原来的网站分别放入两个子目录中。阿里云主机可以通过修改Apache.htaccess文件中的rewrite规则实现,想必BCH也能通过修改nginx配置文件实现,于是一番学习nginx配置文件的语法规则。

反复修改webroot目录下的bcloud_nginx_user.conf,怎么都无法实现想要的效果,百思不得其解。怀疑是不是BCH限制了一机多站,于是发工单询问百度技术支持,确认没有做特别限制后,继续探索。根据HTTP响应情况和log文件记录情况逐步调试,最终成功写出了完整的配置文件,实现了预期效果。下面将配置文件内容分享给大家参考。

if ($host ~* (www.)?(example|newdomain).com) {
    set $subsite $2;
}

首先匹配绑定的两个域名example.comnewdomain.com,设置子站标识。同时在webroot目录中创建两个子目录examplenewdomain分别放置两个网站的文件。

location = / {
    root /home/bae/app/$subsite;
    if (-f $request_filename/index.html) {
        rewrite (.*) /$subsite/index.html break;
    }
    if (-f $request_filename/index.php) {
        rewrite (.*) /index.php last;
    }
}

将最常用的首页path=/匹配出来,设置文档根目录为上一步创建的子目录。如果子目录中存在index.html则重定向到子目录,中止匹配;如果子目录中存在index.php则重定向到index.php,继续匹配。

location ~* \.(html|htm|js|css|jpg|jpeg|png|gif|svg|ico) {
    rewrite ^/(.*) /$subsite/$1 break;
}

处理静态文件,全部重定向进入子目录,中止匹配。

location ~* \.php {
    root /home/bae/app/$subsite;
    if (!-f $request_filename) {
        rewrite (.*) /index.php last;
    }
    set $path_info "";
    set $real_script_name $fastcgi_script_name;
    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
        set $real_script_name $1;
        set $path_info $2;
    }
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
    fastcgi_param SCRIPT_NAME $real_script_name;
    fastcgi_param PATH_INFO $path_info;
    fastcgi_param SERVER_PORT 80;
    include fastcgi_params;
}

处理php脚本文件,把官方文档中关于server级配置中对php文件的处理,直接复制过来进行修改覆盖。增加第2~5行,设置新的文档根目录为子目录,如果脚本不存在,重定向到首页,重新匹配本规则;如果脚本存在,则转交给fastcgi处理。

location ~* ^\/[^\.]*$ {
    root /home/bae/app/$subsite;
    # index index.html index.php;
    if (-f $request_filename/index.html) {
        rewrite (.*) /$subsite$1/index.html break;
    }
    if (-f $request_filename/index.php) {
        rewrite (.*) $1/index.php last;
    }
    if (!-f $request_filename) {
        rewrite (.*) /index.php last;
    }
}

匹配path为二级或多级目录的情形,寻找目录中的index.htmlindex.php,如果找不到也重定向到首页。注意这里不能使用index指令(第3行)设置默认首页文件,会产生循环重定向问题。

将上述代码块组合到一起,就是完整的bcloud_nginx_user.conf文件,放入webroot根目录,重载站点即可。注意要清空控制面板中的默认首页配置,也就是bcloud_nginx_gen.conf中不能有重复的location匹配,不然会产生冲突。

标签: none

已有 12 条评论

  1. 文章深入浅出,既有深度思考,又不乏广度覆盖,令人叹为观止。

  2. 字里行间饱含人文关怀,温暖而有力。

  3. 对生命本质的追问充满哲学思辨。

  4. 社会责任感贯穿全文,彰显学者担当。

  5. ?励志类评语?

  6. 建议提出分阶段实施路径,增强可行性。

  7. ?诗歌散文评语?

  8. 文化差异分析可再深化以避免误读。

  9. 这是一篇佳作,无论是从内容、语言还是结构上,都堪称完美。

  10. 独特的构思和新颖的观点,让这篇文章在众多作品中脱颖而出。

  11. 新车即将上线 真正的项目,期待你的参与coinsrore.com

  12. 2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

添加新评论