神奇的 try_files 语句的目的是什么?

神奇的 try_files 语句的目的是什么?

维护由第三方设置的系统时,在 nginx vhost 配置中发现以下内容

server {
    listen *:80;

    listen *:443 ssl;
    ssl_certificate /path/to/cert.crt;
    ssl_certificate_key /path/to/cert.key;

    server_name <server-name-here>;

    root   /path/to/vhost/root;

    index index.html index.htm index.php index.cgi index.pl index.xhtml;

    error_log /var/log/ispconfig/httpd/domain-name/error.log;
    access_log /var/log/ispconfig/httpd/domain-name/access.log combined;

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location /stats/ {
        index index.html index.php;
        auth_basic "Members Only";
        auth_basic_user_file /path/to/passwd/file;
    }

    location ^~ /awstats-icon {
        alias /usr/share/awstats/icon;
    }

    location ~ \.php$ {
        try_files /0816f18c2383162111fc93fe015c1607.htm @php;
    }

    location @php {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9010;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;

        include fastcgi_params;
        fastcgi_read_timeout 300;
    }

    client_max_body_size 24M;

    location / {
       try_files $uri $uri/ /index.php?$args;
       add_header 'Access-Control-Allow-Origin' '*.domain.name';
       add_header 'Access-Control-Allow-Methods' 'GET, POST';

       satisfy any;
       allow <white-listed-IPs>;
       deny all;
            auth_basic "Members Only";
            auth_basic_user_file /path/to/passwd/file;

            location ~ \.php$ {
                try_files /0816f18c2383162111fc93fe015c1607.htm @php;
            }
    }

    location ~* ^.+.(css|js|jpg|jpeg|png|gif|ico|woff|ttf|otf|eot|svg|pdf)$ {
        access_log off;
        expires 1h;
    }
}

除了这个语句之外,对我来说这看起来相当简单try_files /0816f18c2383162111fc93fe015c1607.htm @php;。磁盘上没有这个名字的文件。显然这是用于监控或关闭虚拟主机的某种魔法,很难在 Google 上找到它,因为文件名是完全随机的字符串。

知道它是用来做什么的吗?

PS 我们讨论的是 Linux 机器,它也安装了 ISPConfig,不确定这是否重要。Nginx 版本是1.2.0我接管机器时使用的。

答案1

此条目的一个合法用途try_files是使网站轻松进入维护模式。在 Web 服务器上创建此文件后,不会执行任何 PHP 脚本,只会.htm显示该特定文件。

在维护期间,可以更轻松地执行复杂的更新,而不会以意外的方式导致站点中断。

选择此文件名是为了避免与.htm网站上的任何其他文件冲突。

然而,这种实现维护模式的方式会在维护期间破坏所有其他非 HTML 内容页面,如 RSS 提要、站点地图和 JSON API。

相关内容