Score:0

Apache reverse proxy - URL ที่ไม่มี / ถูกปฏิเสธ

ธง us

ฉันใช้พร็อกซีย้อนกลับเพื่อแสดงเนื้อหาเซิร์ฟเวอร์ส่วนหลังสำหรับโดเมนย่อย subdomain.mydomain.com (เซิร์ฟเวอร์ A) ควรแสดงเนื้อหาของเซิร์ฟเวอร์ที่มี IP 123.123.123.123 พอร์ต 1111 (เซิร์ฟเวอร์ B)

โฮสต์เสมือนของ subdomain.mydomain.com (เซิร์ฟเวอร์ A):

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName subdomain.mydomain.com

SSLEngine on
SecAuditEngine On
RewriteEngine On
SSLProxyEngine on
ProxyPreserveHost On
LogLevel warn

<Directory />
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Location />
    ProxyPass https://123.123.123.123:1111
    ProxyPassReverse https://123.123.123.123:1111
</Location>

ErrorLog /var/log/apache2/error.log

SSLProtocol             all -SSLv2 -SSLv3
SSLHonorCipherOrder     on
SSLVerifyClient none
SSLVerifyDepth 1

SSLCertificateFile /etc/apache2/cert.site/chain_wildcard_site_combined.crt
SSLCertificateKeyFile /etc/apache2/cert.site/key_wildcard_site.key
 
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

</VirtualHost>                                  
</IfModule>

โฮสต์เสมือนของ 123.123.123.123:1111 (เซิร์ฟเวอร์ B):

<IfModule mod_ssl.c>
    <VirtualHost 123.123.123.123:1111>
        DocumentRoot /srv/www/site/htdocs

SSLEngine on
RewriteEngine On
SSLProxyEngine on
ProxyPreserveHost On
LogLevel warn

<Location "/">
   Require ip 222.222.222.222
</Location>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<Directory /srv/www/site/htdocs>
    Options -Indexes +FollowSymLinks +MultiViews
    DirectoryIndex index.php
    AllowOverride None
    Require all granted
</Directory>

ErrorLog /srv/www/site/log/error.log
CustomLog /srv/www/site/log/access.log combined
CustomLog /srv/www/site/log/ssl_request_log \
            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

SSLProtocol             all -SSLv2 -SSLv3
SSLHonorCipherOrder     on
SSLVerifyClient none
SSLVerifyDepth 1

SSLCertificateFile /etc/apache2/cert.site/chain_wildcard_site_combined.crt
SSLCertificateKeyFile /etc/apache2/cert.site/key_wildcard_site.key

        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

    </VirtualHost>
</IfModule>

ถ้าฉันโหลด URL: https://subdomain.mydomain.com/dir/

มันโหลดสำเร็จ

ถ้าฉันโหลด URL (โดยไม่มีเครื่องหมายทับ): https://subdomain.mydomain.com/dir

ผลลัพธ์คือหน้าข้อผิดพลาด: ERR_CONNECTION_REFUSED

แก้ไข 1:

ฉันดำเนินการคำสั่ง:

curl -IL https://subdomain.mydomain.com/dir

และฉันได้รับผลลัพธ์นี้:

HTTP/1.1 301 ย้ายอย่างถาวร
วันที่: จันทร์ 23 ส.ค. 2564 13:45:13 GMT
เซิร์ฟเวอร์: อาปาเช่
การรักษาความปลอดภัยอย่างเข้มงวดในการขนส่ง: max-age=15768000; รวมโดเมนย่อย
การรักษาความปลอดภัยอย่างเข้มงวดในการขนส่ง: max-age=15768000; รวมโดเมนย่อย
ที่ตั้ง: https://subdomain.mydomain.com:1111/dir/
ประเภทเนื้อหา: text/html; ชุดอักขระ=iso-8859-1

curl: (7) ไม่สามารถเชื่อมต่อกับ subdomain.mydomain.com พอร์ต 1111: การเชื่อมต่อถูกปฏิเสธ

แก้ไข 2:

ฉันเพิ่มเครื่องหมายทับท้าย

<Location />
    ProxyPass https://123.123.123.123:1111/
    ProxyPassReverse https://123.123.123.123:1111/
</Location>

แต่ฉันยังคงได้รับ การเชื่อมต่อถูกปฏิเสธ ข้อผิดพลาด.

มีความคิดว่าเหตุใดจึงเกิดข้อผิดพลาดเมื่อไม่มีเครื่องหมายทับท้าย

ขอบคุณ!

