2011-08-12 37 views
13

Tôi đã xây dựng một máy chủ web lang thang/virtualbox như một sandbox phát triển và cấu hình apache trong VM cho ssl (trên cổng mặc định 443, với một ký tự chứng chỉ). Tôi đã thử nghiệm các trang trên máy ảo bằng cách sử dụng curlTruy cập apache trên một sandbox lang thang bằng cách sử dụng ssl (cổng chuyển tiếp)

curl -v -k https://mysite.mydomain.com/testSearch/results?postcode=WN8+0BA 

và dường như hoạt động khá vui vẻ, vì vậy tôi hài lòng rằng apache được định cấu hình chính xác và hoạt động trong máy ảo.

Tuy nhiên, khi tôi cố gắng truy cập máy ảo từ trình duyệt của máy chủ lưu trữ của tôi qua https, tôi không thể làm như vậy.

Tôi đã thêm

config.vm.forward_port "https", 443, 8443 

để vagrantfile của tôi, nhưng cố gắng để truy cập vào url

https://mysite.mydomain.com:8443/testSearch/results?postcode=WN8+0BA 

đơn giản là không thể hiển thị trang tôi đã thử với các trình duyệt khác nhau: IE cho một "Internet Explorer vô nghĩa không thể hiển thị trang web"; Chrome cho

SSL connection error 
Unable to make a secure connection to the server. This may be a problem with the server or it may be requiring a client authentication certificate that you don't have. 
Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error. 

Firefox mang lại cho tôi

An error occurred during a connection to mysite.mydomain.com:8443. 
SSL received a record that exceeded the maximum permissible length. 
(Error code: ssl_error_rx_record_too_long) 

nhưng ngay cả những tab Firebug Net không cho tôi biết bất cứ điều gì nhiều hơn thế.

Tôi không nhận được bất kỳ điều gì trong truy cập hoặc nhật ký lỗi trên apache VM, vì vậy tôi nghi ngờ rằng không có chuyển tiếp âm thanh ở tất cả.

  • VM Khách OS: centos56x64
  • Host: Windows 7 64-bit
  • JRuby: 1.6.3 (ruby-1.8.7-P330) (2011/07/07 965162f) (Java HotSpot (TM) 64-Bit server VM 1.6.0_24) [Windows 7-amd64-java]
  • Vagrant: 0.7.8
  • VirtualBox: 4.0.12

Bất kỳ trợ giúp sẽ được biết ơn chấp nhận.

Trả lời

24

1) Cấu hình tập tin Vagrantfile

Vagrant::Config.run do |config| 
    config.vm.box = "lucid32" 
    config.vm.network "33.33.33.10" 
    config.vm.forward_port "http", 80, 8080 
end 

2) Truy cập VM của bạn "lucid32"

vagrant ssh 

3) Bên trong máy ảo của bạn, cấu hình Apache "Virtual Host" :

<VirtualHost 33.33.33.10:80> 
    ServerName  your-domain.dev 
    DocumentRoot /vagrant 
    DirectoryIndex index.php index.html index.htm 

    <Directory /vagrant> 
     AllowOverride All 
     Allow from All 
    </Directory> 
</VirtualHost> 

<VirtualHost 33.33.33.10:443> 
    ServerName  your-domain.dev 
    DocumentRoot /vagrant 
    DirectoryIndex index.php index.html index.htm 

    <Directory /vagrant> 
     AllowOverride All 
     Allow from All 
    </Directory> 

    SSLEngine on 
    SSLCertificateFile /path/to/certicate/apache.pem 
</VirtualHost> 

4) Exit VM và cấu hình tập tin "hosts" trong máy chủ của bạn:

33.33.33.10 your-domain.dev 
+6

Khi sử dụng giải pháp này, bạn phải thực hiện các bước 2 và 3 lặp đi lặp lại khi bạn hủy hộp Vagrant. Sử dụng một kịch bản cung cấp (bash), Chef hoặc Puppet sẽ làm cho nhiệm vụ này ít lặp đi lặp lại nhiều. –

+1

Đối với googlers, tôi phải chỉ định cả một 'SSLCertificateFile' thành một tệp' .crt' và 'SSLCertificateKeyFile' thành tệp' .key'. –

0

Câu trả lời ở trên sẽ yêu cầu bạn phải giữ lặp lại bước 2 và 3 mỗi khi bạn phá hủy các hộp. Tôi muốn đề nghị bạn sử dụng Chef để đạt được mục tiêu của mình.Xem ví dụ bên dưới:

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 

    config.vm.box  = "precise64" 
    config.vm.box_url = "http://files.vagrantup.com/precise64.box" 

    config.vm.network :forwarded_port, guest: 80, host: 8080 
    config.vm.network :forwarded_port, guest: 443, host: 443 

    config.vm.network "private_network", ip: "192.168.33.10" 

    config.vm.provision :chef_solo do |chef| 

     chef.cookbooks_path = "/path/to/your/cookbooks" 

     # Install PHP 
     chef.add_recipe "php" 
     chef.add_recipe "php::module_mysql" 

     # Setup Apache 
     chef.add_recipe "apache2" 
     chef.add_recipe "apache2::mod_php5" 

     chef.json = { :apache => { :default_site_enabled => true } } 

    end 

end 
Các vấn đề liên quan