Điểm:-1

Nginx: đường dẫn proxy_pass của tên miền đến máy chủ web khác

lá cờ cn

Chúng tôi dự định nâng cấp ứng dụng web của mình từ ứng dụng dựa trên gốc php lên dựa trên PHP Framework (Laravel) để tăng cường bảo mật và hiệu suất của ứng dụng. Nhiệm vụ của tôi là phân chia lưu lượng khi mọi yêu cầu trỏ đến miền ứng dụng.localhost không có hậu tố /v3 vẫn được chuyển tiếp đến ứng dụng cũ trên gốc php nút máy chủ web và ủy quyền tất cả yêu cầu với /v3 đường dẫn đến ấu trùng nút máy chủ web. Dưới đây là cấu hình của tôi dẫn đến tất cả nội dung (css và js) và URL được tạo bởi Laravel được trỏ đến đường dẫn gốc.

Laravel tạo URL trỏ đến ứng dụng cũ

Proxy phía trước (Mạng công cộng)

người phục vụ {
    nghe 80;
    nghe [::]:80;
    server_name app.localhost;

    # Ứng dụng bản địa PHP
    địa điểm / {
        proxy_set_header Máy chủ lưu trữ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://php-native/;
    }

    # Laravel (ỨNG DỤNG v3)
    vị trí /v3/ {
        proxy_set_header Máy chủ lưu trữ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://laravel/;
    }
}

Máy chủ web (Mạng riêng)

gốc php Máy chủ web

người phục vụ {
    nghe 80;
    nghe [::]:80;
    server_name app.localhost;

    gốc /usr/share/nginx/html/webapp/ứng dụng;

    địa điểm / {
        chỉ mục index.php index.html index.htm;

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

    vị trí ~ \.php$ {
        fastcgi_pass php56-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app/$fastcgi_script_name;
        bao gồm fastcgi_params;
    }
}

ấu trùng Máy chủ web

người phục vụ {
    nghe 80;
    server_name app.localhost;

    gốc /usr/share/nginx/html/webapp/app-v3/public;
    chỉ mục index.php index.html index.htm;

    địa điểm / {
        chỉ mục index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$query_string;
    }

    vị trí ~ \.php$ {
        fastcgi_pass php74-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app-v3/public/$fastcgi_script_name;
        bao gồm fastcgi_params;
    }
}

Cảm ơn

Cập nhật

Câu hỏi của tôi là: làm thế nào để phân chia lưu lượng truy cập, để mọi yêu cầu được chỉ đến ứng dụng.localhost vẫn chuyển tiếp đến gốc php máy chủ web và tất cả các yêu cầu trỏ đến app.localhost/v3 chỉ vào ấu trùng máy chủ web ?

djdomi avatar
lá cờ za
tôi không chắc chắn nhưng lỗi hoặc câu hỏi mà bạn có thể gặp phải là gì? tôi không thấy nhật ký hoặc sự cố.
Ivan Shatsky avatar
lá cờ gr
Ứng dụng laravel của bạn sẽ tạo liên kết đến tất cả nội dung bằng cách sử dụng tiền tố `/v3` hoặc tiền tố tương đối. Bạn cũng có thể kiểm tra câu trả lời [this](https://stackoverflow.com/a/62840133/7121513) (tuy nhiên, mọi cách tiếp cận được mô tả chỉ có cách giải quyết tốt hơn hoặc tệ hơn).
lá cờ cn
@djdomi tôi đã cập nhật câu hỏi của mình. cảm ơn
Điểm:0
lá cờ cn

tôi đã tìm thấy giải pháp của mình.

Bước 1: Thêm X-Frowarded-Prefix đến Proxy phía trước

người phục vụ {
    nghe 80;
    nghe [::]:80;
    server_name app.localhost;

    # Ứng dụng bản địa PHP
    địa điểm / {
        proxy_set_header Máy chủ lưu trữ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://php-native/;
    }

    # Laravel (ỨNG DỤNG v3)
    vị trí /v3/ {
        proxy_set_header Máy chủ lưu trữ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Prefix "/v3";
        proxy_pass http://laravel/;
    }
}

Bước 2: Ghi đè getTrustedHeaderNames chức năng

chức năng được bảo vệ getTrustedHeaderNames()
{
    switch ($this->headers) {
        trường hợp 'HEADER_X_FORWARDED_AWS_ELB':
        trường hợp Yêu cầu::HEADER_X_FORWARDED_AWS_ELB:
            trả lại Yêu cầu::HEADER_X_FORWARDED_AWS_ELB;

        trường hợp 'HEADER_FORWARDED':
        trường hợp Yêu cầu::HEADER_FORWARDED:
            trả lại Yêu cầu::HEADER_FORWARDED;

        trường hợp 'HEADER_X_FORWARDED_FOR':
        trường hợp Yêu cầu::HEADER_X_FORWARDED_FOR:
            trả lại Yêu cầu::HEADER_X_FORWARDED_FOR;

        trường hợp 'HEADER_X_FORWARDED_HOST':
        trường hợp Yêu cầu::HEADER_X_FORWARDED_HOST:
            trả lại Yêu cầu::HEADER_X_FORWARDED_HOST;

        trường hợp 'HEADER_X_FORWARDED_PORT':
        trường hợp Yêu cầu::HEADER_X_FORWARDED_PORT:
            trả lại Yêu cầu::HEADER_X_FORWARDED_PORT;

        trường hợp 'HEADER_X_FORWARDED_PROTO':
        trường hợp Yêu cầu::HEADER_X_FORWARDED_PROTO:
            trả lại Yêu cầu::HEADER_X_FORWARDED_PROTO;

        // thêm phần này để hỗ trợ x-forwarded-prefix
        trường hợp 'HEADER_X_FORWARDED_PREFIX':
        trường hợp Yêu cầu::HEADER_X_FORWARDED_PREFIX:
            trả lại Yêu cầu::HEADER_X_FORWARDED_PREFIX;

        // thêm | Yêu cầu::HEADER_X_FORWARDED_PREFIX
        mặc định:
            trả lại Yêu cầu::HEADER_X_FORWARDED_FOR | Yêu cầu::HEADER_X_FORWARDED_HOST | Yêu cầu::HEADER_X_FORWARDED_PORT | Yêu cầu::HEADER_X_FORWARDED_PROTO | Yêu cầu::HEADER_X_FORWARDED_AWS_ELB;
    }

    trả về $this->tiêu đề;
}

cái này dựa trên bản phát hành Symfony symfony-issues-44572

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.