【问题标题】:NGINX - Allow any location and aliasNGINX - 允许任何位置和别名
【发布时间】:2020-06-06 01:50:39
【问题描述】:

我希望让 Nginx 允许任何子文件夹重定向到特定目录,但将所选子文件夹存储在标题中。

例如,我现在有这个可行的方法:

location ^~ /AhRnfKlM {
    alias /var/www/html/admin;
    index index.php index.html index.htm;

    location ~ \.php$ {
        limit_req zone=one burst=8;
        try_files $uri =404;
        fastcgi_index index.php;
        fastcgi_pass php;
        include fastcgi_params;
        fastcgi_buffering on;
        fastcgi_buffers 96 32k;
        fastcgi_buffer_size 32k;
        fastcgi_max_temp_file_size 0;
        fastcgi_keep_conn on;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }
}

因此,如果我转到http://website.com/AhRnfKlM/index.php,它不会有问题,但我想要的是能够选择任何子文件夹,例如http://website.com/test123/index.php,它仍然会正确别名,但将 test123 存储为标题例如我可以用 PHP 读取的 X-AuthCode,检查允许的身份验证代码的 mysql 数据库并决定从那里做什么。这样我就可以为特定管理员提供特定的访问代码,或者允许一次性访问代码存在,而无需使用新别名修改 NGINX。

我用正则表达式尝试了各种方法,例如:

location ~ ^(/[^/]+) {
    alias /var/www/html/admin;
    add_header X-AuthCode $1;
    index index.php index.html index.htm;

    location ~ \.php$ {
        limit_req zone=one burst=8;
        try_files $uri =404;
        fastcgi_index index.php;
        fastcgi_pass php;
        include fastcgi_params;
        fastcgi_buffering on;
        fastcgi_buffers 96 32k;
        fastcgi_buffer_size 32k;
        fastcgi_max_temp_file_size 0;
        fastcgi_keep_conn on;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }
}

但不能让它工作!我只是得到 403 禁止。

整个服务器块(根据 Ivan 的建议):

server {
        listen 80;
        location ~ ^/(?<authcode>[^/]+) {
            alias /var/www/html/admin;
            index index.php index.html index.htm;

            location ~ \.php$ {
                limit_req zone=one burst=8;
                try_files $uri =404;
                fastcgi_index index.php;
                fastcgi_pass php;
                include fastcgi_params;
                fastcgi_buffering on;
                fastcgi_buffers 96 32k;
                fastcgi_buffer_size 32k;
                fastcgi_max_temp_file_size 0;
                fastcgi_keep_conn on;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                fastcgi_param SCRIPT_NAME $fastcgi_script_name;
                fastcgi_param AUTHCODE $authcode;
            }
        }
    }

谢谢你:)

【问题讨论】:

    标签: nginx


    【解决方案1】:

    使用add_header 指令,在nginx 从您的PHP 后端收到响应后,您将向用户浏览器的nginx 响应添加X-AuthCode 标头。您应该做的是将带有 fastcgi_param 指令的 URI 前缀传递给您的 PHP 后端,例如

    location ~ ^/(?<authcode>[^/]+) {
        ...
        location ~ \.php$ {
            ...
            fastcgi_param AUTHCODE $authcode;
            ...
    

    然后检查$_SERVER['AUTHCODE']的内容。

    但这并不能回答您为什么会收到 403 HTTP 错误的问题。我认为您的配置中还有其他位置可以在此位置执行之前捕获请求。你可以只测试这个位置而不测试其他位置吗?如果您的第一个示例有效,那么这个示例也应该有效。

    【讨论】:

    • 感谢 Ivan,很高兴知道我当时并没有做错事。这个参数的想法很棒!不过,我仍然无法克服 403 错误,我已经用整个服务器配置编辑了主要问题,因为由于篇幅原因我无法在此处发布。谢谢!
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多