Tôi đang làm theo hướng dẫn để thiết lập proxy API, tôi đang chạy các ứng dụng máy chủ sản xuất và phát triển trên cùng một VPS
https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/
Tôi đã quản lý miền của mình bằng SSL qua certbot trên cả hai live.domain.com
và dev.domain.com
Tôi gặp khó khăn khi "Xác định API kho hàng"
Vấn đề là định tuyến được giải thích dựa trên vị trí đường dẫn URL, nó không giải thích cách xử lý tên miền phụ được thiết lập trên nó.
Tôi đã thiết lập:
api_gateway
bao gồm api_backends.conf;
bao gồm api_keys.conf;
người phục vụ {
truy cập_log /var/log/nginx/api_live.log chính; # Mỗi API cũng có thể đăng nhập vào một
# tập tin riêng biệt
nghe 443 ssl;
server_name live.domain.com;
# Cấu hình TLS
ssl_certificate /etc/letsencrypt/live/live.domain.com/fullchain.pem; # được quản lý bởi Certbot
ssl_certificate_key /etc/letsencrypt/live/live.domain.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
ssl_session_cache được chia sẻ:SSL:10m;
ssl_session_timeout 5 phút;
ssl_ciphers CAO:!aNULL:!MD5;
ssl_protocols TLSv1.2 TLSv1.3;
# Định nghĩa API, mỗi định nghĩa một tệp
bao gồm api_conf.d/*.conf;
# Phản hồi lỗi
error_page 404 = @400; # Coi đường dẫn không hợp lệ là yêu cầu không hợp lệ
bật proxy_intercept_errors; # Không gửi lỗi phụ trợ cho khách hàng
bao gồm api_json_errors.conf; # Lỗi JSON thân thiện với ứng dụng khách API
ứng dụng default_type/json; # Nếu không có loại nội dung, giả sử JSON
}
# *lặp lại cho dev.domain.com*
api_backends
sống ngược dòng {
vùng live_service 64k;
máy chủ 127.0.0.1:4000
}
nhà phát triển ngược dòng {
khu dev_service 64k;
máy chủ 127.0.0.1:2000
}
Bất kỳ cách nào tôi có thể quản lý nó với những điều sau đây:
địa điểm / {
# Cấu hình chính sách tại đây (xác thực, giới hạn tốc độ, ghi nhật ký...)
#
truy cập_log /var/log/nginx/warehouse_api.log chính;
# định tuyến URI
#
# nếu tên miền phụ hoạt động
địa điểm / {
proxy_pass http://live;
}
# khác nếu nhà phát triển tên miền phụ
địa điểm / {
proxy_pass http://dev;
}
trả lại 404; # Bắt hết
}
có lẽ tôi có thể sử dụng đoạn mã này mà tôi đã tìm thấy.
nếu ($host = live.domain.com) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
điều này có thể không?
nếu ($host = live.domain.com){
vị trí /api {
proxy_pass http://live/api;
}
# VÀ/HOẶC
vị trí /docs/ {
proxy_pass https://live$request_uri
}
}