Score:0

วนซ้ำการเปลี่ยนเส้นทางไม่สิ้นสุดในการกำหนดค่า nginx

ธง cn

ฉันมีการกำหนดค่า nginx โดยกำหนดค่า SSL และเปลี่ยนเส้นทางสองครั้งไปยังคอนเทนเนอร์นักเทียบท่า หนึ่งในนั้น (แก้ไข https://psono.example.com/portal) ใช้งานได้ แต่อันที่ส่งต่อโดเมนเอง (แก้ไข https://psono.example.com/) ไม่ทำงานและนำไปสู่การเปลี่ยนเส้นทางที่ไม่มีที่สิ้นสุดแทน (https://psono.example.com/psono.example.com/psono.example.com/psono.example.com/psono.example.com/...)

นี่คือการกำหนดค่าของฉัน

เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name psono.example.com;
    ส่งคืน 301 https://$host$request_uri;
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl http2;
    server_name psono.example.com;    
    ssl_protocols TLSv1.2;
    เปิด ssl_prefer_server_ciphers;
    ssl_session_cache ที่ใช้ร่วมกัน: SSL:10m;
    ปิด ssl_session_tickets;
    เปิด ssl_stapling;
    เปิด ssl_stapling_verify;
    ssl_session_timeout 1d;
    ตัวแก้ไข 8.8.8.8 8.8.4.4 ถูกต้อง = 300s;
    Solver_timeout 5 วินาที;
    ssl_ciphers'';

    #แสดงความคิดเห็นในนี้หากคุณรู้ว่าคุณกำลังทำอะไรอยู่
    # add_header การขนส่งที่เข้มงวด - ความปลอดภัย "อายุสูงสุด = 63072000; includeSubdomains; โหลดล่วงหน้า";

    add_header ผู้อ้างอิง-นโยบายต้นทางเดียวกัน
    add_header X-Frame-ตัวเลือกปฏิเสธ;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-การป้องกัน "1; mode=block";

    # หากคุณติดตั้งเซิร์ฟเวอร์ไฟล์ผู้ดูแลระบบไว้ด้านหลังโดเมนพร็อกซีย้อนกลับนี้ ให้เพิ่ม URL เซิร์ฟเวอร์ไฟล์ของคุณ เช่น https://fs01.example.com เป็น connect-src ด้วย:
    add_header Content-Security-Policy "default-src 'none'; manifest-src 'self'; connect-src 'self' https://static.psono.com https://api.pwnedpasswords.com https://storage .googleapis.com https://*.digitaloceanspaces.com https://*.blob.core.windows.net https://*.s3.amazonaws.com; font-src 'self'; img-src 'self ' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; object-src 'self'";

    ssl_certificate /etc/letsencrypt/live/psono.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/psono.example.com/privkey.pem;

    client_max_body_size 256m;

    เปิด gzip;
    gzip_disable "msie6";
    
gzip_vary บน;
    gzip_proxyed ใด ๆ ;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    ข้อความ gzip_types/ข้อความล้วน/แอปพลิเคชัน css/แอปพลิเคชัน json/แอปพลิเคชัน x-javascript/ข้อความจาวาสคริปต์/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+rss ข้อความ/แอปพลิเคชันจาวาสคริปต์/แอปพลิเคชัน vnd.ms-fontobject/แบบอักษร x-font-ttf/รูปภาพ opentype /svg+xml รูปภาพ/x-icon;
    
    รูท /var/www/html;
    
    ตำแหน่ง / เซิร์ฟเวอร์ {
                เขียนใหม่ ^/server/(.*) /$1 ตัวแบ่ง;
                proxy_set_header โฮสต์ $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

        add_header แก้ไขล่าสุด $date_gmt;
        add_header Pragma "ไม่มีแคช";
        add_header Cache-Control "ส่วนตัว, อายุสูงสุด = 0, ไม่มีแคช, ไม่มีที่เก็บ";
        if_modified_since ปิด;
        หมดอายุ;
        etag ปิด;
    
                proxy_pass http://localhost:10100;
    }
    
    ตำแหน่ง ~* ^/portal.*\.(?:ico|css|js|gif|jpe?g|png|eot|woff|woff2|ttf|svg|otf)$ {
        หมดอายุ 30d;
        add_header Pragma สาธารณะ;
        add_header แคชควบคุม "สาธารณะ";

        # ลบ # นำหน้าออกจากบรรทัดต่อไปนี้หากคุณมี webclient ของผู้ดูแลระบบทำงานในคอนเทนเนอร์นักเทียบท่า
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://localhost:10102;
        proxy_redirect http://localhost:10102 https://psono.example.com;
    }
 ตำแหน่ง ~* \.(?:ico|css|js|gif|jpe?g|png|eot|woff|woff2|ttf|svg|otf)$ {
        หมดอายุ 30d;
        add_header Pragma สาธารณะ;
        add_header แคชควบคุม "สาธารณะ";
    
        # ลบ # นำหน้าออกจากบรรทัดต่อไปนี้หากคุณมีเว็บไคลเอนต์ทำงานในคอนเทนเนอร์นักเทียบท่า
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://localhost:10101;
        proxy_redirect http://localhost:10101 https://psono.example.com;
    }
    
    # ลบ # นำหน้าออกจากบรรทัดต่อไปนี้หากคุณมี webclient ของผู้ดูแลระบบทำงานในคอนเทนเนอร์นักเทียบท่า
     ตำแหน่ง / พอร์ทัล {
                proxy_set_header โฮสต์ $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

                proxy_read_timeout 90;

                proxy_pass http://localhost:10102;
     }
    
    # ลบ # นำหน้าออกจากบรรทัดต่อไปนี้หากคุณมี webclient ของผู้ดูแลระบบที่ไม่ได้ทำงานในคอนเทนเนอร์นักเทียบท่า
    # ตำแหน่ง /พอร์ทัล {
    # ดัชนี index.html index.htm;
    # try_files $uri /portal/index.html; # ส่งต่อคำขอทั้งหมดไปที่ index.html
    # }
    
    # ลบ # นำหน้าออกจากบรรทัดต่อไปนี้หากคุณมีเว็บไคลเอนต์ทำงานในคอนเทนเนอร์นักเทียบท่า
    ที่ตั้ง / {
                proxy_set_header โฮสต์ $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

                proxy_pass http://localhost:10101;
                proxy_read_timeout 90;
        #
                proxy_redirect http://localhost:10101 https://psono.example.com;
    }
}

