nginx 配置,如果未设置 $http_cookie,则拒绝存储在特定文件夹中的图像



我目前正在启动一个WordPress网站,该网站在添加图像上传时将其移动到某个文件夹中。在我的开发服务器上,除非在浏览器中设置了特定的$http_cookie,否则存储在该文件夹中的图像是不可访问的。以下是我在开发NGINX config:时使用的位置块

location ~ ^/wp-content/uploads/employee_message/(.*) {
if ($http_cookie !~ 'wp_2651267=user_employee123') {
return 301 https://sitename.com;
}
}

在开发服务器上,当我查看诸如http://sitename.com/wp-content/uploads/employee_message/1234-5678-1234-5678/image_here.png例如,它只允许我查看,如果我有wp_2651267=user_eemploye123 cookie集。这很好。

然而,当我将这个位置块移动到我的生产配置中时(我使用的是RunCloud(,它允许在有或没有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;
}

这可能会破坏我正在添加的cookie业务吗?

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

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

include /etc/nginx-rc/extra.d/runcloud-blog.location.main.*.conf;

当我运行一个测试时没有错误,而且它肯定已经被重新加载了很多次。是否有任何原因导致我的位置块在此设置中不起作用?我是否可以提供更多信息来帮助解决此问题?

非常感谢你花时间阅读这篇文章!如果你有任何见解,请告诉我。

谢谢,-Ryan

帮助人们在未来找到这个问题

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

通过理解Nginx服务器和位置块选择算法

根据问题,限制性较小的正则表达式location在限制性较大的location之前声明,因此它被选为location来服务请求。

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

最新更新