Nginx 配置,如果未设置 $http_cookie 则拒绝存储在特定文件夹中的图像
Nginx Config, Deny Image Stored in Specific Folder If $http_cookie Isn't Set
我目前正在启动一个 WordPress 站点,该站点在添加图像时将上传的图像移动到特定文件夹中。在我的开发服务器上,我已将此文件夹中存储的图像设置为不可访问,除非在浏览器中设置了特定的 $http_cookie。这是我在开发 NGINX 配置中为此使用的位置块:
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_employee123 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;
我运行测试没有报错,肯定重载了很多很多次。是否有任何原因导致我的位置块在此设置中不起作用?我可以提供更多信息来帮助解决此问题吗?
非常感谢您花时间阅读本文!如果您有任何见解,请告诉我。
谢谢,
-瑞安
帮助以后遇到这个问题的人
Nginx then tries to match against the regular expression locations sequentially. The first regular expression location that matches the request URI is immediately selected to serve the request.
通过Understanding Nginx Server and Location Block Selection Algorithms
根据问题,限制较少的正则表达式 location
在限制较多的 location
之前声明,因此它被选为 location
来满足请求。
通过将限制性更强的位置移动到另一个位置之前,将导致在正则表达式匹配时选择它。
我目前正在启动一个 WordPress 站点,该站点在添加图像时将上传的图像移动到特定文件夹中。在我的开发服务器上,我已将此文件夹中存储的图像设置为不可访问,除非在浏览器中设置了特定的 $http_cookie。这是我在开发 NGINX 配置中为此使用的位置块:
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_employee123 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;
我运行测试没有报错,肯定重载了很多很多次。是否有任何原因导致我的位置块在此设置中不起作用?我可以提供更多信息来帮助解决此问题吗?
非常感谢您花时间阅读本文!如果您有任何见解,请告诉我。
谢谢, -瑞安
帮助以后遇到这个问题的人
Nginx then tries to match against the regular expression locations sequentially. The first regular expression location that matches the request URI is immediately selected to serve the request.
通过Understanding Nginx Server and Location Block Selection Algorithms
根据问题,限制较少的正则表达式 location
在限制较多的 location
之前声明,因此它被选为 location
来满足请求。
通过将限制性更强的位置移动到另一个位置之前,将导致在正则表达式匹配时选择它。