Score:0

โฮสต์สองแอปพลิเคชันบนโดเมนเดียวกันโดยใช้ apache หนึ่งรายการพร้อมการรับรองความถูกต้องพื้นฐาน

ธง jp

ฉันมีปัญหาในการตั้งค่า อาปาเช่.

การใช้งาน:

  • แอปพลิเคชัน 1 - SPA (ส่วนหน้า) ทำงานในนักเทียบท่า เข้าถึงได้ในท้องถิ่นโดย http://localhost:91

  • แอปพลิเคชัน 2 - WebAPI (บริการแบ็กเอนด์) ทำงานในนักเทียบท่า เข้าถึงได้ในท้องถิ่นโดย http://localhost:90

ฉันต้องการทำให้ทั้งสองแอปพลิเคชันใช้งานได้ในโดเมนเดียวกันผ่าน HTTPS โดยใช้ อาปาเช่:

  • ใบสมัคร 1: https://my.domain.com <- ควรได้รับการรักษาความปลอดภัยด้วยการตรวจสอบสิทธิ์ขั้นพื้นฐาน.
  • ใบสมัคร 2: https://my.domain.com/api

ฉันคิดว่าการตั้งค่านี้ใช้งานได้เมื่อฉันใช้ HTTP ธรรมดาเพื่อเข้าถึงการขอความช่วยเหลือ แต่เมื่อฉันเปลี่ยนเป็น HTTPS (ลงนามด้วยตนเอง กับ ให้เข้ารหัส) - ทุกอย่างดูเหมือนจะหยุดทำงาน

นี่คือการกำหนดค่าล่าสุด

<VirtualHost *:80>
    ServerName my.domain.com
    ServerAlias www.my.domain.com
    
    TraceEnable off

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.my.domain.com [OR]
    RewriteCond %{SERVER_NAME} =my.domain.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName my.domain.com
    ServerAlias www.my.domain.com

    TraceEnable off
    ProxyRequests Off
    ProxyPreserveHost On
    
    <Proxy *>
        Order deny,allow
        #Allow from all
        Allow from 127.0.0.1
    </Proxy>
    
    Timeout 2400
    ProxyTimeout 2400
    ProxyBadHeader Ignore 

    <Location />
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
        
        ProxyPass        http://localhost:91/ Keepalive=On
        ProxyPassReverse http://localhost:91/
    </Location>
    
    <Location /api>
        ProxyPass        http://localhost:90/
        ProxyPassReverse http://localhost:90/
    </Location>
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/my.domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.com/privkey.pem
</VirtualHost>
</IfModule>

ปัญหาล่าสุดและปัจจุบันคือ:

เมื่อใดก็ตามที่ฉันพยายามเข้าถึงปลายทาง https://my.domain.com/api/Auth/เข้าสู่ระบบ - ผู้ใช้ได้รับแจ้งด้วยหน้าเข้าสู่ระบบ สิ่งนี้ควรใช้ได้กับ URL ที่ไม่ใช่ API เท่านั้น

กล่าวอีกนัยหนึ่ง - <Location /api> ดูเหมือนว่าคำสั่งจะถูกละเว้นฉันได้ลองสับเปลี่ยนคำสั่งตำแหน่งและวิธีแก้ไขปัญหาอื่น ๆ หลายสิบวิธีแล้ว แต่ก็ไม่ได้ผล .. ฉันยังลองใช้คำสั่งที่ชัดเจนมากขึ้นเช่น <LocationMatch /(api).*> ที่ยังใช้งานไม่ได้

มีบางอย่างผิดปกติกับกฎการจับคู่ตำแหน่งหรือไม่

Score:3
ธง in

<Location /api> ไม่ได้ถูกเพิกเฉย คุณเพียงแค่ยังไม่ได้กำหนดค่าการรับรองความถูกต้อง ดังนั้นจึงใช้การกำหนดค่าจากระดับที่สูงกว่า

ปิดการใช้งาน AuthType สำหรับสถานที่:

<Location /api>
    AuthType None
    Require all granted
    ProxyPass        http://localhost:90/
    ProxyPassReverse http://localhost:90/
</Location>
djdomi avatar
za flag
จริง นั่นเป็นอีกวิธีหนึ่งในการแก้ไข Dom ย่อยอื่น ๆ จะทำงานเช่นกัน ;)
jp flag
@เจอรัลด์สมบูรณ์แบบ! คำถามติดตามผลหนึ่งข้อ.. เมื่อฉันพยายามไปที่ `https://my.domain.com/manifest.json` ไฟล์จะเปิดขึ้นเนื่องจากเป็นหน้าเว็บ (เช่น ไม่พบทรัพยากร) ในทางกลับกัน หากฉันพยายามเข้าถึงโดยตรงจาก PC IP: `http://192.168.0.110:91/manifest.json` ฉันจะพบไฟล์จริงที่โฮสต์ใน SPA เหมือนกันกับไฟล์ CSS และ JS แม้ว่าจะไม่สามารถเข้าถึงไฟล์ใด ๆ จากเครือข่ายภายนอก - หน้าเว็บยังคงโหลดอย่างถูกต้อง มีคำอธิบายที่ดีสำหรับพฤติกรรมนี้หรือไม่? เป็นไปได้ไหมที่จะทำให้ไฟล์ทั้งหมดสามารถเข้าถึงได้?
in flag
นั่นควรเป็นคำถามใหม่ แต่คาดเดาได้ว่าเซิร์ฟเวอร์ส่วนหลังใช้รูทเอกสารหรือ vhost ที่แตกต่างกันหากเข้าถึงผ่าน localhost และ 192.168.0.110
jp flag
อีกสิ่งหนึ่งที่ฉันสังเกตเห็นเมื่อเข้าถึง `http://192.168.0.110:91/` - มีข้อผิดพลาด `403` สำหรับประเภทคำขอ `OPTIONS` ที่บันทึกไว้ จึงทำให้เว็บไซต์ใช้งานไม่ได้ (CORS จะไม่ทำงาน) หลังจากตั้งค่า `loglevel' และตรวจสอบบันทึก 'apache' เพิ่มเติม ฉันพบบรรทัดต่อไปนี้ `AH01797: ไคลเอ็นต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์: proxy:http://localhost:90/Auth/Login, ผู้อ้างอิง: ..` ฉันสามารถแก้ไขได้โดยการเพิ่ม 'Allow from all' ต่อจาก 'Require all granted' ไม่แน่ใจว่าเป็นสิ่งที่ถูกต้องหรือไม่ แต่แก้ไขปัญหาได้
jp flag
และยังมีปัญหาค้างคาอีกประการหนึ่ง - เมื่อเว็บไซต์ถูกเข้าถึงด้วยชื่อโดเมน - เว็บไซต์ "เวอร์ชันแคช" จะถูกโหลด เช่น. แม้ว่าเวอร์ชันใหม่ของ SPA ถูกปรับใช้เบราว์เซอร์ก็ดูเหมือนจะไม่กระตือรือร้นที่จะรีเฟรชเนื้อหา .. ฉันยังคิดไม่ออก แต่ปัญหาดูเหมือนจะเกี่ยวข้องกับ apache config ด้วยเนื่องจากไม่มีปัญหาดังกล่าวเมื่อ เว็บไซต์สามารถเข้าถึงได้โดยที่อยู่ IP ในเครื่อง ฉันคิดว่าฉันจะเปิดคำถามใหม่สำหรับสถานการณ์นี้ในภายหลังหลังจากศึกษาปัญหานี้อีกเล็กน้อย..

โพสต์คำตอบ

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