@Iceforest

По какой причине выдается 404 ошибка при получение letsencrypt сертификата?

Схема: сайт ===> 2 балансировщика nginx ===> app1 и app2
Получаю сертификат на сервере балансировщика 1, а на втором балансировщики при получение сертификата отправляю на первый балансировщик(да, это криво, лучше делать через rsync или fstab, но так как есть)

При challenge возникает ошибка:
Type:   unauthorized
Detail: Invalid response from
http://app.test.ru/.well-known/acme-challenge/Tcz1WXPz5Q-CjQlAIzJ2Y69langzO-zTfjxKF5UDyDk:
   "<html>
   <head><title>404 Not Found</title></head>
   <body bgcolor="white">
   <center><h1>404 Not Found</h1></center>
   <hr><center>"


На балансировщики 1 2 конфига: app.conf и lb1.conf

app.conf

upstream lb {
  server lb1.test.ru;
  server lb2.test.ru;  
                 }

server {
  listen 80;
  server_name app.test.ru;

  location / {
    return 301 https://app.test.ru$request_uri;
             }

  location /.well-known/acme-challenge/ {proxy_pass http://lb;}
  
        }


lb1.conf

upstream backend {
  server app1.test.ru;
  server app2.test.ru;
  check interval=1000 rise=1 fall=2 timeout=1000 type=http;
  check_http_send "GET /status HTTP/1.0\r\n\r\n";
  check_http_expect_alive http_2xx http_3xx;
}

server {
  listen 80;
  server_name app1.test.ru;

  access_log /var/log/nginx/log.access.log themain;
  
  location / {return 201;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name app2.test.ru;

  access_log /var/log/nginx/log.access.log themain;
    
  location / {return 202;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name lb1.test.ru;
  
  location /.well-known/acme-challenge {root /opt/www/acme;}
  
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://backend;
  }
}


на втором балансировщики app.conf такой же

lb2.conf

upstream backend {
  server app1.test.ru;
  server app2.test.ru;
  check interval=1000 rise=1 fall=2 timeout=1000 type=http;
  check_http_send "GET /status HTTP/1.0\r\n\r\n";
  check_http_expect_alive http_2xx http_3xx;
}

server {
  listen 80;
  server_name app1.test.ru;

  access_log /var/log/nginx/log.access.log themain;
  
  location / {return 201;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name app2.test.ru;

  access_log /var/log/nginx/log.access.log themain;  
  
  location / {return 202;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name lb2.test.ru;
  
  location /.well-known/acme-challenge {proxy_pass http://lb1.test.ru;}
  
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://backend;
  }
}


2 сервера app1 и app2(одинаковые):

server {
  listen 80;    

  location / {
    set_real_ip_from unix:;
    real_ip_header    X-Forwarded-For;
    real_ip_recursive on;
    proxy_pass http://127.0.0.1:8080;
  }
}
  • Вопрос задан
  • 892 просмотра
Пригласить эксперта
Ответы на вопрос 2
karabanov
@karabanov
Системный администратор
Вероятность успеха крайне мала. У тебя ведь два сервера, а токен есть только на одном, как угадать на какой сервер придёт проверяющий бот?
Подтверждай через DNS.
Ответ написан
@Iceforest Автор вопроса
решение: удалил лишний конфиг app.conf

в итоге получилось 2 конфига:

lb1.conf
upstream backend {
  server app1.test.ru;
  server app2.test.ru;
  check interval=1000 rise=1 fall=2 timeout=1000 type=http;
  check_http_send "GET /status HTTP/1.0\r\n\r\n";
  check_http_expect_alive http_2xx http_3xx;
}

server {
  listen 80;
  server_name app1.test.ru;

  access_log /var/log/nginx/log.access.log themain;

  location / {return 201;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name app2.test.ru;

  access_log /var/log/nginx/log.access.log themain;

  location / {return 202;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name app.test.ru;

  location ~ /.well-known {
    allow all;
    root /opt/www/acme/;}

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://backend;
  }
}


lb2.conf

upstream backend {
  server app1.test.ru;
  server app2.test.ru;
  check interval=1000 rise=1 fall=2 timeout=1000 type=http;
  check_http_send "GET /status HTTP/1.0\r\n\r\n";
  check_http_expect_alive http_2xx http_3xx;
}

server {
  listen 80;
  server_name app1.test.ru;

  access_log /var/log/nginx/log.access.log themain;

  location / {return 201;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name app2.test.ru;

  access_log /var/log/nginx/log.access.log themain;

  location / {return 202;}
  location /status {return 200;}
}

server {
  listen 80;
  server_name app.test.ru;

  location ~ /.well-known {proxy_set_header Host app.test.ru;
    proxy_pass http://lb1.test.ru;}

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://backend;
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы