Điểm:0

Máy chủ Nginx dưới bộ cân bằng tải, khi tìm thấy/thư mục sẽ chuyển hướng đến/thư mục/nhưng thay đổi url máy chủ

lá cờ yt

Tôi đã thiết lập máy chủ nginx trong google cloud. Máy chủ đang được truy cập từ miền máy chủ thông qua trỏ gcloud.

Như thế này:

https://server.com/test/ trỏ đến nhóm đối tượng với một trong các phiên bản có ip http://39.99.99.99.55/project/

Và mọi thứ hoạt động tốt trừ khi, bạn nhập

https://server.com/test/folder không có dấu gạch chéo ở đầu

Khi bạn làm điều đó, máy chủ lưu trữ chuyển hướng đến https://server.com/project/folder/ không phải là thư mục được chỉ định trên miền máy chủ.

Nhưng nếu bạn nhập nó đúng cách: https://server.com/test/folder/ nó hoạt động phân giải chính xác đến máy chủ ip và nhận được kết quả.

Vì vậy, máy chủ với nginx cố gắng tìm thư mục và thực hiện chuyển hướng.

Tuy nhiên, tôi không muốn nó chuyển hướng bằng đường dẫn tương đối của máy chủ, tôi muốn nó có đường dẫn máy chủ cân bằng tải như thế này: https://server.com/test/folder nên chuyển hướng đến https://server.com/test/folder/ không phải https://server.com/project/folder/

Đây là tập tin cấu hình nginx của tôi:

người phục vụ {
    nghe 80 default_server;
    lắng nghe [::]:80 default_server;

    gốc /home/.www;

    # Thêm index.php vào danh sách nếu bạn đang sử dụng PHP
    chỉ mục index.php index.html;

    tên máy chủ _;

    # tự động lập chỉ mục;

    # phục vụ trực tiếp các tệp tĩnh
    vị trí ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
        truy cập_đăng xuất;
        #hết hạn tối đa;
    }

    error_log /home/.log/xerror.log;

    nén access_log /home/.log/xaccess.log;

    # bao gồm dự án
    vị trí ^~ /dự án {
      bí danh /home/.www/project/public;
      try_files $uri $uri/ @project;

      vị trí ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_read_timeout 180;
        bao gồm fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
      }
    }

    vị trí @dự án {
        viết lại /project/(.*)$ /project/index.php cuối cùng;
    }



    địa điểm / {

        # Lần đầu tiên cố gắng phục vụ yêu cầu dưới dạng tệp, sau đó
        # làm thư mục, sau đó quay lại hiển thị lỗi 404.
        try_files $uri $uri/ /index.php?$args;

    }

    # truyền tập lệnh PHP tới máy chủ FastCGI
    vị trí ~ \.php$ {
        bao gồm đoạn trích/fastcgi-php.conf;

        # Với php-fpm (hoặc các ổ cắm unix khác):
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_read_timeout 180;
        # Với php-cgi (hoặc các ổ cắm tcp khác):
        # fastcgi_pass 127.0.0.1:9000;
    }
} 

Làm cách nào để máy chủ không chuyển hướng như vậy khi tìm thấy thư mục?

Chỉnh sửa 1 @Ivan Shatsky

yêu cầu để có được cuộn tròn -v server.com/test/folder đầu ra từ bộ yêu cầu, đây là:

