【问题标题】:Rewriting and location in nginxnginx中的重写和定位
【发布时间】:2016-03-12 00:22:01
【问题描述】:

我目前正面临一个非常奇怪的问题。

我有一个运行在 xyz.com 的站点,该站点植根于 /var/www/xyz.com/ 。现在,此外,我还有一个该应用程序的管理界面,该应用程序将在 xyz.com/admin 上运行,并在 /var/www/xyz.com/admin/ 中找到其根。

但是,/var/www/xyz.com/admin/ 中的脚本要求该目录恰好作为根目录运行(通过前面带有斜杠的相对寻址)。我不想更改脚本。现在有问题的问题是:

  1. 如果我将 /admin/ 的根位置设置为 /var/www/xyz.com/ ,将正确调用管理页面,但脚本将不起作用。
  2. 如果我将 /admin/ 的根位置设置为 /var/www/xyz.com/admin/ ,则无法访问该页面(由于访问导致错误日志条目
    尝试 /var/www/xyz.com/admin/admin/ )。

如何使用我的 nginx 消除这个问题(不修改管理脚本)?有人可以帮忙吗?

编辑:我实际上是通过上游为主要位置“/”工作,所以没有选择只是省略额外的块。

【问题讨论】:

  • 使用子域admin.xyz.com
  • 想到了。但是没有有效的 TLS 证书。
  • 好吧,明白了。有便宜(甚至免费)的 SSL 证书可用。
  • 知道了。但我也通读了 StartSSL 的条款和条件,并认为它不适合。没有别的办法?

标签: regex nginx rewrite


【解决方案1】:

好的,我可以在这里看到两个解决方案。

第一个是将root替换为aliashttp://nginx.org/en/docs/http/ngx_http_core_module.html#alias

location /admin/ {
     alias /var/www/xyz.com/admin/;
     ...
}

所以在本例中,$document_root 内的 /admin/ 位置将是 /var/www/xyz.com/admin/

第二个解决方案(我不知道为什么,但你会发现它很有用)。 PHP如何知道文档根目录?带有 DOCUMENT_ROOT fastcgi 参数。在fastcgi.conf 中,您可以看到字符串fastcgi_param DOCUMENT_ROOT $document_root;。并且这个参数可以在你的配置中重新定义

location /admin/ {
     include fastcgi.conf;
     fastcgi_param DOCUMENT_ROOT /my/new/root/;
     ...
}

第一个解决方案要好得多,所以我放置第二个解决方案只是为了说明 PHP 中的文档根是什么以及它是如何工作的。

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多