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

nginx: упростить конфигурацию для принудительного использования ssl по определенному пути для приложения rails

Я использую конфигурацию ниже. это работает, но проблема для меня - это повторение некоторых строк. в proxy_* директивы должны быть в location /admin также, потому что только один location будет выполняться nginx по запросу. какие варианты у меня есть, чтобы удалить этот повторяющийся код, не извлекая его в новые файлы, и затем включить его?

есть ли возможность сказать nginx продолжать с location @rails после location /admin был выбран и обработан?

ах и кстати, в чем разница между location @rails и location /?

server {
  ...
  location /admin {
    include /etc/nginx/force_ssl;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://rails;

  }

  location @rails {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://rails;
  }
...
}

/ и т.д. / nginx / force_ssl:

if ( $scheme = "http" ) {
  rewrite  ^/(.*)$  https://$host/$1 permanent;
}

Вы задаете несколько вопросов.


Что касается первого вопроса, как избавиться от избыточности:

Как правило, вы можете переместить любую часть файла конфигурации в отдельный файл, а затем использовать include директива, чтобы включить его один или несколько раз. включить директиву


Второй вопрос относительно перенаправления из одного места в другое:

Используя rewrite директиве вы можете звонить в одно место из другого. Внутри Nginx создаст второй запрос для обработки вызываемого местоположения, но пользователь ничего этого не видит. С ключевым словом last после места назначения перезаписи вы говорите Nginx остановить обработку правил на этом этапе и выбрать следующее местоположение на основе текущего содержимого $uri, эта переменная содержит результат всех уже выполненных перезаписей. Так, например, если вы просто хотите перенаправить все на @rails вы можете использовать подобное правило, чтобы переписать любой URL-адрес в @rails а затем last говорит Nginx искать место с именем @rails:

rewrite . @rails last;

Подробности описаны здесь: модуль перезаписи


В третьем вопросе вы спрашиваете, есть ли разница между двумя местоположениями @rails и /admin:

Я не могу сказать вам, основываясь на опубликованных вами фрагментах. Я только вижу это /admin включает на один файл больше, чем @rails. Итак, ответ на этот вопрос зависит от вашего серверного приложения и контекста остальной конфигурации Nginx.