2010-10-14 6 views
0

J'essaye de configurer apache2 pour que je puisse essayer ssl en développement sur mon rail 3 app sur ubuntu.J'ai du mal à configurer Apache pour SSL avec mongrel et rails 3 en développement sur ubuntu

Les travaux d'application des rails, sauf pour https où dans FireFox i obtenir:

The connection was interrupted 
The connection to localhost:3000 was interrupted while the page was loading. 

Dans la console que je reçois:

Thu Oct 14 15:56:28 +1100 2010: HTTP parse error, malformed request (127.0.0.1): 
#<Mongrel::HttpParserError: Invalid HTTP format, parsing fails.> 
Thu Oct 14 15:56:28 +1100 2010: REQUEST DATA: "\200U\001\003\000\000<\000\000\000\020\000\000\210\000\000\207\000\0008\000\000\204\000\0005\000\0009\000\000E\000\000D\000\0003\000\0002\000\000\226\000\000A\000\000\004\000\000\005\000\000/\000\000\026\000\000\023\000\376\377\000\000\n\000\000\377[������-V\214�e\277P-" 
--- 
PARAMS: {} 
--- 

Je reçois l'erreur de la console ci-dessus si Apache est en cours d'exécution ou pas lors de l'utilisation de https. Ce qui me fait penser à https localhost: 3000 requêtes ne passent jamais par Apache et vont directement à mongrel qui ne peut pas gérer ssl. Apache fonctionne parce que si je vais à http://localhost, je reçois la page Web par défaut "It Works". Je suis assez sûr que les certificats auto-signés que j'ai créés sont également très bien car aller à https://localhost fait apparaître la page dans firefox demandant si vous faites confiance au site et me permet également de voir les détails du certificat. J'ai fait un tas de googling et j'ai lu et essayé un tas de guides, mais beaucoup d'entre eux ont quelques années et peut-être périmé.

J'ai fini par désinstaller apache2 et ensuite réinstaller en suivant ce guide ubuntu https://help.ubuntu.com/10.04/serverguide/C/httpd.html Il a une section sur la configuration https que j'ai faite et il crée ce fichier ->/etc/apache2/site-available/default-ssl. On dirait que cette

<IfModule mod_ssl.c> 
<VirtualHost *:443> 
ServerAdmin [email protected] 

DocumentRoot /var/www 
<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
</Directory> 
<Directory /var/www/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
</Directory> 

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
<Directory "/usr/lib/cgi-bin"> 
    AllowOverride None 
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
    Order allow,deny 
    Allow from all 
</Directory> 

ErrorLog /var/log/apache2/error.log 

LogLevel warn 

CustomLog /var/log/apache2/ssl_access.log combined 

Alias /doc/ "/usr/share/doc/" 
<Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
</Directory> 

SSLEngine on 

SSLCertificateFile /etc/ssl/certs/server.crt 
SSLCertificateKeyFile /etc/ssl/private/server.key 

<FilesMatch "\.(cgi|shtml|phtml|php)$"> 
    SSLOptions +StdEnvVars 
</FilesMatch> 
<Directory /usr/lib/cgi-bin> 
    SSLOptions +StdEnvVars 
</Directory> 

BrowserMatch "MSIE [2-6]" \ 
    nokeepalive ssl-unclean-shutdown \ 
    downgrade-1.0 force-response-1.0 
# MSIE 7 and newer should be able to use keepalive 
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown 

# Used by Rails. Mentioned in all the Rails SSL tutorials. 
RequestHeader set X_FORWARDED_PROTO "https" 

</VirtualHost> 
</IfModule> 

Tout ce que je modifié là est le certificat et les lieux clés, fait il <VirtualHost *:443> au lieu de <VirtualHost _default_:443> et a ajouté le RequestHeader mis X_FORWARDED_PROTO ligne « https » à la fin que tous les guides dit de faire. Je ne suis pas sûr de ce qu'il y a d'autre à changer. À un moment donné, j'ai essayé de placer DocumentRoot dans le dossier public de mon application rails, mais cela n'a pas fait de différence.

Apache redémarre correctement et il n'y a pas d'erreur dans le journal.

Je suis sûr que je dois être vraiment proche de l'avoir fonctionné mais j'ai passé beaucoup d'heures pendant plusieurs jours et je ne peux pas le comprendre. Ma meilleure supposition est que j'ai quelque chose de faux ou de manquant dans le fichier de configuration apache ci-dessus.

Mes questions sont les suivantes:

  1. Comment puis-je savoir si les demandes vont effectivement par apache?
  2. Si ce n'est pas la raison pour laquelle la requête https ssl passe par mongrel et n'est pas gérée par apache?
  3. Que dois-je faire pour que cela fonctionne?

Répondre

0

J'ai bourré pendant des siècles et ne pouvais toujours pas le faire travailler avec juste apache ainsi fini par suivre certaines parties de ce ubuntu rails guide et en installant le passager. Passenger était gentil et rapide à installer et le meilleur de tous les travaux https maintenant en développement. Je suppose que je devrais mettre virtualHost * .80 par défaut et virtualHost *.443 default-ssl mais de toute façon c'est ce que mes sites disponibles/fichier default-ssl ressemble maintenant (magasin = rails Nom de l'application):

<VirtualHost *:80> 
    ServerName localhost 
    DocumentRoot /home/daniel/www/store/public  
    <Directory /home/daniel/www/store/public> 
    AllowOverride all    
    Options -MultiViews    
    </Directory> 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName localhost 
    SSLEngine on 
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL 
    SSLCertificateFile /etc/ssl/certs/server.crt 
    SSLCertificateKeyFile /etc/ssl/private/server.key 
    RequestHeader set X_FORWARDED_PROTO 'https' 
    DocumentRoot /home/daniel/www/store/public  
    <Directory /home/daniel/www/store/public> 
    AllowOverride all    
    Options -MultiViews    
    </Directory> 
</VirtualHost> 

mon fichier httpd.conf ressemble à ceci avec des paramètres pour les passagers et rails de roulement en mode de développement en utilisant la base de données de développement:

ServerName localhost 
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.0/ext/apache2/mod_passenger.so 
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.0 
PassengerRuby /usr/bin/ruby1.8 
RailsEnv development 
RackEnv development 

Je ne suis toujours pas sûr à 100% sur la façon dont tous les ports fonctionnent, mais je devine en utilisant http://localhost:3000 3000 bits fait aller directement à bâtards et non par apache et donc pourquoi le SSL n'a jamais travaillé auparavant. Avec Apache et la configuration des passagers comme ci-dessus, je vais maintenant à http://localhost ou https://localhost et il passe par Apache et fonctionne maintenant.

Questions connexes