Score:0

nginx reverse proxy 404 พร้อมสองเซิร์ฟเวอร์

ธง va

ฉันมีปัญหากับการกำหนดค่า NGINX ฉันมีเว็บเซิร์ฟเวอร์สองตัวที่ทำงานบนเซิร์ฟเวอร์ windows อันใดที่ถูกเรียกจากภายนอกด้วย 443 จากนั้นควรส่งต่อไปยังเซิร์ฟเวอร์ด้วย 41001 บล็อกเซิร์ฟเวอร์ที่สองควรเรียกว่า FQDN และ nginx ควรส่งต่อไปยัง FQDN.com/test ภายในและภายนอก.

ในการบล็อกเซิร์ฟเวอร์แรกจะใช้เวลาโหลดตลอดไปและดูเหมือนว่าจะไม่มีอะไรทำงาน ด้วยบล็อกเซิร์ฟเวอร์ที่สอง ฉันได้รับ 404 กลับมา

นี่คือลักษณะการกำหนดค่าของฉันและบันทึกข้อผิดพลาด

เซิร์ฟเวอร์ {
    server_name test.example.com;
    ส่งคืน 301 http://test.example.com/test$request_uri;
    }


เซิร์ฟเวอร์ {
        ฟัง 443 ssl http2;
        ฟัง [::]:443 ssl http2;
 
        access_log /var/log/nginx/test_service_access.log;
        error_log /var/log/nginx/test_service_error.log;

        ssl_certificate /etc/nginx/ssl/test.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test.key;
        ssl_session_timeout 1d;
        ปิด ssl_session_tickets;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G> ปิด ssl_prefer_server_ciphers;

        สถานที่ / ทดสอบ {
        proxy_pass https://10.10.10.10/test/;
        }

        client_max_body_size 0;
        proxy_connect_timeout 90 วินาที;
        proxy_send_timeout 90 วินาที;
        proxy_read_timeout 90 วินาที;
        send_timeout 90;
    }

เซิร์ฟเวอร์ {
        server_name test2.example.com;
        # เปลี่ยนเส้นทางคำขอ HTTP ทั้งหมดไปยัง HTTPS ด้วยการตอบสนอง 301 ย้ายอย่างถาวร
        ส่งคืน 301 https://test2.example.com$request_uri;
}

เซิร์ฟเวอร์ {
        ฟัง 443 ssl http2;
        ฟัง [::]:443 ssl http2;
        server_name test2.example.com;

        access_log /var/log/nginx/test2_service_access.log;
        error_log /var/log/nginx/test2_service_error.log;

        ssl_certificate /etc/nginx/ssl/test2.example.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test2example.key;

# ssl_session_cache ที่ใช้ร่วมกัน:SSL:50m;
        ssl_session_timeout 1d;
        ปิด ssl_session_tickets;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G>
        ปิด ssl_prefer_server_ciphers;

        add_header การขนส่งที่เข้มงวด - ความปลอดภัยสูงสุดอายุ = 15768000;

        ที่ตั้ง / {

# ตัวแก้ไข 10.150.10.10 8.8.8.8;
        proxy_pass https://test2.example.com:41001/;
        proxy_redirect https://test2.example.com:41001/ https://test2.example.com/;

        client_max_body_size 0;
        proxy_connect_timeout 90 วินาที;
        proxy_send_timeout 90 วินาที;
        proxy_read_timeout 90 วินาที;
        send_timeout 90;
        }
    }
}

ฉันดูที่ error.logs และนี่คือสิ่งที่เกิดขึ้น

2022/02/13 12:54:58 [ข้อผิดพลาด] 2620#2620: *15 open() "/usr/share/nginx/html/DocuWare/Platform/LoginRedirect" ล้มเหลว (2: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว), ไคลเอ็นต์ : xxx.xxx.xxx.xxx, เซิร์ฟเวอร์: , คำขอ: "GET /DocuWare/Platform/LoginRedirect?returnUrl=%2fdocuware%2fPlatform%2fWebClient%2f HTTP/2.0", โฮสต์: "test2.domain.com", ผู้อ้างอิง: "https://test.domain.com/docuware/Platform/WebClient/"

