В Nginx есть try_files
директива config, которая «проверяет наличие файлов по порядку и возвращает первый найденный файл». Я нахожу это очень аккуратным, чтобы сделать это
location ~* \.(gif|jpe?g|css|js)$ {
try_files $uri 404;
}
что является безопасным способом непосредственного обслуживания статических файлов, не беспокоясь о веб-фреймворках. Как я могу сделать то же самое в Apache?
apache-2.2
nginx
phunehehe
источник
источник
Ответы:
Я обычно вижу это сделано с mod_rewrite:
Это означает, что «если файл не существует в файловой системе, прокси-сервер через мой кластер mod_proxy_balancer». В противном случае, если файл существует в файловой системе, он просто обслуживается Apache относительно определенного
DocumentRoot
в вашем виртуальном хосте.Но это не мой любимый способ, в основном потому, что для этого потребуется
stat
системный вызов на запрос.С mod_proxy вы можете использовать,
ProxyPassMatch
если у вас достаточно новая версия Apache ( см. Документацию ). Такие как:ProxyPassMatch \.(gif|jpe?g|css|js)$ !
Который использует! чтобы указать, что Apache не должен прокси-запросы, соответствующие этому регулярному выражению.
Если вы используете более старую версию Apache, вам будет
ProxyPass
доступна директива, но она соответствует только префиксам URI (это мой текущий предпочтительный метод):Конечно, если вы должны выполнить сопоставление с регулярным выражением, как вы упомянули выше, вы можете просто изменить правило mod_rewrite, которое я разместил сверху, чтобы отрицать совпадение с
%{REQUEST_URI}
.Надеюсь, это поможет!
источник
try_files
, потому что он проверяет наличие файла.ProxyPass
Хотя, похоже, нет способа сделать это .