Рейтинг:1

Обратный прокси-сервер Apache не работает и выдает ошибку 404

флаг bl

У меня есть установка Shiboleth, которая работает на Jetty 9. Через Apache у меня есть обратный прокси-сервер для порта 8080 Jetty, который обслуживает экземпляр Shiboleth.

Когда я скручиваю http://localhost:8080/idp/shibboleth в консоли, ответ экземпляра генерируется правильно.

Однако, когда я делаю то же самое в своем браузере https://idp.example.com/idp/shibboleth Я получаю ошибку 404.

Это какой-то признак того, что обратный прокси работает неправильно?

Это моя конфа апача

SSLUseStapling включен
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors выключен
SSLStaplingCache shmcb:/var/run/ocsp(128000)

<Виртуальный хост *:80>
Имя сервера "idp.spectrum.com.cy"
Редирект постоянный "/" "https://idp.spectrum.com.cy/"
</ виртуальный хост>

<IfModule mod_ssl.c>
<Виртуальный хост _default_:443>
 Имя сервера idp.spectrum.com.cy:443
 Администратор сервера [email protected]
 # Дебиан
 CustomLog /var/log/apache2/idp.spectrum.com.cy.log вместе
 Журнал ошибок /var/log/apache2/idp.spectrum.com.cy.org-error.log
 # Центос
 #CustomLog /var/log/httpd/idp.example.org.log вместе
 #ErrorLog /var/log/httpd/idp.example.org-error.log
 
 DocumentRoot /var/www/html/idp.spectrum.com.cy
 
 SSLEngine включен
 Протокол SSL Все -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL ES !LOW ! !MD5 !EXP !PSK !SRP !DSS !RC4"

 SSLHonorCipherOrder on
 
 # Запретить встраивание страницы входа вашего IdP в iframe и
 # Включить HTTP Strict Transport Security на 2 года.
 <IfModule headers_module>
    Заголовок устанавливает X-Frame-Options DENY
    Набор заголовков Strict-Transport-Security "max-age=63072000 ; includeSubDomains ; preload"
 </ЕслиМодуль>
 
 # Дебиан
 SSLCertificateFile /etc/ssl/certs/idp.spectrum.com.cy.crt
 SSLCertificateKeyFile /etc/ssl/private/idp.spectrum.com.cy.key

 # ACME-CA или GEANT_OV_RSA_CA_4 (для пользователей, использующих GARR TCS/Sectigo RSA Organization Validation Secure Server CA)
 #SSLCACertificateFile /etc/ssl/certs/ACME-CA.pem
 #SSLCACertificateFile /etc/ssl/certs/GEANT_OV_RSA_CA_4.pem


 # Центос
 #SSLCertificateFile /etc/pki/tls/certs/idp.example.org.crt
 #SSLCertificateKeyFile /etc/pki/tls/private/idp.example.org.key

 # ACME-CA или GEANT_OV_RSA_CA_4 (для пользователей, использующих GARR TCS/Sectigo RSA Organization Validation Secure Server CA)
 #SSLCACertificateFile /etc/pki/tls/certs/ACME-CA.pem
 #SSLCACertificateFile /etc/pki/tls/certs/GEANT_OV_RSA_CA_4.pem

 <IfModule mod_proxy.c>
    ProxyPreserveHost включен
    RequestHeader устанавливает X-Forwarded-Proto "https"
    ProxyPass /idp http://localhost:8080/idp/retry=5
    ProxyPassReverse /idp http://localhost:8080/idp/retry=5

    <Местоположение /идентификатор>
       Требовать все предоставленные
    </местоположение>
 </ЕслиМодуль>
</ виртуальный хост>
</ЕслиМодуль>

<Виртуальный хост 127.0.0.1:80>
  ProxyPass /idp http://localhost:8080/idp/retry=5
  ProxyPassReverse /idp http://localhost:8080/idp/retry=5
  <Местоположение /идентификатор>
   Требовать все предоставленные
  </местоположение>
</ виртуальный хост>

Я упростил свой файл conf, чтобы удалить https. Приведенная ниже конфигурация работает нормально, но только с http. Я выясню, почему конфигурация https генерирует ошибку 404.

<VirtualHost *:80>
ServerName idp.spectrum.com.cy

 <IfModule mod_proxy.c>
    ProxyPreserveHost On
    ProxyPass /idp/ http://localhost:8080/idp/ retry=5
    ProxyPassReverse /idp/ http://localhost:8080/idp/ retry=5

    <Location /idp>
       Require all granted
    </Location>
 </IfModule>