2022/02/13 12:35:17 [ข้อผิดพลาด] 2541#2541: *1 อัปสตรีมหมดเวลา (110: การเชื่อมต่อหมดเวลา) ขณะเชื่อมต่อกับอัปสตรีม ไคลเอนต์:

เกี่ยวกับข้อผิดพลาดครั้งแรกฉันไม่เข้าใจว่าผิดพลาดอะไร

ตามที่ฉันเข้าใจ ฉันต้องกำหนดอัปสตรีมสำหรับเซิร์ฟเวอร์ที่มีพอร์ต 41001 ถูกต้องหรือไม่

ฉันพลาดอะไรไปหรือเปล่า

อัปเดต

ฉันได้ปรับการกำหนดค่าให้เล็กที่สุดเพื่อให้สามารถทดสอบได้ การกำหนดค่าของฉันมีลักษณะดังนี้

#################################################### ######################
   ลูกคิดต้นน้ำ {
      เซิร์ฟเวอร์ 10.120.50.11; 
   }
   
   เซิร์ฟเวอร์ {
      ฟัง 80;
      server_name abacus.example.com;
      ส่งคืน 301 https://abacus.example.com$request_uri;
   }
    
   เซิร์ฟเวอร์ {
      ฟัง 443 ssl;
      server_name abacus.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.com.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      access_log /var/log/nginx/abacus_service_access.log;
      error_log /var/log/nginx/abacus_service_error.log;

   ที่ตั้ง / {
      proxy_pass http://ลูกคิด;
   }
}

#################################################### #####################
   เอกสารต้นน้ำ {
      เซิร์ฟเวอร์ 10.120.50.10; 
   }
   
   เซิร์ฟเวอร์ {
      ฟัง 80;
      server_name docuware.example.com;
      ส่งคืน 301 https://docuware.example.com$request_uri;
   }
   
   เซิร์ฟเวอร์ {
      ฟัง 443 ssl;
      server_name docuware.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      access_log /var/log/nginx/docuware_service_access.log;
      error_log /var/log/nginx/docuware_service_error.log;
      
   ที่ตั้ง / {
      proxy_pass http://docuware/docuware;
   }
}
}

เมื่อฉันเข้าถึงเซิร์ฟเวอร์ "abacus.example.com" ฉันจะไปที่หน้าแรกของ IIS ดังนั้นฉันต้องกำหนดว่าฉันมาจากภายนอกด้วย 443 (HTTPS) และฉันถูกเปลี่ยนเส้นทางไปที่พอร์ต 23001

ถ้าฉันเข้าถึงเซิร์ฟเวอร์ "docuware.example.com/docuware" ฉันจะได้รับ 404 - ไม่พบไฟล์หรือไดเร็กทอรี ดังนั้นที่นี่ฉันต้องกำหนดว่ามันสามารถเข้าถึงเซิร์ฟเวอร์ด้วยเส้นทางย่อย

ในเครือข่ายภายในใช้งานได้โดยไม่มีปัญหา ฉันถูกเปลี่ยนเส้นทางไปที่ "docuware.example.com/DocuWare/Platform/WebClient/ClientAccount/xxx"

คุณเห็นตรงนี้ไหมว่าฉันต้องปรับอะไรบ้าง? ฉันตีหัวกับมันมาหลายชั่วโมงแล้ว

djdomi avatar
za flag
proxy_pass ตั้งค่า imho ผิด
us flag
โปรดเพิ่มตัวอย่างคำขอ URL ที่คุณต้องการขอ และผลลัพธ์ที่คาดหวังและผลลัพธ์จริงคืออะไร
va flag
ฉันแก้ไขโพสต์ของฉันสำหรับข้อมูลเพิ่มเติม
va flag
@TeroKilkanen เพิ่มการอัปเดตสำหรับคำขอ
us flag
คุณใช้ URL เดียวกันเมื่อเข้าถึงผ่านเครือข่ายภายในและเครือข่ายภายนอกหรือไม่
va flag
@TeroKilkanen ใช่ฉันทำ จากภายในฉันเข้าถึงด้วย "https://docuware.domain.com/docuware" และ "https://abacus.domain.com" และใช้งานได้ นั่นเป็นเหตุผลที่ฉันดิ้นรนว่าจะทำให้สิ่งนั้นทำงานจากภายนอกได้อย่างไร สำหรับเซิร์ฟเวอร์ลูกคิด proxypass ที่มี ":23001" และเปลี่ยนเส้นทางจะทำงานหรือไม่ และสำหรับ docuware ที่มีพาธย่อย "/docuware" จากภายนอก.. ฉันไม่รู้ว่าจะแก้ปัญหานั้นได้อย่างไร
Score:0
ธง us

