Назад | Перейти на главную страницу

Конфигурация nginx для безопасного обслуживания активов

У меня есть веб-приложение со статическим содержимым, которое может обслуживать динамические страницы и защищенный контент. Статическое содержимое находится в /public папка и должна обслуживаться непосредственно nginx. Динамический контент обслуживается 127.0.0.1:3000 вверх по течению. Защищенный контент также обслуживается восходящим потоком и доступен из /assets/* URL-адреса. Этот защищенный контент может иметь те же расширения файлов, что и статический контент, но он всегда находится в /assets/.

У меня есть рабочий nginx конфигурация с двумя локациями с одинаковыми правилами прокси. Есть ли способ каким-то образом уменьшить мою конфигурацию, объединив два местоположения, обслуживаемых восходящим потоком?

server {
  server_name  example.name;
  root /home/user/ruby18/app/public;
  try_files $uri @thin;
  location ^~ /assets/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://thin;
  }
  location ~* \.(jpeg|jpg|gif|png|ico|css|bmp|js)$ {
    root /home/user/ruby18/app/public;
  }
  location @thin {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://thin;
  }
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root html;
  }
}

upstream thin {
  server 127.0.0.1:3000;
}

include директива - это то, что вы ищете.

/etc/nginx/proxy.conf

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://thin;

/etc/nginx/nginx.conf

server {
    server_name  example.name;
    root /home/user/ruby18/app/public;
    try_files $uri @thin;
    location ^~ /assets/ {
        include proxy.conf;
    }
    location @thin {
        include proxy.conf;
    }
    ...