我正在尝试设置apache2,以便我可以在ubuntu上的rails 3应用程序中尝试开发ssl。
rails应用程序可以正常工作,除了我在Fire Fox中的https:
The connection was interrupted
The connection to localhost:3000 was interrupted while the page was loading.
在控制台中我得到:
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: {}
---
使用https时,无论Apache是否正在运行,我都会收到上述控制台错误。这让我觉得https localhost:3000请求永远不会通过Apache,而是直接进入无法处理ssl的mongrel。
Apache正在运行,因为如果我转到http://localhost
,我会获得默认的“It Works”网页。我很确定我创建的自签名证书也很好,因为转到https://localhost
会在firefox中显示页面,询问您是否信任该站点,还可以让我看到证书的详细信息。
我已经完成了一堆谷歌搜索,我已经阅读并尝试了一些指南,但其中许多是几年,可能已经过时。
我最终卸载了apache2,然后重新安装了这个ubuntu指南https://help.ubuntu.com/10.04/serverguide/C/httpd.html它有一个关于https配置的部分,我做了它创建了这个文件 - &gt;在/ etc / apache2的/网站/有默认的SSL。看起来像这样
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
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>
我修改的所有内容都是证书和密钥位置
<VirtualHost *:443>
代替
<VirtualHost _default_:443>
并在最后添加了RequestHeader设置X_FORWARDED_PROTO“https”行,就像所有指南所说的那样。我不确定还有什么需要改变的。有一次我尝试将DocumentRoot设置为我的rails应用程序的公共文件夹,但它没有什么区别。
Apache重新启动正常,日志中没有错误。
我确信我必须非常接近让它工作但我已经花了很多时间多天而且无法理解它。我最好的猜测是我在上面的apache配置文件中有错误或遗漏。
我的问题是:
答案 0 :(得分:0)
我塞满了很多年,仍然无法让它与apache一起工作,所以最终关注了这部分ubuntu rails guide并安装了Passenger。乘客很好,安装快捷,最好的https现在正在开发中。
我想我应该将defaultHost * .80设置为默认值并将virtualHost * .443设置为default-ssl,但无论如何这是我的sites-available / default-ssl文件现在的样子(store = rails app name):
<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>
我的httpd.conf文件在开发模式下使用开发数据库设置了乘客和运行轨道的设置:
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
我仍然不能100%确定所有端口的工作方式,但我猜测使用http://localhost:3000
3000位使它直接进入mongrel而不是通过apache,因此为什么ssl以前从未工作过。通过上面的apache和乘客设置,我现在转到http://localhost
或https://localhost
,它会通过apache运行。现在可以使用。