Score:0

เว็บเซิร์ฟเวอร์สองตัวบน LAN เดียว เรียกใช้ apache2 และ nginx ตามลำดับ ภายใต้ที่อยู่ IP WAN เดียว - เชื่อมต่อกับเซิร์ฟเวอร์ที่ถูกต้องด้วยชื่อโดเมน (ย่อย)

ธง in

ฉันมีเซิร์ฟเวอร์จริงสองตัวที่ทำงานบน LAN เดียวกัน ทั้งสองกำลังใช้งานเว็บเซิร์ฟเวอร์ อันหนึ่งรัน apache2 อีกอันรัน nginx แต่ละคนมีชื่อโดเมนต่างกัน แต่มีที่อยู่ IP ของ WAN ภายนอกเดียวกัน สมมติว่าเค้าโครงเครือข่ายมีลักษณะดังนี้:

                วาน
            10.20.30.40
      |----------|----------|
      | |
   โดเมน 1 โดเมน 2
exampleABC.com (ย่อย)exampleXYZ.com
      | |
      |----------|----------|
                 |
            แลนเดียว
                 |
      |----------|----------|
      | |
  ไอพีแอดเดรส 1 ไอพีแอดเดรส 2
192.168.0.10 192.168.0.20
      | |
      | |
  เซิร์ฟเวอร์ 1 เซิร์ฟเวอร์ 2
   apache2 nginx

เซิร์ฟเวอร์ apache2 เป็นของฉันในขณะที่เซิร์ฟเวอร์ nginx ไม่ใช่ เซิร์ฟเวอร์ทั้งสองมีโดเมนย่อยเฉพาะสำหรับแต่ละบริการที่มีให้ เช่น (www.)exampleABC.com สำหรับหน้าเว็บหลัก cloud.exampleXYZ.com สำหรับบริการคลาวด์แบบรีเวิร์สพร็อกซี media.exampleXYZ.com สำหรับสื่อ เป็นต้น

ด้วยเหตุผลที่ไม่ทราบสาเหตุ เซิร์ฟเวอร์ nginx เป็นสิ่งที่มีความสำคัญเมื่อเชื่อมต่อกับที่อยู่ IP ของ WAN - ในขั้นต้น ทั้งสองโดเมนจะนำไปยังหน้าเว็บหลักที่โฮสต์โดย nginx แต่ด้วยการกำหนดค่า nginx (ปัจจุบัน) ต่อไปนี้ exampleABC.com จะนำไปสู่อย่างถูกต้อง เซิร์ฟเวอร์ apache2 ในขณะที่ exampleXYZ.com ยังคงนำไปสู่เซิร์ฟเวอร์ nginx

เซิร์ฟเวอร์ {
    ฟัง 80;

    # ฟังในโดเมนย่อยทั้งหมด
    ชื่อเซิร์ฟเวอร์ exampleABC.com *.exampleABC.com;
    
    ที่ตั้ง / {
        # พร็อกซีโปร่งใสไปยังเซิร์ฟเวอร์อื่น (พอร์ต 443)
        proxy_pass http://192.168.0.10:80;

        # ตั้งค่าส่วนหัว "โฮสต์" ที่ส่งผ่านไปยังเซิร์ฟเวอร์อื่นไปยัง FQDN ที่ไคลเอนต์ร้องขอ เพื่อให้เซิร์ฟเวอร์อื่นรู้ว่ามีการร้องขอโดเมนย่อยใด
        proxy_set_header โฮสต์ $http_host;
    }
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl;

    ชื่อเซิร์ฟเวอร์ exampleABC.com *.exampleABC.com;
    
    ที่ตั้ง / {
        proxy_pass https://192.168.0.10:443;
        proxy_set_header โฮสต์ $http_host;
    }
}

อย่างไรก็ตาม โดเมนย่อยที่โฮสต์โดยเซิร์ฟเวอร์ apache2 (docs.exampleABC.com เป็นต้น) ยังคงเชื่อมต่อกับ nginx ต่อไป (โดเมนย่อย nginx ทำงานได้ดี)

นี่คือหนึ่งในการกำหนดค่าโดเมนย่อยที่ฉันตั้งค่าผ่าน apache2:

