我目前正在启动一个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,另一个位置将导致在正则表达式匹配时将其选中。