2013-07-25 48 views
5

Tôi gặp sự cố khi sử dụng mod_rewrite để buộc chuyển hướng các yêu cầu HTTP sang HTTPS bằng Apache 2.2.22 trên Ubuntu Server 12.04.Chuyển hướng HTTP sang HTTPS bằng Apache

My/etc/apache2/sites-available/tập tin mặc định như sau:

<VirtualHost *:80> 
     RewriteEngine On 
     RewriteCond %{SERVER_PORT} !^443$ 
     RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
    </VirtualHost> 

Người dẫn chương trình HTTPS được định nghĩa trong mặc định-ssl trong cùng thư mục.

Truy cập địa chỉ IP cục bộ của máy chủ, chuyển hướng dường như hoạt động tốt. Tuy nhiên, truy cập nó thông qua FQDN, nó không. Sử dụng FQDN, trang web có sẵn tại cổng 5443, được ánh xạ trong tường lửa đến 443 trên máy chủ, vì vậy có lẽ có liên quan đến vấn đề này. Tôi không thể chỉ sử dụng cổng 443 trực tiếp, vì nó đang được sử dụng trên địa chỉ IP này bởi một máy chủ khác.

Tiếp tục làm rõ, sau đây là liên kết hợp lệ:

https://website:5443 
    https://192.168.200.80:443 

Các chuyển hướng làm việc ở đây:

http://192.168.200.80 

Nhưng sau đưa ra một Bad Request 400, và đây là nơi chuyển hướng là cần thiết :

http://website:5443/ 

"Trình duyệt của bạn đã gửi yêu cầu mà máy chủ này không thể hiểu được. Lý do: Bạn đang nói HTTP thuần tuý với cổng máy chủ hỗ trợ SSL. Thay vì sử dụng lược đồ HTTPS để truy cập URL này, vui lòng. "

+0

Điều này có vẻ như chặng đường dài để làm một điều đơn giản, có thể bạn có một lý do cho nó mặc dù. Trong anycase, bạn nên kiểm tra mod_proxy: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html cùng với câu hỏi SO tương đối này: http://stackoverflow.com/questions/1162375/apache-port -Ủy quyền. –

Trả lời

2

Vấn đề của bạn ở đây là yêu cầu HTTP ban đầu: Điều này sẽ không hoạt động vì máy chủ sẽ không hiểu nó nhận yêu cầu trên cổng 443 (làm phản hồi đang đề nghị).

Nếu không có cổng được đưa ra, các giao thức http mặc định là cổng 80, https đến cổng 443.

Đây cũng là lý do tại sao chuyển hướng địa phương của bạn hoạt động. tôi đặt cược, nếu bạn truy cập vào trang thông qua http://website/ (với cổng chuyển tiếp thích hợp của cổng 80), nó sẽ hoạt động tốt. Cũng lưu ý rằng VirtualHost của bạn chỉ được xác định cho cổng 80 dù sao, vì vậy nó sẽ không hợp lệ cho các yêu cầu được gửi đến website:5443 (hoặc website:443).

Nói chung, bạn cần máy chủ chấp nhận cả yêu cầu HTTP và HTTPS trên một cổng. Không chắc chắn bất kỳ máy chủ phổ biến nào thực sự hỗ trợ một cái gì đó như thế, bởi vì (tôi nghĩ) về cơ bản nó vi phạm các thông số kỹ thuật.

+0

Vì vậy, về cơ bản, điều này không thể được thực hiện trong thiết lập của tôi? – dutchgold92

+0

Không phải là tôi biết. Bạn có thể cần một máy chủ tùy chỉnh bằng cách nào đó chấp nhận cả hai hoặc một yêu cầu chuyển hướng proxy tùy chỉnh dựa trên nội dung thực tế của chúng. – Mario

+0

Vâng, trong cả hai trường hợp nó không thực sự đáng giá trong tình huống này. Chúc mừng. – dutchgold92

8

Điều này là hoàn toàn có thể. Sau đây chuyển hướng tất cả http đến url https.

<VirtualHost *:80> 
    ServerName mydomainname.com 
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</VirtualHost> 

đảm bảo bạn tải mô-đun viết lại mod_rewrite và bật mô-đun đó.

1

nếu bạn muốn chuyển hướng trang web của mình từ http: // anything.example.com tới https: //anything.example.com ... Chỉ cần tạo tệp .conf lưu trữ dành riêng làm/etc/httpd/conf. d/dedicated.conf và các tập tin conf khác như virtual.conf ... các mục cho tệp tin chuyên dụng.conf như sau ....

đây là máy chủ lưu trữ dành riêng cho tệp conf để chuyển hướng nó tới https ... th[][1]

<virtualhost *:80> 
servername host.example.com 
documentroot /var/www/html 
rewriteengine on 
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
sslcertificatefile /etc/pki/tls/certs/name.crt 
sslcertificatekeyfile /etc/pki/tls/private/name.key 
</virtualhost> 
<directory /var/www/html> 
allowoverride all 
require all granted 
</directory> 
+1

không đăng mã dưới dạng hình ảnh. – Jakuje

+0

sẽ giới thiệu lỗ hổng bảo mật này không ?? – Anthony

+0

Tôi khá chắc chắn apache chính nó khuyến cáo sử dụng chuyển hướng và không viết lại bây giờ ?? – Anthony

0
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]