Как настроить apache 2.2, чтобы разрешить acme-challenge и передавать весь остальной трафик в AJP / tomcat

ЦЕЛЬ: Чтобы настроить сервер для выполнения автоматического обновления сертификатов SLL по протоколу acme (с использованием обезвоженного https://github.com/lukas2511/dehydrated ) с apache 2.2 / tomcat

Работа для автоматического обновления сертификата уже работает для виртуального eth0 (привязанного к уникальному IP-адресу)

Необходимо разрешить http://example.com/.well-known/acme-challenge/ выполнять запрос домена при передаче все остальное перенесено на AJP / Tomcat

iptables

В ходе поиска я просмотрел следующие ресурсы - мне кажется, что можно использовать несколько прокси-адресов, но я не уверен.

Настройте Apache с несколькими ProxyPass 2 / tomcat

Работа для автоматического обновления сертификата, уже работающего для virt eth0 (привязанного к уникальному IP-адресу)

Необходимо разрешить http://example.com/.well-known/acme -challenge / для выполнения запроса домена, одновременно передавая все остальное в AJP / Tomcat

iptables

Посмотрел следующие ресурсы в моем поиске - похоже, что несколько прокси-адресов могут быть подходящим вариантом, но я не уверен.

Настройте Apache с несколькими ProxyPass 2 / tomcat

Работа для автоматического обновления сертификата, уже работающего для virt eth0 (привязанного к уникальному IP-адресу)

Необходимо разрешить http://example.com/.well-known/acme -challenge / для выполнения запроса домена, одновременно передавая все остальное в AJP / Tomcat

iptables

Посмотрел следующие ресурсы в моем поиске - похоже, что несколько прокси-адресов могут быть подходящим вариантом, но я не уверен.

Настройте Apache с несколькими ProxyPass https://stackoverflow.com/questions/45914235/configure-apache-with-multiple-proxypass

Этот вопрос кажется похожим на то, что я делаю, но не вызвал поддержки.

Как настроить Apache 2.2 для пересылки всех поддоменов в Tomcat, кроме корневого домена

server {
  listen 80;
  listen 443 ssl;

  server_name {{ .SERVER_NAME }} www.{{ .SERVER_NAME }};

  ssl_certificate     /etc/ssl/nginx.crt;
  ssl_certificate_key /etc/ssl/nginx.key;

  if ($http_x_forwarded_proto != "https") {
      rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent;
  }

  # Nginx will reject anything not matching /
  location / {
    # Reject requests with unsupported HTTP method
    if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE|PATCH)$) {
      return 405;
    }

    # Only requests matching the whitelist expectations will
    # get sent to the application server
    proxy_pass http://site_container:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_redirect     off;
    proxy_set_header   Host                 $http_host;
    proxy_set_header   X-Real-IP            $remote_addr;
    proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto    $http_x_forwarded_proto;
    proxy_set_header   X-Forwarded-Port     $http_x_forwarded_port;
    proxy_cache_bypass $http_upgrade;
  }
}

Это архитектура ECS с контейнерами nginx и приложений в одном экземпляре EC2.

1
задан 5 January 2018 в 01:31
1 ответ

Директива rewrite по умолчанию добавляет строку запроса к URL-адресу замены, аналогично [QSA] Apache. Из документации :

Если строка замены включает новые аргументы запроса, аргументы предыдущего запроса добавляются после них. Если это нежелательно, поставьте вопросительный знак в конце строки замены, чтобы избежать добавления их, например:

 rewrite ^ / users /(.*)$ / show? User = $ 1?  последний;
 

Но это не , как вы должны решить эту проблему.

Это имеет дополнительную проблему в том, что перенаправление http на https неэффективно. Это if должно оцениваться на каждый запрос, а перезапись имеет беспричинное регулярное выражение. Для получения дополнительной информации см. Taxing Rewrites .

Вместо этого вы должны иметь полностью отдельный блок сервера для HTTP и HTTPS и удалить if / ] перепишите из блока HTTPS сервера полностью.

server {
  listen 80;
  listen [::]:80; # You also forgot this...

  server_name {{ .SERVER_NAME }} www.{{ .SERVER_NAME }};

  return 301 https://{{ .SERVER_NAME }}$request_uri;
}
5
ответ дан 3 December 2019 в 17:02

Теги

Похожие вопросы