使用 apache 为多个网站提供服务,包括 https 重定向

使用 apache 为多个网站提供服务,包括 https 重定向

我承认我对这些 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 配置(证书和其他内容,甚至对于简单的重定向)。

相关内容