Я использую Nginx в качестве обратного прокси для нескольких приложений в нескольких серверах, и я пытаюсь добавить общие директивы кэша к статическим файлам каждого приложения.
Моя исходная конфигурация - что-то вроде этого:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
}
...
Для добавления статических директив файла, я могу добавить вложенное местоположение к каждому местоположению как это:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8081;
}
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8082;
}
}
Так как у меня есть что-то как 30 приложений, я пытаюсь упростить код до чего-то вроде этого:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
include static_file_config.conf;
}
location /app2{
...
proxy_pass http://127.0.0.1:8081/app2;
include static_file_config.conf;
}
Существует ли способ, которым я могу упростить код, таким образом, я не заканчиваю 30 идентичными местами для статических файлов?
Обратите внимание на то, что каждое приложение служит своим собственным статическим файлам.
Возможно, вместо того, чтобы иметь много местоположений, вы могли бы использовать регулярное выражение для сопоставления определенного URI с вашим вышестоящим приложением:
location ~ /(app)(\d+) {
proxy_pass http://127.0.0.1:808$2/$1$2;
include static_file_config.conf;
}
Вы можете увидеть, как это работает здесь: https: // regex101 .com / r / sM3eS9 / 1
У меня была связанная проблема, но моя была связана с контейнерами Docker, и я решил ее, выполнив следующие действия:
server {
listen 80;
server_name some_application_name;
port_in_redirect off;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:5555;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api {
rewrite ^/api(.*)$ $1 break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:5000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Вышеуказанное имеет контейнер, работающий на 5555, и .NET Core Api, работающий на 5000, и я не хотел изменять маршруты в .NET api, поэтому переписывание гарантировало, что маршрут был правильным для API для корректной работы.