Chris avatar
it flag
ฉันจะลองเพิ่มเครื่องหมายทับท้ายคำสั่ง `ProxyPass`/`ProxyPassReverse` ในบล็อกตำแหน่งของคุณ จากสิ่งที่ฉันเห็นในเอกสารและการกำหนดค่าของตัวเอง คุณสามารถเขียน `ProxyPass "/" "something_with_trailing_slash/"` หรือ `ProxyPass "/url" "something_without_trailing_slash"` ในขณะที่บล็อกตำแหน่งของคุณเทียบเท่ากับ `ProxyPass "/" "something_without_trailing_slash"
klor avatar
us flag
ก่อนหน้านี้ฉันใช้ `ProxyPass "/" "something_with_trailing_slash/"` ด้วยผลลัพธ์ที่ผิดเหมือนกัน
mforsetti avatar
tz flag
ทำทั้ง `curl -IL https://subdomain.mydomain.com/dir` และ `curl -IL https://subdomain.mydomain.com/dir/` และแก้ไขคำถามเพื่อรวมผลลัพธ์
klor avatar
us flag
@mforsetti เพิ่มผลลัพธ์ curl ลงใน OP
Score:1
ธง cm

ตรวจสอบการตั้งค่าไฟร์วอลล์ของคุณและบันทึกเซิร์ฟเวอร์ของคุณบนเซิร์ฟเวอร์ B และตรวจสอบว่าเซิร์ฟเวอร์ A สามารถเข้าถึงเซิร์ฟเวอร์ B ด้วยที่อยู่ IP ที่ถูกต้องในฐานะผู้ส่ง (ฉันสมมติว่าเป็น 222.222.222.222) รายชื่อเซิร์ฟเวอร์ B ของคุณยังขาดหายไป ฟัง 1111 https คำสั่ง

แก้ไข เซิร์ฟเวอร์ส่วนหลังบังคับให้เปลี่ยนเส้นทาง:

HTTP/1.1 301 ย้ายอย่างถาวร
ที่ตั้ง: https://subdomain.mydomain.com:1111/dir/

การมีส่วนหัว HSTS อยู่และไม่มีกฎการเขียนซ้ำ ทำให้ฉันคิดว่าเป็นแอปพลิเคชันที่ออกการเปลี่ยนเส้นทาง

ตรวจสอบว่ามันคืออะไร

คุณระบุว่าด้วยการเพิ่ม '/' สิ่งที่ใช้ได้ดี บังคับให้ต่อท้าย '/' ด้วย mod_rewrite บนเซิร์ฟเวอร์ส่วนหน้าดูเหมือนจะเป็นทางออกที่ยอมรับได้สำหรับฉัน

klor avatar
us flag
ฉันพลาดที่จะพูดถึงว่า Listen 1111, 443 ถูกตั้งค่าแยกกันใน port.conf ฉันไม่คิดว่ามันเป็นปัญหาไฟร์วอลล์ เพราะมันใช้ได้กับ /dir/ แต่ใช้ไม่ได้กับ /dir
cm flag
ค้นหาว่าอะไรทำให้เกิดการเปลี่ยนเส้นทางที่คุณพบตามผลลัพธ์ของ `curl` เป็นไปได้มากว่าเป็นเซิร์ฟเวอร์ส่วนหลัง (ไม่ชัดเจนจากส่วนกำหนดค่าที่คุณโพสต์) หรือแอปพลิเคชันเองที่บังคับ การบังคับใช้ `/` ต่อท้ายด้วยกฎการเขียนซ้ำอาจเป็นวิธีแก้ปัญหาที่ยอมรับได้
Score:0
ธง no

ดูเหมือนว่าสิ่งนี้ได้รับคำตอบแล้ว ที่นี่. ยังคงตอบคำถามของคุณ

คุณไม่มีเครื่องหมายทับที่ส่วนท้ายของคำสั่ง ProxyPass และ ProxyPassReverse

อ่าน นี้ หากคุณต้องการรายละเอียดเพิ่มเติมว่าเหตุใดจึงเป็นเช่นนี้

klor avatar
us flag
ฉันทดสอบคำแนะนำของคุณแล้ว แต่ฉันยังคงได้รับข้อผิดพลาด ดู OP ที่แก้ไขแล้ว
Score:0
ธง fk

พร็อกซีย้อนกลับของคุณไม่ได้ (อาจไม่ควร) กำลังฟังพอร์ต 1111

อย่างไรก็ตาม เซิร์ฟเวอร์ 123 ของคุณกำลังเปลี่ยนเส้นทางไปยังพอร์ต 1111 (การสันนิษฐานตามการกำหนดค่าที่คุณโพสต์)

โพสต์คำตอบ

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