Score:-1

Nginx: เส้นทาง proxy_pass ของโดเมนไปยังเว็บเซิร์ฟเวอร์อื่น

ธง cn

เราวางแผนที่จะอัปเกรดเว็บแอปพลิเคชันของเราจากแอปพลิเคชันที่ใช้ php เนทีฟเป็น PHP Framework (Laravel) เพื่อเพิ่มความปลอดภัยและประสิทธิภาพของแอปพลิเคชัน งานของฉันคือแยกทราฟฟิกที่ทุกคำขอชี้ไปที่โดเมน app.localhost โดยไม่ต้องโพสต์ฟิกซ์ /v3 ยังคงส่งต่อไปยังแอปพลิเคชันเก่าบน php-เนทีฟ โหนดเว็บเซิร์ฟเวอร์และพร็อกซีทุกคำขอด้วย /v3 เส้นทางสู่ ลาราเวล โหนดเว็บเซิร์ฟเวอร์ ด้านล่างนี้คือการกำหนดค่าของฉันที่ส่งผลให้เนื้อหาทั้งหมด (css และ js) และ URL ที่สร้างโดย Laravel ชี้ไปที่เส้นทางรูท

URL ที่สร้างโดย Laravel ชี้ไปที่แอปพลิเคชันเก่า

Front Proxy (เครือข่ายสาธารณะ)

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

    # แอปเนทีฟ PHP
    ที่ตั้ง / {
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://php-native/;
    }

    # Laravel (แอป v3)
    ตำแหน่ง /v3/ {
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://laravel/;
    }
}

เว็บเซิร์ฟเวอร์ (เครือข่ายส่วนตัว)

php-เนทีฟ เว็บเซิร์ฟเวอร์

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

    รูท /usr/share/nginx/html/webapp/app;

    ที่ตั้ง / {
        ดัชนี index.php index.html index.htm;

        try_files $uri $uri/ /index.php?$query_string;
    }

    ตำแหน่ง ~ \.php$ {
        fastcgi_pass php56-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app/$fastcgi_script_name;
        รวม fastcgi_params;
    }
}

ลาราเวล เว็บเซิร์ฟเวอร์

เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name app.localhost;

    รูท /usr/share/nginx/html/webapp/app-v3/public;
    ดัชนี index.php index.html index.htm;

    ที่ตั้ง / {
        ดัชนี index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$query_string;
    }

    ตำแหน่ง ~ \.php$ {
        fastcgi_pass php74-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app-v3/public/$fastcgi_script_name;
        รวม fastcgi_params;
    }
}

ขอบคุณ

อัปเดต

คำถามของฉันคือ: วิธีแยกทราฟฟิก ดังนั้นคำขอใด ๆ จึงชี้ไปที่ app.localhost ยังคงส่งต่อไปยัง php-เนทีฟ เว็บเซิร์ฟเวอร์และคำขอทั้งหมดชี้ไปที่ app.localhost/v3 ชี้ไปยัง ลาราเวล เว็บเซิร์ฟเวอร์ ?

djdomi avatar
za flag
ฉันไม่แน่ใจ แต่ข้อผิดพลาดหรือคำถามที่คุณอาจมีคืออะไร ฉันไม่เห็นบันทึกหรือปัญหา
Ivan Shatsky avatar
gr flag
แอป laravel ของคุณที่ควรสร้างลิงก์ไปยังเนื้อหาทั้งหมดไม่ว่าจะใช้คำนำหน้า `/v3` หรือตามคำนำหน้า คุณยังสามารถตรวจสอบคำตอบ [นี้](https://stackoverflow.com/a/62840133/7121513) (แต่ทุกวิธีที่อธิบายไว้มีวิธีแก้ปัญหาที่ดีกว่าหรือแย่กว่านั้น)
cn flag
@djdomi ฉันได้อัปเดตคำถามของฉันแล้ว ขอบใจ
Score:0
ธง cn

ฉันพบวิธีแก้ปัญหาแล้ว

ขั้นตอนที่ 1: เพิ่ม X-Frowarded-Prefix ถึงผู้รับมอบฉันทะ

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

    # แอปเนทีฟ PHP
    ที่ตั้ง / {
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://php-native/;
    }

    # Laravel (แอป v3)
    ตำแหน่ง /v3/ {
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Prefix "/v3";
        proxy_pass http://laravel/;
    }
}

ขั้นตอนที่ 2: ลบล้าง getTrustedHeaderNames การทำงาน

ฟังก์ชันที่ได้รับการป้องกัน getTrustedHeaderNames()
{
    สลับ ($ นี้ -> ส่วนหัว) {
        กรณี 'HEADER_X_FORWARDED_AWS_ELB':
        คำขอกรณี::HEADER_X_FORWARDED_AWS_ELB:
            คำขอส่งคืน::HEADER_X_FORWARDED_AWS_ELB;

        กรณี 'HEADER_FORWARDED':
        คำขอกรณี::HEADER_FORWARDED:
            คำขอส่งคืน::HEADER_FORWARDED;

        กรณี 'HEADER_X_FORWARDED_FOR':
        คำขอกรณี::HEADER_X_FORWARDED_FOR:
            คำขอส่งคืน::HEADER_X_FORWARDED_FOR;

        กรณี 'HEADER_X_FORWARDED_HOST':
        คำขอกรณี::HEADER_X_FORWARDED_HOST:
            คำขอส่งคืน::HEADER_X_FORWARDED_HOST;

        กรณี 'HEADER_X_FORWARDED_PORT':
        คำขอกรณี::HEADER_X_FORWARDED_PORT:
            คำขอส่งคืน::HEADER_X_FORWARDED_PORT;

        กรณี 'HEADER_X_FORWARDED_PROTO':
        คำขอกรณี::HEADER_X_FORWARDED_PROTO:
            คำขอส่งคืน::HEADER_X_FORWARDED_PROTO;

        // เพิ่มสิ่งนี้เพื่อรองรับ x-forwarded-prefix
        กรณี 'HEADER_X_FORWARDED_PREFIX':
        คำขอกรณี::HEADER_X_FORWARDED_PREFIX:
            คำขอส่งคืน::HEADER_X_FORWARDED_PREFIX;

        // เพิ่ม | คำขอ::HEADER_X_FORWARDED_PREFIX
        ค่าเริ่มต้น:
            คำขอส่งคืน::HEADER_X_FORWARDED_FOR | คำขอ::HEADER_X_FORWARDED_HOST | คำขอ::HEADER_X_FORWARDED_PORT | คำขอ::HEADER_X_FORWARDED_PROTO | คำขอ::HEADER_X_FORWARDED_AWS_ELB;
    }

    ส่งคืน $this->ส่วนหัว;
}

สิ่งนี้อ้างอิงจาก Symfony issu symfony-ปัญหา-44572

โพสต์คำตอบ

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