高效的 NGINX 设置,用于提供缓存的 html 文件

高效的 NGINX 设置,用于提供缓存的 html 文件

原始帖子:(见下文更新)

我想传递 html 文件,完全绕过 PHP。PHP 生成它们并将它们存储在目录中,如果可用,我想将它们提供给访问者。

我的问题是,我该如何有效地做到这一点。try_files 方法有效,但它真的那么有效吗?对网站的每个请求都需要先检查文件是否存在。

这是我目前提出的使用 try_files 的解决方案,但我当然想要更高效的解决方案。当 $http_host 为“red-cats.example.com”时,它会指向“/home/sys/example.com/cachepages/cats/re/red-cats.html”。我没有提供 $mypathdogs 的示例,我只是想说明可以有不同的 url 路径指向不同的文件夹。

以下是示例代码:

map $http_host $mypathcats {
    default "nonexistent";
    "~^(?<name1>.{2})(?<name2>.*)\.example\.com$" cachepages/cats/$name1/$name1$name2.html;
}

map $http_host $mypathdogs {
    ...another path here to cachepages/dogs/ files.
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name .example.com;
    root /home/sys/example.com/;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {        
            try_files $mypathcats $mypathdogs $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
            deny all;
    }
}

更新:

更新以详细说明我的问题。html 页面是由 PHP 创建的,因此第一次需要通过 PHP 访问它们,然后后续访问将找到生成的 html 文件(如果可用)并直接访问该文件,否则它将返回到 PHP,然后尝试生成它。这就是我的示例的工作方式 - 它查找生成的 html 文件,如果该文件尚不存在,它将转到 PHP(它会生成该文件,因此下一个 nginx 请求将找到该 html 文件并提供该文件)。

理想情况下,我需要一个可行的示例代码,比我的 try_files 方法更有效。

答案1

你想得太多了。nginx 最基本的工作是提供静态内容。对于已经生成的内容,你只需要这样做:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name .example.com;
    root /home/sys/example.com/;
}

当然,您需要提供证书才能使 SSL 正常工作。index默认为index.html,如果您不需要其他任何内容,则可以省略它。add_header指令也是可选的。

相关内容