Puncte:1

Proxy-ul invers Apache nu funcționează și generează o eroare 404

drapel bl

Am o instalație de Shiboleth care rulează pe Jetty 9. Prin Apache am un proxy invers la portul 8080 al Jetty care servește instanța Shiboleth.

Când curl http://localhost:8080/idp/shibboleth în consolă, răspunsul instanței este generat corect.

Totuși, când fac același lucru pe browserul meu https://idp.example.com/idp/shibboleth Primesc o eroare 404.

Acesta este un indiciu că proxy-ul invers nu funcționează corect?

Aceasta este apache conf

SSLUseCapsare activată
SSLSstaplingResponderTimeout 5
SSLStaplingReturnResponderErrors dezactivat
SSLStaplingCache shmcb:/var/run/ocsp(128000)

<VirtualHost *:80>
ServerName „idp.spectrum.com.cy”
Redirecționează permanent „/” „https://idp.spectrum.com.cy/”
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
 ServerName idp.spectrum.com.cy:443
 ServerAdmin [email protected]
 # Debian
 CustomLog /var/log/apache2/idp.spectrum.com.cy.log combinat
 ErrorLog /var/log/apache2/idp.spectrum.com.cy.org-error.log
 # Centos
 #CustomLog /var/log/httpd/idp.example.org.log combinat
 #ErrorLog /var/log/httpd/idp.example.org-error.log
 
 DocumentRoot /var/www/html/idp.spectrum.com.cy
 
 SSLEngine activat
 SSLProtocol Toate -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 EDHWLO+RC4ARSNADH ! !MD5 !EXP !PSK !SRP !DSS !RC4"

 SSLHonorCipherComanda activat
 
 # Nu permiteți încorporarea paginii de conectare a IdP-ului dvs. într-un iframe și
 # Activați HTTP Strict Transport Security cu o durată de 2 ani
 <IfModule headers_module>
    Set antet X-Frame-Opțiuni DENY
    Set antet Strict-Transport-Security "max-age=63072000 ; includeSubDomains ; preload"
 </IfModule>
 
 # Debian
 SSLCertificateFile /etc/ssl/certs/idp.spectrum.com.cy.crt
 SSLCertificateKeyFile /etc/ssl/private/idp.spectrum.com.cy.key

 # ACME-CA sau GEANT_OV_RSA_CA_4 (Pentru utilizatorii care folosesc 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


 # Centos
 #SSLCertificateFile /etc/pki/tls/certs/idp.example.org.crt
 #SSLCertificateKeyFile /etc/pki/tls/private/idp.example.org.key

 # ACME-CA sau GEANT_OV_RSA_CA_4 (Pentru utilizatorii care folosesc 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 activat
    RequestHeader set X-Forwarded-Proto „https”
    ProxyPass /idp http://localhost:8080/idp/ retry=5
    ProxyPassReverse /idp http://localhost:8080/idp/ retry=5

    <Locație /idp>
       Solicitați toate acordate
    </Locație>
 </IfModule>
</VirtualHost>
</IfModule>

<VirtualHost 127.0.0.1:80>
  ProxyPass /idp http://localhost:8080/idp/ retry=5
  ProxyPassReverse /idp http://localhost:8080/idp/ retry=5
  <Locație /idp>
   Solicitați toate acordate
  </Locație>
</VirtualHost>

Mi-am simplificat fișierul conf pentru a elimina https. Configurația de mai jos funcționează bine, dar numai cu http. Voi investiga de ce configurația https generează eroarea 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>
# Această gazdă virtuală este aici doar pentru a gestiona comenzile administrative 
pentru Shibboleth, executat de localhost
<VirtualHost 127.0.0.1:80>
  ProxyPass /idp http://localhost:8080/idp/ retry=5
  ProxyPassReverse /idp http://localhost:8080/idp/ retry=5
  <Locație /idp>
    Solicitați toate acordate
  </Locație>
</VirtualHost>
djdomi avatar
drapel za
Nu sunt sigur, dar stomacul meu crede că nu există o definiție pentru /idp la nicăieri. puteți arunca o privire pe https://serverfault.com/questions/429122/apache-virtualhost-proxy-with-a-subdirectory pentru un indiciu pentru a vă rezolva problema
pierostz avatar
drapel bl
@djdomi când mă curl la http//localhost:8080/idp, primesc în continuare un răspuns de la instanța shibboleth. Deci, cred că nu este cazul...?
djdomi avatar
drapel za
Da`` are o intrare pentru el, dar nu `` sau să explicăm cu alte cuvinte: fiecare VirtualHost este ca o instalare Apache autonomă
pierostz avatar
drapel bl
Daca suntem pe aceeasi pagina. Există trei gazde virtuale în cele de mai sus. Unul este pentru portul 80 care redirecționează către https, unul pentru https pe portul 443 (cel cred că spuneți că lipsește) și unul pentru localhost pe portul 80.
drapel in
Este mod_proxy activat?
drapel in
S-ar putea să doriți să eliminați toate acele directive IfModule, acestea au utilizările lor, dar cel mai adesea ascund problemele în loc să le prevină.
Puncte:2
drapel cn

Încercați să eliminați portul din Numele serverului directivă. adică,

ServerName idp.spectrum.com.cy

Pe https://httpd.apache.org/docs/2.4/mod/core.html#servername portul este opțional și permis, dar următoarea mențiune din documentație pare că ar putea fi motivul pentru care VirtualHost configurația nu este preluată (browserele nu au trimis numărul portului în Gazdă: antet).

Dacă utilizați gazde virtuale bazate pe nume, cel Numele serverului în interiorul unui <VirtualHost> secțiunea specifică ce nume de gazdă trebuie să apară în cererii Gazdă: antet pentru a se potrivi cu această gazdă virtuală.

pierostz avatar
drapel bl
Am încercat ServerName cu și fără portul fără nicio diferență. Am omis portul pe baza documentelor furnizate de dvs. Mulțumesc pentru intrare.
Puncte:1
drapel cm

Ar trebui sa fie

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

Observați slash-ul final din ProxyPass primul argument al comenzii. Aliniați întotdeauna barele oblice finale în ambele argumente.

Ale mele VirtualHost declarațiile sunt destul de simple și conțin doar minimul necesar pentru a funcționa:

<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>

Aici sunt IDP-urile mele /etc/httpd/conf.d/idp.conf:

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

<Proxy http://localhost:8080>
       Solicitați toate acordate
       RequestHeader set X-Forwarded-Proto https
       RequestHeader a activat X-Proxied-Https
       RequestHeader set Proxy-ssl-id %{SSL_SESSION_ID}s
</Proxy>
pierostz avatar
drapel bl
Mulțumesc mult pentru asta. Slash-ul final lipsea. Atat de simplu. Am mai avut câteva probleme, dar fără bara oblică nu le-aș rezolva.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.