Я использую конфигурацию ниже. это работает, но проблема для меня - это повторение некоторых строк. в 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.