我承认我对这些 Apache 服务器设置相当生疏。我需要设置 1 个 html、1 个 django 和 1 个 php 服务器。我单独测试了所有 3 个服务器,它们单独运行良好,但当我尝试运行所有 3 个服务器时,我就是找不到正确的方法。我需要一个专门重定向到 https 的子域。最初,我将所有 http 请求永久重定向到端口 443,因为这就是我所需要的。
默认配置文件
<VirtualHost *:80>
ServerName owncloud.website.net
Redirect permanent / 'https://owncloud.website.net:50443'
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
回顾这一点很有帮助,但同时,它并没有真正回答任何问题。你只是假设 Apache 服务器根据用户浏览器中输入的域名 (ServerName) 来确定要提供哪些文件。 https://httpd.apache.org/docs/2.4/vhosts/examples.html
我开始在conf文件中尝试添加额外的虚拟主机,如下所示:
默认配置文件
<VirtualHost *:80>
ServerName website.net
DocumentRoot /cloud/web/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
levenas.conf
<VirtualHost *:80>
ServerName django.website.net
DocumentRoot /cloud/web/levenasprojdir/levenasproj
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /cloud/web/levenasprojdir/static
<Directory /cloud/web/levenasprojdir/static>
Require all granted
</Directory>
Alias /static /cloud/web/levenasprojdir/media
<Directory /cloud/web/levenasprojdir/media>
Require all granted
</Directory>
<Directory /cloud/web/levenasprojdir/levenasproj>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess django_project python-path=/cloud/web/levenasprojdir python-home=/cloud/web/levenasprojdir/env
WSGIProcessGroup django_project
WSGIScriptAlias / /cloud/web/levenasprojdir/levenasproj/wsgi.py
</VirtualHost>
owncloud.conf
<VirtualHost *:80 *:443>
ServerName owncloud.website.net
Redirect permanent / 'https://owncloud.website.net:50443'
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Alias / "/cloud/web/owncloud/"
<Directory /cloud/web/owncloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /cloud/web/owncloud
SetEnv HTTP_HOME /cloud/web/owncloud
</Directory>
这里的想法是子域名将专属于他们的项目,其他所有内容都将获得默认登录页面。但我失败了。无论我做什么,重定向都会优先处理,并无意中将用户推送到 SSL 页面。我假设这ServerName/
就是要重定向的内容,但它似乎只是重定向任何东西。所以我的问题是如何正确设置我的 confs 以使其执行上述操作:django 子域名服务于一个项目,owncloud 安全子域名服务于另一个项目,owncloud 不安全子域名重定向到安全,否则选择默认站点?
为了透明起见,这是一个家庭服务器,这就是为什么您会在重定向 URL 中看到像 50080 这样的端口。50080 是为了绕过我的 ISP 并转发到服务器上的端口 80。
答案1
您对问题的真正原因并不清楚(启动时出现错误,而不是重定向??)
owncloud 配置上的 <VirtualHost *:80 *:443> 不会同时与 SSL 和非 SSL 一起浮动。
目前,80 和 443 均提供纯 HTTP 服务。
您需要为纯 HTTP 和 HTTPS 设置不同的 VirtualHosts,并为后者设置可怕的 apache SSL 配置(证书和其他内容,甚至对于简单的重定向)。