我有一个具有特定路径的站点,我试图将其用作另一个软件的下载存储库。因为这个网站是分发给第三方使用的,我不能依赖这个网站的证书是合法的(第三方可以安装自己的证书)我需要通过http访问这个存储库,而不是https或我的安装软件会阻止和不安装文件,因为它不信任该网站。我目前使用Apaches RewriteEngine强制所有http请求到https。我用以下内容更新了它的配置:
<VirtualHost _default_:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule !.*/path/to/repo/.* https://%{HTTP_HOST}%{REQUEST_URI}
<VirtualHost>
</VirtualHost _default_:*>
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule .*/path/to/repo/.* http://%{HTTP_HOST}%{REQUEST_URI}
# More configuration down here.
</VirtualHost>
但是当我尝试访问http://www.example.net/path/to/repo/时,它只会立即给我一个未找到的错误
我进一步深入研究并完全删除了从http到https的重写,发现如果我试图使用标准的http,我根本无法访问我网站的任何页面
这是一个Django网站,所以我查看了我的设置文件,看看是否有什么东西会阻止它接受http并且没有发现任何明显的东西。是否有其他设置我应该检查(可能在apache的配置中)以查看标准http是否已被禁用?
答案 0 :(得分:0)
我在上面的评论中怀疑问题。因为只为端口80定义了一个显式的VirtualHost,所以通过重定向过滤器(之前已过滤所有内容)的任何东西都被置若罔闻,因为没有设置主机来监听这些请求。
为了解决这个问题,我必须定义一个接受这些连接的过程。
以下是代码的更完整版本,包括我为修复它所做的工作:
<VirtualHost _default_:80>
# redirecting all but repo requests to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule !.*/path/to/repo/.* https://%{HTTP_HOST}%{REQUEST_URI}
CustomLog /var/log/apache2/repo-host.access.log combined
WSGIDaemonProcess repo-host user=admin group=repo-host processes=2 threads=2 maximum-requests=1500 inactivity-timeout=60 deadlock-timeout=45
WSGIProcessGroup repo-host
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /path/to/appliance.wsgi
WSGIPassAuthorization on
SSLEngine off
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:*>
# redirecting https requests to the repo back to http
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule .*/path/to/repo/.* http://%{HTTP_HOST}%{REQUEST_URI}
CustomLog /var/log/apache2/ssl-host.access.log combined
WSGIDaemonProcess ssl-host user=admin group=ssl-host processes=5 threads=5 maximum-requests=1500 inactivity-timeout=60 deadlock-timeout=45
WSGIProcessGroup ssl-host
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /path/to/appliance.wsgi
WSGIPassAuthorization on
SSLEngine on
SSLCertificateFile /path/to/ssl-cert.pem
SSLCertificateKeyFile /path/to/ssl-cert.key
</VirtualHost>
如果有更好的方法可以解决此问题,请在下方发表评论或提交您自己的答案以告知我们。感谢