我正在尝试配置nginx反向代理以通过REST API提供图像。
但是我仍然坚持配置对这些图像的访问。我需要在以下位置禁用访问权限和列表功能:
domaine.name/images/
domaine.name/images/t/
domaine.name/images/t/p/
但是要允许访问:
domaine.name/images/profile.png
domaine.name/images/t/zgdizgugiuzgdiu.gif
domaine.name/images/t/p/878675465.png
您知道如何在nginx配置文件上执行此操作吗?这是正则表达式还是其他?
我已经尝试过这种正则表达式,但是没有用。
location ~* ^.+.(jpeg|gif|png|jpg)
{
allow all;
}
谢谢!
编辑
这是我完整的nginx配置:
server {
server_name www.domain.com domain.com;
location /images/ {
deny all;
return 403;
}
location /images/^.+.(jpeg|gif|png|jpg) {
allow all;
}
location / {
proxy_pass http://127.0.0.1:8080/;
}
location /dbadmin {
deny all;
proxy_pass http://127.0.0.1:4321/dbadmin;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
error_page 400 /ErrorPages/HTTP400.html;
error_page 401 /ErrorPages/HTTP401.html;
error_page 402 /ErrorPages/HTTP402.html;
error_page 403 /ErrorPages/HTTP403.html;
error_page 404 /ErrorPages/HTTP404.html;
error_page 500 /ErrorPages/HTTP500.html;
error_page 501 /ErrorPages/HTTP501.html;
error_page 502 /ErrorPages/HTTP502.html;
error_page 503 /ErrorPages/HTTP503.html;
location /ErrorPages/ {
alias /home/webservices/errorPages/;
internal;
}
}
server {
server_name api.domain.com;
location / {
deny all;
}
location /v1/ {
proxy_pass http://127.0.0.1:8888/;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
error_page 400 /ErrorPages/HTTP400.html;
error_page 401 /ErrorPages/HTTP401.html;
error_page 402 /ErrorPages/HTTP402.html;
error_page 403 /ErrorPages/HTTP403.html;
error_page 404 /ErrorPages/HTTP404.html;
error_page 500 /ErrorPages/HTTP500.html;
error_page 501 /ErrorPages/HTTP501.html;
error_page 502 /ErrorPages/HTTP502.html;
error_page 503 /ErrorPages/HTTP503.html;
location /ErrorPages/ {
alias /home/webservices/errorPages/;
internal;
}
}
server {
if ($host = www.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name www.domain.com domain.com;
return 404; # managed by Certbot
}
server {
if ($host = api.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name api.domain.com;
return 404; # managed by Certbot
}
编辑2:
我解决了问题! 我把它放在配置中的位置块上并工作了。在我尝试匹配images / url和/images/something.png之前。我不知道为什么它不起作用。
为解决此问题,我尝试匹配/ images / url,因此domain.com/images/
将被阻止。然后,我尝试匹配所有以.png .jpeg等结尾的网址,以允许它们。
location /images/ {
deny all;
return 404;
}
location ~* .(png|gif|ico|jpg|jpeg|svg)$ {
proxy_pass http://127.0.0.1:8080;
}