nginx обратный прокси и разрешить только некоторые расширения файлов

#nginx #proxy #reverse

#nginx #прокси #обратный

Вопрос:

Я настраиваю обратный прокси-сервер nginx, как показано ниже, и это рабочий файл

Но я хочу, чтобы этот nginx разрешал только некоторые расширения файлов, такие как html, png, php, svg, jpg, css, js..

и заблокировать другое расширение, я не знаю, как это сделать после многих тестов и следовать многим инструкциям

Спасибо

 server {
    
     listen 443 ssl ;
     listen 8080 ;
   
    
    ssl on;
    ssl_certificate /etc/nginx/bundle.crt;
    ssl_certificate_key /etc/nginx/cert.key;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
   
    server_name mydomain.net;  
   
   
    
     location / {
       proxy_pass https://172.16.0.1:8080/;  # foward all request to another website
       proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;       
        
        }  

    
  
   
}   
 

Ответ №1:

Самый простой — проверить URI с помощью регулярного выражения:

 if ($uri !~ .(html|png|php|svg|jpg|css|js)$) {
    return 403;
}
 

Чтобы также разрешить URI без расширения, используйте

 if ($uri !~ /([^./]*|[^/]*.(html|png|php|svg|jpg|css|js))$) {
    return 403;
}
 

Комментарии:

1. В любом случае, спасибо, брат, как разрешить URL-адрес, который не содержит никакого расширения файла? например, hxxp://mydomain.com/abc/xyz

2. @AnthonyChen обновил ответ.

3. Привет, Иван, большое тебе спасибо, я очень плохо разбираюсь в регулярных выражениях, можешь ли ты помочь мне изменить регулярное выражение, чтобы отключить проверку с учетом регистра в расширении файла, а также разрешить uri contains «robots.txt »

4. @AnthonyChen Попробуйте if ($uri !~* /(robots.txt|[^./]*|[^/]*.(html|png|php|svg|jpg|css|js))$) { ... } . Обратите !~* внимание, что вместо !~ , это делает совпадение регулярных выражений нечувствительным к регистру.

5. Спасибо, Иван, регулярное выражение работает так, как описано. Вы профессионал в этом