У меня есть веб-сайт, обслуживаемый nginx
со следующими требованиями:
Чтобы удовлетворить (1) у меня есть небольшое перенаправление http-> https в моем nginx
config. Чтобы удовлетворить (2), мне нужно изменить указанную конфигурацию, чтобы я мог использовать метод аутентификации Let's Encrypt через webroot.
Я пытаюсь найти оптимальное решение, удовлетворяющее обоим требованиям. Я придумал следующее, которое работает.
Перед:
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
После:
server {
listen 80;
server_name example.com;
location ~ /\.well-known\/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
if ($request_uri !~ /\.well-known) {
return 301 https://example.com$request_uri;
}
}
Однако я надеялся найти другой способ сделать это. Причины тому:
если зло. В этом случае это может быть не так уж важно, потому что это просто перенаправление http-> https, которое должно быть очень низкая посещаемость.
Что еще более важно, избегая if
упростит привязку аутентификации webroot ко всем моим сайтам, работающим за nginx
так как я мог просто плюнуть это location
директива в .conf
что я мог бы затем волей-неволей включить во все мои маленькие блоки перенаправления http-> https.
В этот вопрос, Алекс приводит пример с голым return
заявление, но это не работает для меня (nginx -t
жалуется с nginx: [emerg] invalid number of arguments in "return" directive in /etc/nginx/...
).
Есть ли лучший способ сделать это? Или мое решение, приведенное выше, так же хорошо, как и получается?
Вы можете заменить if
с нормальным расположением:
server {
listen 80;
server_name example.com;
location /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
location / {
return 301 https://example.com$request_uri;
}
}
Причина: выбирается и запоминается место с самым длинным совпадающим префиксом.
Чтобы найти местоположение, соответствующее заданному запросу, nginx сначала проверяет местоположения, определенные с помощью строк префикса (местоположения префиксов). Среди них выбирается и запоминается место с самым длинным совпадающим префиксом. Затем проверяются регулярные выражения в порядке их появления в файле конфигурации. Поиск регулярных выражений завершается при первом совпадении, и используется соответствующая конфигурация. Если совпадения с регулярным выражением не найдено, используется ранее запомненная конфигурация расположения префикса.
Источник: Документы Nginx