2011-08-12 25 views
13

He creado un servidor web vagabundo/virtualbox como un sandbox de desarrollo, y configuré apache en la máquina virtual para ssl (en el puerto predeterminado 443, con un autofirmado certificado). He páginas en la misma máquina virtual sometieron a pruebas de rizoAccediendo a apache en un sandbox vago utilizando ssl (reenvío de puertos)

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

y parece que funciona bastante fácilmente, así que estoy satisfecho de que Apache está configurado y que funciona en la máquina virtual correctamente.

Sin embargo, cuando intento acceder a la máquina virtual desde los navegadores de mi host a través de https, no puedo hacerlo.

He añadido

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

a mi vagrantfile, pero tratando de acceder a la url

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

simplemente no puede mostrar la página que he intentado con varios navegadores diferentes: IE da un sin sentido "Internet Explorer no puede mostrar la página web"; Chrome da

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 me da

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) 

pero incluso la pestaña Firebug neto no me dice nada más que eso.

No obtengo nada en los registros de acceso o error en el apache de VM, así que sospecho que vagabundo no reenvía el ssl.

  • VM sistema operativo del usuario: centos56x64
  • Anfitrión: Windows 7 de 64 bits
  • JRuby: 1.6.3 (rubí-1.8.7-p330) (2011-07-07 965162f) (Java HotSpot (TM) de 64 bits del servidor VM 1.6.0_24) [Windows 7 amd64 java]
  • Vagrant: 0.7.8
  • VirtualBox: 4.0.12

Cualquier ayuda sería aceptada con agradecimiento.

Respuesta

24

1) Configurar el archivo 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) acceder a su "lucid32" VM

vagrant ssh 

3) Dentro de su máquina virtual, configurar el Apache "hosts virtuales" :

<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) Salir máquina virtual y configurar el archivo "hosts" en su máquina host:

33.33.33.10 your-domain.dev 
+6

Al usar esta solución, debe hacer los pasos 2 y 3 una y otra vez cuando destruya la caja Vagrant. Usando un script de aprovisionamiento (bash), Chef o Puppet harán que esta tarea sea mucho menos repetitiva. –

+1

Para googlers, tuve que especificar tanto un 'SSLCertificateFile' a un archivo' .crt' y un 'SSLCertificateKeyFile' a un archivo' .key'. –

0

La respuesta anterior requeriría que seguir repitiendo los pasos 2 y 3 cada vez que se destruye la caja. Te sugiero que uses Chef para lograr tu objetivo.Vea el ejemplo a continuación:

# -*- 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 
Cuestiones relacionadas