* Đang thử 35.***.160.34:443...
* Bộ TCP_NODELAY
* Đã kết nối với server.com (35.***.160.34) cổng 443 (#0)
* ALPN, cung cấp h2
* ALPN, cung cấp http/1.1
* đặt thành công vị trí xác minh chứng chỉ:
* Tệp CA: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), bắt tay TLS, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), bắt tay TLS, Tiện ích mở rộng được mã hóa (8):
* TLSv1.3 (IN), bắt tay TLS, Chứng chỉ (11):
* TLSv1.3 (IN), bắt tay TLS, xác minh CERT (15):
* TLSv1.3 (IN), bắt tay TLS, Đã hoàn thành (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), bắt tay TLS, Đã hoàn thành (20):
* Kết nối SSL sử dụng TLSv1.3/TLS_AES_256_GCM_SHA384
* ALPN, máy chủ chấp nhận sử dụng h2
* Chứng chỉ máy chủ:
* chủ đề: CN=server.com
* ngày bắt đầu: 25 tháng 4 19:19:01 2022 GMT
* ngày hết hạn: 24 tháng 7 19:19:00 2022 GMT
* subjectAltName: máy chủ "server.com" khớp với "server.com" của chứng chỉ
* tổ chức phát hành: C=US; O=Google Trust Services LLC; CN=GTS CA 1D4
* Chứng chỉ SSL xác minh ok.
* Sử dụng HTTP2, máy chủ hỗ trợ đa dụng
* Trạng thái kết nối đã thay đổi (đã xác nhận HTTP/2)
* Sao chép dữ liệu HTTP/2 trong bộ đệm luồng sang bộ đệm kết nối sau khi nâng cấp: len=0
* Sử dụng ID luồng: 1 (xử lý dễ dàng 0x556617a0f2f0)
> NHẬN /test/chuẩn HTTP/2
> Máy chủ: server.com
> tác nhân người dùng: curl/7.68.0
> chấp nhận: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* ID phiên SSL cũ đã cũ, đang xóa
* Trạng thái kết nối đã thay đổi (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 301
< máy chủ: nginx/1.20.2
< ngày: Thứ Hai, ngày 23 tháng 5 năm 2022 21:04:50 GMT
< loại nội dung: văn bản/html
< độ dài nội dung: 169
< vị trí: http://server.com/project/folder/
< thông qua: 1.1 google
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
<
<html>
<head><title>301 Đã di chuyển vĩnh viễn</title></head>
<body>
<center><h1>301 Đã di chuyển vĩnh viễn</h1></center>
<hr><center>nginx/1.20.2</center>
</body>
</html>
* Kết nối #0 đến máy chủ server.com còn nguyên vẹn

Vì vậy, có vẻ như nó đã đến máy chủ nginx của tôi và nó trả về chuyển hướng 301 nhưng trong thư mục mà nó có thư mục /project/folder/ bên trong đúng với máy chủ đó, nhưng trở nên không chính xác khi nó truyền đến máy chủ lưu trữ. server.com/test/folder/ và không server.com/project/folder/.

Ivan Shatsky avatar
lá cờ gr
Tôi không thấy bất cứ điều gì trong cấu hình của bạn có thể tạo ra một loại chuyển hướng đó. Bạn có thể chạy `curl -v https://server.com/test/folder` và thêm đầu ra vào câu hỏi của mình không?
lá cờ yt
@IvanShatsky, vừa thêm kết quả `curl -v`
Ivan Shatsky avatar
lá cờ gr
Tôi hoàn toàn lạc lối. Đầu tiên, bạn phàn nàn rằng `https://server.com/test/folder` chuyển hướng tới `https://server.com/project/folder/`. Tiếp theo, bạn hiển thị yêu cầu trong đó `https://server.com/project/folder` đang được chuyển hướng đến `https://server.com/project/folder/` (đây là hành vi dự kiến ​​nếu `/home/ .www/project/folder` là một thư mục hiện có trên hệ thống tệp cục bộ của bạn. Câu hỏi thực sự của bạn là gì?
lá cờ yt
@IvanShatsky Xin lỗi, tôi đã chỉnh sửa bản chỉnh sửa, tôi đã yêu cầu `https://server.com/test/folder` và nó chuyển hướng đến `https://server.com/project/folder/`. Tôi đã không mắc lỗi trong yêu cầu cuộn tròn của mình, ngay khi tôi nhập câu trả lời cho bạn.
lá cờ yt
@IvanShatsky, mọi ý tưởng sẽ được đánh giá cao, cảm ơn bạn
Richard Smith avatar
lá cờ jp
Giải pháp đơn giản nhất mà chúng tôi sử dụng là `test` thay vì `project` trong cấu hình Nginx của bạn, để gcloud trỏ `/test` đến `/test`.

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