แก้ไข ผลลัพธ์ของ curl -v คือ:


* ลอง 5.9.74.183:443...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ psono.example.com (5.9.74.183) พอร์ต 443 (#0)
* ALPN ให้บริการ h2
* ALPN ให้บริการ http/1.1
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.3 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.2 (IN), การจับมือ TLS, ใบรับรอง (11):
* TLSv1.2 (IN), การจับมือ TLS, การแลกเปลี่ยนคีย์เซิร์ฟเวอร์ (12):
* TLSv1.2 (IN), การจับมือ TLS, เซิร์ฟเวอร์เสร็จสิ้น (14):
* TLSv1.2 (ออก), การจับมือ TLS, การแลกเปลี่ยนคีย์ไคลเอนต์ (16):
* TLSv1.2 (ออก), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.2 (ออก), การจับมือ TLS, เสร็จสิ้น (20):
* TLSv1.2 (IN), การจับมือ TLS, เสร็จสิ้น (20):
* การเชื่อมต่อ SSL โดยใช้ TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN เซิร์ฟเวอร์ที่ยอมรับให้ใช้ h2
* ใบรับรองเซิร์ฟเวอร์:
* หัวเรื่อง: CN=psono.example.com
* วันที่เริ่มต้น: 1 ธันวาคม 14:53:24 น. 2021 GMT
* วันหมดอายุ: 1 มี.ค. 14:53:23 น. 2022 GMT
* subjectAltName: โฮสต์ "psono.example.com" ตรงกับ "psono.example.com" ของใบรับรอง
* ผู้ออก: C=US; O=มาเข้ารหัสกันเถอะ; CN=R3
* ใบรับรอง SSL ตรวจสอบตกลง
* การใช้ HTTP2 เซิร์ฟเวอร์รองรับการใช้งานหลายอย่าง
* เปลี่ยนสถานะการเชื่อมต่อ (ยืนยัน HTTP/2)
* การคัดลอกข้อมูล HTTP/2 ในสตรีมบัฟเฟอร์ไปยังบัฟเฟอร์การเชื่อมต่อหลังจากอัปเกรด: len=0
* ใช้ Stream ID: 1 (จัดการง่าย 0x557ac8936e10)
> เก็ท / HTTP/2
> โฮสต์: psono.example.com
> user-agent: curl/7.68.0
> ยอมรับ: */*
>
* เปลี่ยนสถานะการเชื่อมต่อ (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 403
< เซิร์ฟเวอร์: nginx/1.18.0 (Ubuntu)
< วันที่: พฤ. 02 ธ.ค. 2564 06:53:11 GMT
< ประเภทเนื้อหา: text/html
< ความยาวเนื้อหา: 162
<
<html>
<head><title>403 ห้าม</title></head>
<เนื้อหา>
<center><h1>403 ห้าม</h1></center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</body>
</html>

us flag
URL ที่ทริกเกอร์การวนรอบการเปลี่ยนเส้นทางคืออะไร ผลลัพธ์ของ `curl -v` สำหรับ URL นั้นคืออะไร
cn flag
@TeroKilkanen ฉันอัปเดตคำถามแล้ว
us flag
คุณต้องระบุข้อมูลรับรองการตรวจสอบสิทธิ์ HTTP ด้วย `-u :` ตัวเลือกใน curl เพื่อให้ได้ผลลัพธ์ที่เป็นประโยชน์
cn flag
ฉันได้รับผลลัพธ์เดียวกันเมื่อใช้การตรวจสอบสิทธิ์ นอกจากนี้ หน้าหลักไม่ควรต้องมีการตรวจสอบสิทธิ์ แต่แสดงหน้าเข้าสู่ระบบ
us flag
ตัวอย่างของคุณไม่มีการเปลี่ยนเส้นทาง ดังนั้นจึงไม่สามารถทำให้เกิดการวนรอบการเปลี่ยนเส้นทางได้ มันแสดง `403 Forbidden ' ซึ่งหมายความว่าไม่ได้ส่งข้อมูลประจำตัวที่เหมาะสมในคำขอ
cn flag
ฉันรู้ ตามทฤษฎีแล้ว นี่คือสิ่งที่ฉันจะพูดถ้าฉันอยู่ในสถานที่ของคุณ ฉันลองเพิ่มเติมและพบว่านี่เป็นปัญหาเฉพาะกับเบราว์เซอร์นี้ในเครื่องของฉันเท่านั้น การใช้เบราว์เซอร์อื่นหรือเบราว์เซอร์เดียวกันบนเครื่องอื่น ฉันสามารถเข้าถึงหน้าแรกได้โดยไม่ต้องวนซ้ำการเปลี่ยนเส้นทาง ฉันลองเพิ่มเติมและลบคุกกี้ออกจากโดเมนอย่างสมบูรณ์ และตอนนี้ฉันสามารถเข้าถึงหน้าแรกได้แล้ว ดูเหมือนว่าจะเป็นปัญหาเฉพาะแอปพลิเคชัน ขอขอบคุณที่ตรวจสอบสิ่งนี้
Score:1
ธง cn

ปรากฎว่านี่ไม่ใช่ปัญหา nginx แต่เป็นปัญหาที่เกี่ยวข้องกับ pson แทน ฉันลงชื่อเข้าใช้ที่หน้า /portal ก่อน ซึ่งเป็นการตั้งค่าคุกกี้บางส่วน และหลังจากนั้นฉันไม่สามารถเข้าสู่หน้าหลัก / ได้อีกต่อไป ส่งผลให้เกิดการวนซ้ำการเปลี่ยนเส้นทาง การลบคุกกี้สำหรับโดเมนทำให้ฉันสามารถเข้าสู่หน้าหลักได้ ฉันเปิดปัญหาที่ psonos สำหรับสิ่งนี้: https://gitlab.com/psono/psono-server/-/issues/212

โพสต์คำตอบ

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