<โฮสต์เสมือน *:80>
    ชื่อเซิร์ฟเวอร์ ft.exampleABC.com
    เปลี่ยนเส้นทางถาวร / https://ft.exampleABC.com/
    RewriteEngine เปิดอยู่
    RewriteCond %{SERVER_NAME} =ft.exampleABC.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=ถาวร]
</เวอร์ชวลโฮสต์>

<IfModule mod_ssl.c>
    <โฮสต์เสมือน _default_:443>
        # คำสั่ง ServerName ตั้งค่ารูปแบบคำขอ ชื่อโฮสต์ และพอร์ตที่
        # เซิร์ฟเวอร์ใช้เพื่อระบุตัวเอง สิ่งนี้ใช้เมื่อสร้าง
        # URL การเปลี่ยนเส้นทาง ในบริบทของโฮสต์เสมือน ชื่อเซิร์ฟเวอร์
        # ระบุชื่อโฮสต์ที่ต้องปรากฏในส่วนหัวของคำขอ Host:
        # ตรงกับโฮสต์เสมือนนี้ สำหรับโฮสต์เสมือนเริ่มต้น (ไฟล์นี้) สิ่งนี้
        # ค่าไม่ได้ชี้ขาดเนื่องจากใช้เป็นทางเลือกสุดท้ายโฮสต์โดยไม่คำนึงถึง
        # อย่างไรก็ตาม คุณต้องตั้งค่าสำหรับโฮสต์เสมือนเพิ่มเติมอย่างชัดเจน

        ชื่อเซิร์ฟเวอร์ ft.exampleABC.com
        #ServerAlias ​​*.exampleABC.com

        ServerAdmin webmaster@localhost
        DocumentRoot /mnt/external/เว็บเซิร์ฟเวอร์/ft

        # loglevels ที่มีอยู่: trace8, ..., trace1, debug, ข้อมูล, ประกาศ, เตือน,
        # ข้อผิดพลาด วิกฤต การแจ้งเตือน เกิดขึ้น
        # นอกจากนี้ยังสามารถกำหนดค่าล็อกระดับโดยเฉพาะได้
        # โมดูล เช่น
        #ข้อมูล LogLevel ssl:warning

        บันทึกข้อผิดพลาด ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log รวมกัน

        # สำหรับไฟล์การกำหนดค่าส่วนใหญ่จาก conf-available/ ซึ่งได้แก่
        # เปิดใช้งานหรือปิดใช้งานในระดับโลกก็เป็นไปได้
        # รวมบรรทัดสำหรับโฮสต์เสมือนหนึ่งรายการเท่านั้น ตัวอย่างเช่น
        # บรรทัดต่อไปนี้เปิดใช้งานการกำหนดค่า CGI สำหรับโฮสต์นี้เท่านั้น
        # หลังจากถูกปิดใช้งานทั่วโลกด้วย "a2disconf"
        #รวม conf-available/serve-cgi-bin.conf
        
        <ไดเร็กทอรี /mnt/external/webserver/ft>
            ดัชนีตัวเลือก FollowSymLinks
            AllowOverride ไม่มี
            ต้องได้รับอนุญาตทั้งหมด
        </ไดเรกทอรี>

        # สวิตช์เครื่องยนต์ SSL:
        # เปิด / ปิด SSL สำหรับโฮสต์เสมือนนี้
        SSLEngine เปิดอยู่

        < สนิป: บรรทัดที่เพิ่มโดย certbot >

    </เวอร์ชวลโฮสต์>
</หากโมดูล>

# เป็นกลุ่ม: ไวยากรณ์=apache ts=4 sw=4 sts=4 sr noet

ฉันต้องการทำให้ไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ apache2 อย่างถูกต้องเมื่อเชื่อมต่อกับ exampleABC.com, ft.exampleABC.com เป็นต้น exampleXYZ.com และโดเมนย่อยควรเชื่อมต่อกับเซิร์ฟเวอร์ nginx แน่นอน

ข้อมูลอื่น ๆ:

เดิมที ไคลเอ็นต์ (เช่น เว็บเบราว์เซอร์) ไม่สามารถตรวจสอบความถูกต้องของใบรับรอง TLS ของ exampleABC.com ได้(โปรดทราบว่าฉันได้ตั้งค่าใบรับรอง TLS อย่างถูกต้องภายใต้ apache2) สิ่งนี้ได้รับการแก้ไขโดยการเพิ่มโดเมน apache2 ของฉันในใบรับรองของเซิร์ฟเวอร์ nginx แม้ว่าฉันไม่เชื่อว่าสิ่งนี้จำเป็น - ใบรับรองของฉัน (ภายใต้ apache2) ควรส่งผ่านพร็อกซีย้อนกลับใช่ไหม