# Этот виртуальный хост предназначен только для обработки административных команд 
для Shibboleth, выполняется с локального хоста
<Виртуальный хост 127.0.0.1:80>
  ProxyPass /idp http://localhost:8080/idp/retry=5
  ProxyPassReverse /idp http://localhost:8080/idp/retry=5
  <Местоположение /идентификатор>
    Требовать все предоставленные
  </местоположение>
</ виртуальный хост>
djdomi avatar
флаг za
Я не уверен, но мой желудок думает, что нигде нет определения /idp. вы можете посмотреть https://serverfault.com/questions/429122/apache-virtualhost-proxy-with-a-subdirectory для подсказки, чтобы решить вашу проблему
pierostz avatar
флаг bl
@djdomi, когда я перехожу на http//localhost:8080/idp, я все равно получаю ответ от экземпляра shibboleth. Я так понимаю дело не в этом...?
djdomi avatar
флаг za
Да `` есть запись для него, но нет `` или давайте объясним другими словами: каждый виртуальный хост похож на автономную установку apache
pierostz avatar
флаг bl
Если мы на одной волне. Выше есть три виртуальных хоста. Один для порта 80, который перенаправляет на https, один для https на порту 443 (тот, который, как вы говорите, отсутствует) и один для локального хоста на порту 80.
флаг in
Включен ли mod_proxy?
флаг in
Возможно, вы захотите удалить все эти директивы IfModule, у них есть свое применение, но чаще всего они скрывают проблемы, а не предотвращают их.
Рейтинг:2
флаг cn

Попробуйте удалить порт из Имя сервера директива. то есть,

Имя сервера idp.spectrum.com.cy

Пер https://httpd.apache.org/docs/2.4/mod/core.html#имя_сервера порт является необязательным и разрешенным, но следующее упоминание в документации звучит так, как будто это может быть причиной того, что Виртуальный хост конфигурация не подхватывается (браузеры не отправляют номер порта в Хозяин: заголовок).

Если вы используете виртуальные хосты на основе имени, Имя сервера внутри <VirtualHost> раздел указывает, какое имя хоста должно появиться в Запросы Хозяин: заголовок, соответствующий этому виртуальному хосту.

pierostz avatar
флаг bl
Я пробовал имя сервера с портом и без него без какой-либо разницы. Я пропустил порт на основе предоставленных вами документов. Спасибо за отзыв.
Рейтинг:1
флаг cm

Это должно быть

ProxyPass /idp/http://localhost:8080/idp/

Обратите внимание на косую черту в конце ПроксиПасс первый аргумент команды. Всегда выравнивайте конечные косые черты в обоих аргументах.

Мой Виртуальный хост объявления довольно просты и содержат только самый минимум для работы:

<VirtualHost *:80>
    DocumentRoot /var/www/html

    ServerName idp.example.com
    ServerAlias idp
    ErrorLog  logs/error_log
    CustomLog logs/access_log    
</VirtualHost>
<VirtualHost *:443>
    DocumentRoot /var/www/html

    SSLEngine on
    SSLProxyEngine on
    SSLCertificateKeyFile /etc/pki/tls/private/idp.example.com.key
    SSLCertificateFile /etc/pki/tls/certs/idp.example.com.crt
    SSLCertificateChainFile /etc/pki/tls/certs/chain.crt

    ServerName idp.example.com
    ServerAlias idp
    ErrorLog  logs/ssl-error_log
    CustomLog logs/ssl-access_log combined
</VirtualHost>

Вот мои внутренне перемещенные лица /etc/httpd/conf.d/idp.conf:

ProxyPass /idp/http://localhost:8080/idp/retry=5
ProxyPassReverse /idp/ http://localhost:8080/idp/

<Прокси-сервер http://localhost:8080>
       Требовать все предоставленные
       RequestHeader устанавливает X-Forwarded-Proto https
       RequestHeader устанавливает X-Proxied-Https на
       RequestHeader устанавливает прокси-ssl-id %{SSL_SESSION_ID}s
</прокси>
pierostz avatar
флаг bl
Большое спасибо за это. Косая черта в конце отсутствовала. Так просто. У меня было еще несколько проблем, но без косой черты я бы их не решил.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.