Nginx Config,如果$http#u cookie不是';t集

Nginx Config,如果$http#u cookie不是';t集,nginx,nginx-config,Nginx,Nginx Config,我目前正在启动一个WordPress网站,当图像上传被添加时,它会将图像上传到一个特定的文件夹中。在我的开发服务器上,我这样做是为了不访问存储在此文件夹中的图像,除非在浏览器中设置了特定的$http_cookie。以下是我在开发NGINX配置中使用的位置块: location ~ ^/wp-content/uploads/employee_message/(.*) { if ($http_cookie !~ 'wp_2651267=user_employee123') {

我目前正在启动一个WordPress网站,当图像上传被添加时,它会将图像上传到一个特定的文件夹中。在我的开发服务器上,我这样做是为了不访问存储在此文件夹中的图像,除非在浏览器中设置了特定的$http_cookie。以下是我在开发NGINX配置中使用的位置块:

location ~ ^/wp-content/uploads/employee_message/(.*) {
        if ($http_cookie !~ 'wp_2651267=user_employee123') {
                return 301 https://sitename.com;
        }
}
在开发服务器上,当我查看文件(例如)时,它只允许我查看设置了wp_2651267=user_employee123 cookie的文件。这很好

但是,当我将这个位置块移动到我的生产配置中(我使用的是RunCloud)时,它允许在有cookie或没有cookie的情况下查看图像。这不好

我看到下面的位置块是默认配置的一部分,上面的位置块在这个位置块之后被拉入:

location ~ .(ico|css|gif|jpe?g|png|gz|zip|flv|rar|wmv|avi|css|js|swf|png|htc|mpeg|mpg|txt|otf|ttf|eot|woff|woff2|svg|webp)$ {
    expires     1M;
    include /etc/nginx-rc/conf.d/sitename.d/headers.conf;
    add_header  Cache-Control "public";
    include /etc/nginx-rc/extra.d/sitename.location.static.*.conf;
    try_files $uri $uri/ /index.php$is_args$args;
}
有没有可能这会毁掉我加入的饼干业务

以下是RunCloud使用的配置示例:

我的位置块被拉到这条线上:

include /etc/nginx-rc/extra.d/runcloud-blog.location.main.*.conf;
当我运行一个测试时没有错误,而且它肯定被重新加载了很多次。我的位置块在此设置中不起作用有什么原因吗?我是否可以提供更多信息来帮助解决此问题

非常感谢您抽出时间阅读此文章!如果你有任何见解,请告诉我

谢谢, -Ryan

帮助人们在将来发现这个问题


然后,Nginx尝试按顺序匹配正则表达式位置。将立即选择与请求URI匹配的第一个正则表达式位置来服务请求

通过

根据问题,限制性较小的regex
location
是在限制性较大的
location
之前声明的,因此选择它作为
location
来服务请求


通过将限制性更强的位置移到另一个位置之前,将导致在正则表达式匹配时选择它。

Nginx然后尝试按顺序匹配正则表达式位置。将立即选择与请求URI匹配的第一个正则表达式位置来服务请求。因此,根据您的陈述,通用映像正则表达式首先命中,并且选择该位置来服务请求,因为它们都是regex@ShawnC. 这正是问题所在。我将它移动到include文件中,该文件在所有其他文件之前被调用,它开始工作。我早该知道的!非常感谢你的帮助!