Điểm:0

Tiêu đề ủy quyền bị thiếu khi NGINX Proxy Chuyển sang tên miền phụ

lá cờ ng

Xin chào, tôi đang chạy Laravel trên máy chủ NGINX và tôi muốn sử dụng khả năng proxy ngược NGINX làm cổng API cho Laravel của tôi và ứng dụng API nút khác. Đây là cấu hình của tôi:

URL ứng dụng: staging-app.example.com
Điểm cuối API ứng dụng: staging-app.example.com/api
URL cổng API: api.example.com

Điều tôi muốn làm là chuyển hướng tất cả các yêu cầu API api.example.com/staging-app đến staging-app.example.com/api. Tôi đã thành công trong việc chuyển hướng yêu cầu API, nhưng bằng cách nào đó, tiêu đề ủy quyền không được chuyển qua proxy, dẫn đến lỗi 401 trái phép trong khi các tiêu đề khác được chuyển qua.

Đây là hiện tại của tôi api.example.com cấu hình nginx:

người phục vụ {
        server_name api.example.com;


        vị trí /staging-app {
                viết lại ^/staging-app/(.*)$ /$1 break; 
                proxy_pass http://staging-app.example.com/;
        }

        vị trí /kiểm tra {
                viết lại ^/test/(.*)$ /$1 break;
                proxy_pass http://127.0.0.1:3333/;
         }

    nghe [::]:443 ssl; # được quản lý bởi Certbot
    nghe 443 ssl; # được quản lý bởi Certbot
    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem; # được quản lý bởi Certbot
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot

}
người phục vụ {
    nếu ($host = api.example.com) {
        trả lại 301 https://$host$request_uri;
    } # được quản lý bởi Certbot


        nghe 80;
        nghe [::]:80;

        server_name api.example.com;
    trả lại 404; # được quản lý bởi Certbot
}

và đối với ứng dụng laravel của tôi, tôi sử dụng cấu hình được cung cấp từ bản thân Laravel

Cập nhật 1: Tôi đã thử thêm proxy_set_header Kiểm tra giá trị thử nghiệm trực tiếp trong khối vị trí, nhưng có vẻ như nó cũng không hoạt động

Ivan Shatsky avatar
lá cờ gr
Không gì có thể ngăn nginx chuyển tiêu đề `Authorization` tới thượng nguồn của bạn. Tuy nhiên, bạn không chuyển yêu cầu của mình đến điểm cuối `/api`; để làm điều đó, hãy sử dụng `location /staging-app { proxy_pass http://staging-app.example.com/api; }` thay vào đó. Trên thực tế, không cần quy tắc viết lại nào để cấu hình của bạn loại bỏ tiền tố URI; kiểm tra [điều này](https://stackoverflow.com/questions/53649885/a-little-confused-about-trailing-slash-behavior-in-nginx) chuỗi SO để tìm hiểu lý do.
Kevin Yobeth avatar
lá cờ ng
Tôi đã cài đặt [telescope](https://laravel.com/docs/9.x/telescope) cho phép tôi xem các yêu cầu gửi đến. Yêu cầu đến thành công với điểm cuối chính xác, nhưng nó thiếu `Tiêu đề ủy quyền`. Khi tôi thử thêm một tiêu đề khác, chẳng hạn như `authorizationzz`, nó sẽ được thông qua.
Điểm:0
lá cờ cn

Hãy thử thêm phần sau vào cấu hình của bạn cho máy chủ lắng nghe trên cổng 443:

proxy_http_version 1.1;
proxy_set_header "Kết nối" "";

Điều này sẽ làm cho kết nối từ tổng thể và đại lý tồn tại cần thiết để xác thực trong một số thiết lập

tài liệu cấu hình

tài liệu duy trì nginx

Kevin Yobeth avatar
lá cờ ng
Không, tiêu đề Ủy quyền vẫn không được thông qua. Tôi đã thử thêm trực tiếp `proxy_set_header Test testsvalue` vào khối vị trí, nhưng bằng cách nào đó, giá trị này không được thêm vào yêu cầu.

Đă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.