繁体   English   中英

通过 NGINX 提供 static 内容,基于子域名

[英]Serve static content through NGINX, based on subdomain name

我试图通过直接从 NGINX 提供 static 内容而不是请求命中 PHP 来提高我运行的站点的页面速度。

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

  • gamea.com.mysite.com
  • 另一个b.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 来实现? 我有点卡住了,我确实找到了这篇文章,但我不确定如何在我的情况下使用它 - 谁能提供一个示例 NGINX 配置,将 NGINX 指向如上所述的正确路径?

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

第一步是使用正则表达式捕获子域的三个部分,然后将它们粘贴到root语句中。 使用命名捕获,因为数字捕获可能不在评估它们的 scope 之外。 有关详细信息,请参阅此文档

例如:

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语句来自定义适当的响应。 有关详细信息,请参阅此文档 任何一个location都可以包含特定的标题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM