BCH绑定域名到子目录实现多站
本文介绍百度云主机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.com
和newdomain.com
,设置子站标识。同时在webroot目录中创建两个子目录example
和newdomain
分别放置两个网站的文件。
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.html
和index.php
,如果找不到也重定向到首页。注意这里不能使用index
指令(第3行)设置默认首页文件,会产生循环重定向问题。
将上述代码块组合到一起,就是完整的bcloud_nginx_user.conf
文件,放入webroot根目录,重载站点即可。注意要清空控制面板中的默认首页配置,也就是bcloud_nginx_gen.conf
中不能有重复的location
匹配,不然会产生冲突。