因此有这样的 nginx 配置:
server {
listen 1.1.1.1:80;
server_name site.ru www.site.ru;
error_log /var/log/site.ru.error.log error;
access_log /var/log/site.ru.log combined;
set $root_path /home/user/site;
location / {
proxy_pass http://1.1.1.1:8080;
# ... параметры
}
location = /favicon.ico {
root ${root_path}/img;
access_log off;
expires max;
# try_files $uri =404; # не понятно надо ли, похоже нет! не обязательно!
}
# запрещеные папки и урлы
location ~* /\.sv { return 400; }
location ~* /\.ht { return 400; }
location ~* /\.[\w]+ { return 400; }
location ~* /cgi { return 400; }
location ~* /phpunit { return 400; }
location ~* /vendor { return 400; }
location ~* /wp\- { return 400; }
# разные запрещеные расширения
location ~* \.(php|html|htm|rsp|asp|py|key|conf|ini|sock|pem|crt)$ {
# add_header local php always;
# deny all;
return 400;
}
# вот тут самое интересное. я обрабатываю статику и картинки
location ~* \.(jpeg|jpg|png|gif|bmp|css|js)$ {
root $root_path;
access_log off;
expires max;
try_files $uri =404; # почему если запрашиваю НЕ существующий файл он мне возвращает ошибку 400! хотя я же говорю давай 404
}
# перенаправление статических файлов работает исправно
location ^~ /static {
access_log off;
rewrite ^/static/(.*)$ /assets/$1 permanent;
}
# ?? вот тут не понятно. папки такой все равно нет document_errors
location /error/ {
alias /home/user/site/document_errors/;
}
# похоже не используется
location @fallback {
proxy_pass http://1.1.1.1:8080;
}
}
我得到了一张图片,例如地址
site.ru/images/img.jpg - 图像存在,返回响应代码 200
但现在如果我特意扭曲名字并问
site.ru/images/img123.jpg - 图像不存在,响应代码 400
为什么会发生这种情况?好的,对于这样的请求
site.ru/.svn site.ru/.htaccess site.ru/any_file.php
答案正确 - 响应代码 400
为什么 try_files $uri =404;它没有给出 404 代码,但出于某种原因给出了 400。这是怎么回事
配置已经稍微简化,但含义仍然正确。