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/
.