หากฉันพยายามเชื่อมต่อกับเซิร์ฟเวอร์ apache2 ผ่าน curl ในขณะที่ระบุส่วนหัวของโฮสต์ด้วยตนเอง (ผ่าน curl -vL -H "โฮสต์: ft.exampleABC.com" https://192.168.0.10) ฉันจะถูกเปลี่ยนเส้นทางไปยังหน้าเว็บหลักของเซิร์ฟเวอร์ nginx ฉันไม่แน่ใจว่าสิ่งนี้หมายความว่าอย่างไร

แก้ไข:

นี่คือผลลัพธ์ของ nginx -Tตามที่ผู้ดูแลระบบของระบบ nginx:

- สนิป -

นอกจากนี้ เซิร์ฟเวอร์ nginx ยังทำงานในคอนเทนเนอร์ผ่าน "SWAG" ของ LinuxServer.io.

แก้ไข:

SWAG ของ LinuxServer.io โหลดการกำหนดค่า nginx ที่แตกต่างจากค่าดีฟอลต์ คำสั่งต่อไปนี้ได้รับ confs ที่ถูกต้อง:

นักเทียบท่า exec -it ย้อย /usr/sbin/nginx -c /config/nginx/nginx.conf -T

สามารถดูผลคำสั่งดังกล่าวได้ที่ วางนี้. (อักขระมากเกินไปสำหรับ StackExchange)

us flag
โปรดแสดงการกำหนดค่า nginx แบบเต็มตามที่แสดงโดยคำสั่ง `nginx -T` นอกจากนี้ โปรดใช้ `example.com` อย่างสม่ำเสมอ ในข้อมูลโค้ดปัจจุบันของคุณมี `*.fennet.rentals` ซึ่งทำให้เชื่อมต่อสิ่งต่างๆ ได้ยากขึ้น
unilock avatar
in flag
@Tero Kilkanen ฉันแย่ พยายามแก้ไขการกล่าวถึงโดเมนของฉันทั้งหมดโดยไม่มีปัญหา ฉันจะแก้ไขเดี๋ยวนี้
Zac67 avatar
ru flag
การเรียกใช้เซิร์ฟเวอร์หลายเครื่องบนที่อยู่ IP เดียวและหมายเลขพอร์ต TCP ต้องใช้พร็อกซีย้อนกลับ - nginx สามารถทำได้และมอบพรอกซีไปยังเซิร์ฟเวอร์ Apache การเปลี่ยนเส้นทางไม่ทำงาน *ไม่*
unilock avatar
in flag
@ Zac67 คุณช่วยอธิบายเพิ่มเติมได้ไหม ฉันคิดว่าเซิร์ฟเวอร์ nginx ใช้ reverse proxy ผ่าน "proxy_pass"
us flag
การกำหนดค่า nginx ไม่มีบล็อก 'เซิร์ฟเวอร์' สำหรับ 'exampleABC.com' คุณแน่ใจว่าเป็นไฟล์คอนฟิกูเรชันที่ถูกต้องหรือไม่?
unilock avatar
in flag
@TeroKilkanen ฉันค้นพบว่า SWAG โหลดการกำหนดค่า nginx ที่แตกต่างจากค่าเริ่มต้น ฉันได้แก้ไขคำถามของฉันอย่างเหมาะสมแล้ว
Score:0
ธง in

สิ่งที่ได้ผลคือการสร้างไฟล์ใหม่ /config/nginx/proxy-confs/exampleABC.subdomain.conf (เท่ากับ /etc/nginx/conf.d/exampleABC.subdomain.conf, กับ ตัวอย่าง ABC.subdomain แทนที่ด้วยอะไรก็ได้) โดยมีเนื้อหาดังนี้

เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง [::]:80;

    server_name .exampleABC.com;
    
    ที่ตั้ง / {
        proxy_pass http://192.168.0.10:80;
        proxy_set_header โฮสต์ $http_host;
    }
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl;
    ฟัง [::]:443 ssl;

    server_name .exampleABC.com;
    
    ที่ตั้ง / {
        proxy_pass https://192.168.0.10:443;
        proxy_set_header โฮสต์ $http_host;
    }
}

