Điểm:0

Thực hiện chuyển hướng nginx sang HTTPS ngay cả với regex vị trí cạnh tranh

lá cờ cn

Tôi có cấu hình sau bên trong nginx người phục vụ {...} chặn:

vị trí / một số ứng dụng { 
  nếu ( $https != "bật" ) { 
    trả về 301 https://$server_name$request_uri;
  } 

  vị trí ~ \.php$ { 
    bao gồm đoạn trích/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php-fpm.sock;
  } 
} 

Vấn đề là:

  • khi tôi truy cập http://example.com/someapp/somefile.html (hoặc chỉ /someapp), tôi được chuyển hướng đến HTTPS,
  • nhưng khi tôi truy cập http://example.com/someapp/somefile.php, Tôi không được chuyển hướng đến HTTPS.

Nhân tiện, điều này phù hợp với tài liệu, điều đó nói:

Để tìm vị trí phù hợp với một yêu cầu nhất định, trước tiên nginx kiểm tra các vị trí được xác định bằng cách sử dụng chuỗi tiền tố (vị trí tiền tố). Trong số đó, vị trí có tiền tố khớp dài nhất được chọn và ghi nhớ. Sau đó, các biểu thức chính quy được kiểm tra, theo thứ tự xuất hiện của chúng trong tệp cấu hình. Việc tìm kiếm các biểu thức chính quy kết thúc ở lần khớp đầu tiên và cấu hình tương ứng được sử dụng. Nếu không tìm thấy kết quả khớp với biểu thức chính quy thì cấu hình của vị trí tiền tố được ghi nhớ trước đó sẽ được sử dụng.

Vì vậy, khi vị trí ~ \.php$ là một trận đấu, vị trí / ứng dụng nào đó bị bỏ qua, ngay cả khi yêu cầu dành cho .../someapp/somefile.php.

vị trí ~ \.php$ {...} khối bên ngoài của cha mẹ vị trí /someapp {...} block không thay đổi hành vi này.

Làm cách nào tôi có thể chuyển hướng mọi yêu cầu HTTP sang HTTPS tới /someapp không có phải sao chép nếutrở lại dòng vào khối vị trí php?

lá cờ us
Vui lòng thêm cấu hình nginx hoàn chỉnh vào câu hỏi như được hiển thị bằng lệnh `nginx -T`.
lá cờ cn
@TeroKilkanen Tôi không thể thêm quá nhiều thông tin vì mục đích bảo mật. Tuy nhiên, tôi đã thêm một số đoạn mã tài liệu nginx, điều này làm cho bản chất vấn đề của tôi rõ ràng hơn, tôi hy vọng.
djdomi avatar
lá cờ za
totor, bạn có thể nghĩ đến việc thay thế tên miền hoặc ips thực bằng example.com không?
lá cờ us
Không có bối cảnh lớn hơn thì không thể đề xuất một giải pháp tốt cho vấn đề.
Điểm:3
lá cờ za

Đề xuất của tôi sẽ là

người phục vụ {
       
        server_name example.com *.example.com;
        nghe 80;
        nghe [::]:80;
        trả lại 301 https://$host$request_uri;
}

điều này sẽ tạo một máy chủ cơ bản cho cổng 80 và yêu cầu trình duyệt sử dụng vĩnh viễn 443

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