Nginx cho phép xử lý cả HTTP và HTTPS trong cùng một server
khối. Do đó, bạn không phải lặp lại các chỉ thị cho cả hai và có thể chuyển hướng đường dẫn bạn muốn bảo mật
server {
listen 80 default_server;
listen 443 ssl;
... ssl certificate and other configs ...
location /user {
if ($scheme = 'http') {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
... your basic configuration ...
}
Hãy chắc chắn không đặt ssl on
dòng ở đó vì nó sẽ phá vỡ HTTP đơn giản.
Theo tùy chọn, bạn có thể chuyển hướng tất cả các yêu cầu khác từ HTTPS trở lại HTTP theo cùng một cách:
if ($scheme = 'https') {
rewrite ^ http://$http_host$request_uri? permanent;
}
CẬP NHẬT : như Alexey Ten vui lòng chỉ ra trong phần bình luận, kiểm tra scheme
từng yêu cầu không phải là một ý tưởng rất sáng sủa. Bạn nên làm theo cách khai báo cấu hình nginx của bạn. Trong trường hợp này, khai báo hai khối máy chủ với các chuyển hướng bằng cách location
di chuyển logic chung sang một tệp riêng và include
nó ở cả hai. Vì vậy, câu trả lời của GruffTech là tốt hơn.