การกำหนดค่า nginx ที่ฉันพิมพ์ในโพสต์ต้นฉบับของฉันควรจะทำงานเกือบจะเหมือนกันกับสิ่งนี้ ดังนั้นฉันจึงสงสัยว่าปัญหาเกิดจากการขาด ฟัง [::]:<พอร์ต>; สำหรับความเข้ากันได้ของ IPv6 หรือไฟล์การกำหนดค่าอื่นๆ ที่ขัดแย้งกับไฟล์ที่ฉันสร้างขึ้น

Score:0
ธง bd

ฉันเป็นเจ้าของบ้านที่เซิร์ฟเวอร์ของพวกเขาตั้งอยู่ ฉันไม่ใช่ผู้เชี่ยวชาญ แต่อย่างใด ฉันแค่ทำตามคำแนะนำค่อนข้างดี ฉันมีชื่อโดเมน DuckDNS และฉันเรียกใช้คอนเทนเนอร์ Docker สำหรับ Plex, Sonarr, SABnzbd และอื่น ๆ ฉันยังเรียกใช้คอนเทนเนอร์ SWAG สำหรับพร็อกซีย้อนกลับของฉันด้วย

Unilock ได้นำเซิร์ฟเวอร์ของตัวเองเข้ามา มีชื่อโดเมนของตัวเองและใช้ apache2 สำหรับการกำหนดค่าเซิร์ฟเวอร์ทั้งหมด เซิร์ฟเวอร์นี้ก่อนที่จะมาอยู่ในเครือข่ายของฉัน กำลังฟังพอร์ตเดียวกันกับของฉันทั้งหมด (80, 443 เป็นต้น)

ฉันได้รับแจ้งว่า หาก Unilock สามารถเรียกใช้บริการของพวกเขาบนพอร์ตที่ไม่ได้มาตรฐาน เราอาจเปลี่ยนการตั้งค่าของเราเตอร์ pfSense ของฉันให้เรียกใช้ทั้งสองเซิร์ฟเวอร์ได้ ฉันได้รับแจ้งด้วยว่าฉันสามารถเพิ่มชื่อโดเมนของเซิร์ฟเวอร์ไปยังตัวแปร EXTRA_DOMAINS ของคอนเทนเนอร์ SWAG ของฉันได้ ฉันทำอย่างนั้นและไม่ได้ช่วยอะไร

ฉันได้เพิ่มบล็อกเซิร์ฟเวอร์พิเศษในไฟล์เริ่มต้น SITE_CONF ของฉันด้วย บล็อกพิเศษมีลักษณะดังนี้:

#บล็อกเซิร์ฟเวอร์ที่สอง
เซิร์ฟเวอร์ {
    ฟัง 443 ssl;
    ฟัง [::]:443 ssl;
    server_name <ชื่อโดเมนของเขา>; #เปลี่ยนสิ่งนี้เป็นโดเมนย่อยของคุณ
    #include /config/nginx/ssl.conf;
    client_max_body_size 0;
    ที่ตั้ง / {
    #รวม /config/nginx/proxy.conf;
    ตัวแก้ไข 127.0.0.11 ถูกต้อง = 30 วินาที;
    #set $upstream_app 192.168.0.10;
    #set $upstream_port 443;
    #set $upstream_proto https;
    #proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    proxy_pass https://192.168.0.10:443; 
    proxy_max_temp_file_size 2048m;
   }

บล็อกเซิร์ฟเวอร์หลักของฉันคือไฟล์เริ่มต้น หากฉันต้องการโพสต์การกำหนดค่าทั้งหมด ฉันจะ; แม้ว่าดูเหมือนว่า Unilock ได้ทำบน Pastebin แล้วหลังจากที่ฉันป้อนข้อมูลข้างต้นแล้ว ฉันสามารถเข้าถึงหน้าหลักของ Unilock ได้ แต่โดเมนย่อยยังคงเปลี่ยนเส้นทางไปยังหน้าเริ่มต้นเซิร์ฟเวอร์ nginx เริ่มต้นของฉัน

โพสต์คำตอบ

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