Score:1

Apache reverse proxy ไม่ทำงานและสร้างข้อผิดพลาด 404

ธง bl

ฉันมีการติดตั้ง Shiboleth ที่ทำงานบน Jetty 9 ผ่าน Apache ฉันมีพร็อกซีย้อนกลับไปยังพอร์ต 8080 ของ Jetty ซึ่งให้บริการอินสแตนซ์ Shiboleth

เมื่อฉันขด http://localhost:8080/idp/shibboleth ในคอนโซล การตอบสนองของอินสแตนซ์จะถูกสร้างขึ้นอย่างถูกต้อง

อย่างไรก็ตาม เมื่อฉันทำเช่นเดียวกันบนเบราว์เซอร์ของฉัน https://idp.example.com/idp/shibboleth ฉันได้รับข้อผิดพลาด 404

นี่เป็นข้อบ่งชี้ว่า reverse proxy ทำงานไม่ถูกต้อง?

นี่คือ apache conf ของฉัน

SSLUseStapling บน
SSLStaplingResponderTimeout 5
ปิด SSLStaplingReturnResponderError
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 !ต่ำ !MD5 !EXP !PSK !SRP !DSS !RC4"

 SSLHonorCipherสั่งซื้อบน
 
 # ไม่อนุญาตให้ฝังหน้าเข้าสู่ระบบ IdP ของคุณภายใน iframe และ
 # เปิดใช้งาน HTTP Strict Transport Security ด้วยระยะเวลา 2 ปี
 <ส่วนหัวของ IfModule_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/ ลองใหม่=5
    ProxyPassReverse /idp http://localhost:8080/idp/ ลองใหม่=5

    <สถานที่ /idp>
       ต้องได้รับอนุญาตทั้งหมด
    </สถานที่>
 </หากโมดูล>
</เวอร์ชวลโฮสต์>
</หากโมดูล>

<โฮสต์เสมือน 127.0.0.1:80>
  ProxyPass /idp http://localhost:8080/idp/ ลองใหม่=5
  ProxyPassReverse /idp http://localhost:8080/idp/ ลองใหม่=5
  <สถานที่ /idp>
   ต้องได้รับอนุญาตทั้งหมด
  </สถานที่>
</เวอร์ชวลโฮสต์>

ฉันทำให้ไฟล์ 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>
# virtualhost นี้อยู่ที่นี่เพื่อจัดการคำสั่งการดูแลระบบเท่านั้น 
สำหรับ Shibboleth ดำเนินการจาก localhost
<โฮสต์เสมือน 127.0.0.1:80>
  ProxyPass /idp http://localhost:8080/idp/ ลองใหม่=5
  ProxyPassReverse /idp http://localhost:8080/idp/ ลองใหม่=5
  <สถานที่ /idp>
    ต้องได้รับอนุญาตทั้งหมด
  </สถานที่>
</เวอร์ชวลโฮสต์>
djdomi avatar
za flag
ฉันไม่แน่ใจ แต่ท้องของฉันคิดว่าไม่มีคำจำกัดความสำหรับ /idp ไปทุกที่ คุณสามารถดู https://serverfault.com/questions/429122/apache-virtualhost-proxy-with-a-subdirectory เพื่อดูคำแนะนำในการแก้ปัญหาของคุณ
pierostz avatar
bl flag
@djdomi เมื่อฉันขดเป็น http//localhost:8080/idp ฉันยังคงได้รับคำตอบจากอินสแตนซ์ shibboleth เลยคิดว่าไม่น่าใช่...?
djdomi avatar
za flag
ใช่ `` มีรายการสำหรับมัน แต่ไม่ใช่ `` หรือให้อธิบายเป็นอย่างอื่น: แต่ละ VirtualHost เหมือนกับการติดตั้ง apache แบบสแตนด์อโลน
pierostz avatar
bl flag
ถ้าเราอยู่ในหน้าเดียวกัน มี Virtual Host อยู่สามรายการด้านบน อันหนึ่งสำหรับพอร์ต 80 ที่เปลี่ยนเส้นทางไปที่ https หนึ่งอันสำหรับ https บนพอร์ต 443 (อันที่ฉันคิดว่าคุณบอกว่าหายไป) และอีกอันสำหรับ localhost บนพอร์ต 80
in flag
mod_proxy เปิดใช้งานอยู่หรือไม่
in flag
คุณอาจต้องการลบคำสั่ง IfModule เหล่านั้นออกทั้งหมด คำสั่งเหล่านี้มีการใช้งาน แต่ส่วนใหญ่มักจะซ่อนปัญหาแทนที่จะป้องกัน
Score:2
ธง cn

ลองลบพอร์ตออกจากไฟล์ ชื่อเซิร์ฟเวอร์ คำสั่ง เช่น.,

ชื่อเซิร์ฟเวอร์ idp.spectrum.com.cy

ต่อ https://httpd.apache.org/docs/2.4/mod/core.html#servername พอร์ตนี้เป็นทางเลือกและได้รับอนุญาต แต่การกล่าวถึงต่อไปนี้ในเอกสารดูเหมือนว่าอาจเป็นเหตุผลว่าทำไม โฮสต์เสมือน การกำหนดค่าไม่ได้รับ (เบราว์เซอร์ไม่ส่งหมายเลขพอร์ตใน เจ้าภาพ: หัวข้อ).

หากคุณกำลังใช้ โฮสต์เสมือนตามชื่อ, ชื่อเซิร์ฟเวอร์ ภายใน <VirtualHost> ส่วนระบุว่าชื่อโฮสต์ใดที่ต้องปรากฏใน คำขอของ เจ้าภาพ: ส่วนหัวให้ตรงกับโฮสต์เสมือนนี้

pierostz avatar
bl flag
ฉันได้ลองใช้ชื่อเซิร์ฟเวอร์ที่มีและไม่มีพอร์ตโดยไม่มีความแตกต่างใดๆ ฉันได้ละเว้นพอร์ตตามเอกสารที่คุณให้มา ขอบคุณสำหรับการป้อนข้อมูล
Score: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>

นี่คือ IDP ของฉัน /etc/httpd/conf.d/idp.conf:

ProxyPass /idp/ http://localhost:8080/idp/ ลองใหม่=5
ProxyPassReverse /idp/ http://localhost:8080/idp/

<พร็อกซี http://localhost:8080>
       ต้องได้รับอนุญาตทั้งหมด
       RequestHeader ตั้งค่า X-Forwarded-Proto https
       RequestHeader ตั้งค่า X-Proxied-Https เป็นเปิด
       RequestHeader ตั้งค่า Proxy-ssl-id %{SSL_SESSION_ID}s
</พร็อกซี่>
pierostz avatar
bl flag
ขอบคุณมากสำหรับสิ่งนี้ เครื่องหมายทับขาดหายไป ที่เรียบง่าย ฉันมีปัญหาเพิ่มเติมบางอย่าง แต่หากไม่มีเครื่องหมายทับท้าย ฉันจะแก้ไขปัญหาเหล่านั้นไม่ได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา