У меня есть такой файл сервера
server {
listen 80;
server_name subdomain.example.com;
return 301 https://$server_name$request_uri;
location /.well-known/acme-challenge {
root /var/www/letsencrypt;
}
}
Теперь, когда я пробую sudo letsencrypt Renew
. Выдает ошибку и говорит, что не могу найти .well-known / acme-challenge
. Но как только я прокомментировал строку return 301
, сервер перезапустился, и все заработало.
Теперь я хочу повторно протестировать его, указав сначала местоположение, а не комментируя оператор return 301, но он говорит, что сертификат не подлежит обновлению
. Итак, вопрос в том, в каком порядке читается файл? дело?
и он не будет автоматически обновляться по этой причине для меня, для тех, кто продлевает, как вы справляетесь с этой ситуацией?
В данном случае речь идет не столько о заказе (хорошее объяснение того, как оценивается местоположение и регекс, можно найти здесь: https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms).
Для таких вещей, как блоки локации, короткая версия лучше всего подходит, чем первая.
В вашем случае, однако, заказ считается, потому что вы используете return
. Per https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return:
Прекращает обработку и возвращает клиенту указанный код. Нестандартный код 444 закрывает соединение без отправки заголовка ответа.
Ключ здесь в том, что return
немедленно прекращает обработку/оценку, так что происходит то, что nginx не смотрит ни на что ниже return
.
Так что вам просто нужно перенести этот пункт return
под ваш блок расположения. Что касается тестирования, я попробую добавить --test-cert
в вашу командную строку (см. https://certbot.eff.org/docs/using.html#certbot-command-line-options).
Это позволит избежать "проблемы", которая возникает при попытке использования их производственного сервера, который сообщает, что у вас есть действительный сертификат, и что вам не нужен новый в данный момент.
Вы должны включить свою директиву return
в блок location
, тогда используются обычные правила согласования блоков location
:
server {
listen 80;
server_name subdomain.example.com;
location / {
return 301 https://$server_name$request_uri;
}
location /.well-known/acme-challenge {
root /var/www/letsencrypt;
}
}
отвечает на идею порядка строк в файлах конфигурации nginx
Да, это работает и полностью зависит от различных директив, указанных в другой контекст, поддерживаемый Nginx. С точки зрения непрофессионала, nginx сохраняет набор дел и применяет определенные алгоритмы соответственно с учетом наилучшего соответствия
.
Nginx использует алгоритм выбора
для принятия решений в сервер
контекст; в основном на основе двух директив, а именно. прослушивание
и имя_сервера
.
Можно определить несколько контекстов местоположения, каждое местоположение используется для обработки определенного типа запроса клиента, и каждое местоположение выбирается на основании соответствия местоположения определение против клиентского запроса с помощью алгоритма выбора
.
восходящий
контекст по умолчанию использует циклический перебор
, чтобы определить, на какой конкретный сервер передать запрос .