【问题标题】:Serve static content through NGINX, based on subdomain name通过 NGINX 提供静态内容,基于子域名
【发布时间】:2020-04-20 15:23:20
【问题描述】:

我正在尝试通过直接从 NGINX 提供静态内容而不是请求命中 PHP 来提高我运行的网站的页面速度。

我在这样的路径中有网页:

  • gamea.com.mysite.com
  • anotherb.net.mysite.com
  • finalc.org.mysite.com

当为这些生成页面时,它会存储在这样的路径中:

  • /storage/app/page-cache/games/game/gamea_com/1.c
  • /storage/app/page-cache/games/anot/anotherb_net/1.c
  • /storage/app/page-cache/games/fina/finalc_org/1.c

路径结构取子域的前 4 个字母,然后是另一个具有完整路径的文件夹并替换“.”。用“_” - 例如“gamea.com”=“/game/gamea_com/”。实际缓存页面文件存储为“1.c”

这如何通过 NGINX 实现?我有点卡住了,我确实找到了this article,但我不确定如何在我的情况下使用它 - 谁能提供一个示例 NGINX 配置,将 NGINX 指向如上所述的正确路径?

我感谢任何可以帮助我的人!

【问题讨论】:

    标签: php nginx


    【解决方案1】:

    第一步是使用正则表达式捕获子域的三个部分,然后将它们粘贴到root 语句中。使用命名捕获,因为数字捕获可能超出评估它们的范围。详情请见this document

    例如:

    server {
        server_name  "~^(?<name1>.{4})(?<name2>.*)\.(?<name3>.*)\.example\.com$";
        root /path/to/root/$name1/$name1$name2_$name3;
        ...
    }
    

    或者,使用map 解码$http_host 变量。正则表达式相同,结果可以用在roottry_files语句中。

    例如:

    map $http_host $mypath {
        default                                                     "nonexistent";
        "~^(?<name1>.{4})(?<name2>.*)\.(?<name3>.*)\.example\.com$" $name1/$name1$name2_$name3;
    }
    server {
        ...
        root /path/to/root;
        location / {
            try_files $uri /$mypath$uri =404;
        }
    }
    

    您可以将try_files 拆分为两个location 块:

    root /path/to/root;
    location / {
        try_files $uri @other;
    }
    location @other {
        try_files /$mypath$uri =404;
    }
    

    根据您希望 Nginx 首先查找的文件交换术语。在location 中使用add_header 语句来自定义适当的响应。有关详细信息,请参阅this documentlocation 中的任何一个都可以包含特定的标头

    【讨论】:

    • 嗯...我将如何设置文件的路径,包括只为限制为 4 个字母的路径部分提取 4 个字母,例如“/fina/finalc_org/1.c”中的“fina”?
    • $name1 应该捕获前 4 个字母(例如“fina”),$name3 捕获. 之后的任何内容(例如“org”,而$name2 捕获之间的位(例如“lc”)。
    • 另外,我修复了root 语句中的几个错误。
    • 主要是我想我可以使用带有“try_files”的“location / {”位置块,而不是需要另一个服务器{}块?
    • 您可以使用map 并使用try_files 语句对其进行评估。
    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2018-04-05
    • 2013-09-23
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多