我正在尝试将 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
}