สิ่งหนึ่งที่น่าจะจำเป็นคือการตั้งค่าส่วนหัวของโฮสต์ที่เหมาะสมสำหรับส่วนหัวพร็อกซี:

สำหรับลูกคิด:

ที่ตั้ง / {
    proxy_set_header โฮสต์ abacus.example.com;
    proxy_pass http://ลูกคิด;
}

สำหรับเอกสาร:

ตำแหน่ง /docuware {
    proxy_set_header โฮสต์ docuware.example.com;
    proxy_pass http://docuware/docuware/;
}
va flag
ขอบคุณมาก! สิ่งนี้ช่วยแก้ปัญหาของฉันด้วยลูกคิด มันใช้งานได้แล้ว ยังคงมีปัญหากับ docuware ฉันไม่พบหน้า 404 แต่ URL เปลี่ยนเป็น "/Platform/WebClient/" บันทึกข้อผิดพลาดแจ้งว่า "ไม่พบ /usr/share/nginx/html/Platform/WebClient/index.html"
us flag
URL แบบเต็มที่เปลี่ยนเป็นคืออะไร
va flag
สวัสดีเทโร! ขอบคุณมากสำหรับความรู้และความช่วยเหลือของคุณ ฉันจัดการเพื่อให้มันทำงานได้ ฉันตั้งค่าโฮสต์ส่วนหัวและ proxy_pass ด้วย / ที่ส่วนท้ายและตั้งค่า read_timeoutรู้ว่าทุกอย่างได้ผล! สิ่งสุดท้ายคือการเปลี่ยน url "docuware.domain.com" เป็น "docuware.domain.com/docuware" โดยอัตโนมัติเมื่อเข้าถึงผ่านเบราว์เซอร์ ฉันคิดว่าฉันสามารถแก้ปัญหานั้นได้ :)
Score:0
ธง cl

ข้อผิดพลาดแรกบอกว่า nginx ไม่พบไฟล์เฉพาะในตำแหน่งที่เขามี วิธีหนึ่งในการแก้ปัญหาคือให้ nginx เป็นโฟลเดอร์เฉพาะสำหรับไฟล์ที่ร้องขอ นั่นคือวิธีการทำงานของเว็บเซิร์ฟเวอร์

ฉันไม่แน่ใจว่าคุณสามารถเปลี่ยนเส้นทางผู้ใช้ด้วย nginx จากการรับส่งข้อมูลที่ไม่ใช่ SSL ไปยังการรับส่งข้อมูล SSL ได้หรือไม่ ทั้งคำขอและการตอบสนองควรเข้ารหัส/ไม่เข้ารหัสเหมือนกันไม่ว่าจะมีกี่ขั้นตอนในการเข้าถึงเซิร์ฟเวอร์เป้าหมายจากเว็บเบราว์เซอร์ของผู้ใช้

ดูบันทึก nginx หาก nginx เข้าสู่ลูป ในขณะที่คำขอกำลังไปที่เซิร์ฟเวอร์เดียวกันซึ่งถูกเปลี่ยนเส้นทาง

va flag
และฉันจะทำอย่างไร ตอนนี้ฉันจัดการแล้วเพื่อรับ IIS frontpage ด้วย "docuware.domain.com/docuware" แต่ตอนนี้ฉันติดอยู่อีกครั้ง...
pbies avatar
cl flag
@ Cyanmodex9 ทำอะไร?

โพสต์คำตอบ

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