访问我在 apache 上托管的网站会改变端口号。

访问我在 apache 上托管的网站会改变端口号。

任何帮助都将不胜感激。我被这个问题困扰了很长时间。

现在事情是这样的。我的 ubuntu 16.04 服务器上有两个 vhost,一个用于 Nextcloud(https://mydomain.com/owncloud/) 完美运行,还有一个适用于我的 wordpress (https://mydomain.com/)不起作用。每次我输入https://mydomain.com它返回https://mydomain.com:16501我的网络浏览器 safari 显示无法连接到服务器 mydomain.com。

我的 wordpress 以前可以工作,但我不知道这个 16501 从哪里来的。

我在启用站点的系统中基本上有三个虚拟主机......

000.默认.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on
RewriteCond %{SERVER_NAME} =mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

nextcloud.conf

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>

     ServerAdmin [email protected]
     ServerName mydomain.com
     DocumentRoot /var/www/html

Alias /nextcloud "/var/www/owncloud/"

<Directory /var/www/owncloud/>
  Options +FollowSymlinks
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/owncloud
 SetEnv HTTP_HOME /var/www/owncloud

</Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

     <IfModule mod_headers.c>
          Header always set Strict-Transport-Security "max-age=15768000; preload"
     </IfModule>

SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf


   </VirtualHost>
</IfModule>

wordpress配置文件

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>

     ServerAdmin [email protected]
     ServerName mydomain.com
     ServerAlias www.mydomain.com
     DocumentRoot /var/www/html

<Directory /var/www/html/>
  AllowOverride All

</Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf


   </VirtualHost>
</IfModule>

感谢您的帮助!

答案1

您有两个具有相同ServerName指令的 VirtualHost,因此 Apache 无法对此进行威胁,并且仅使用第一个。第一个是在文件中定义的nextcloud.conf,因为字母 'n' 在字母表中位于 'w' 之前。

nextcloud.conf解决这个问题的一种方法是合并和的内容wordpress.conf并创建一个VirtualHost——您可以将新的配置文件命名为mydomain.com.conf,例如:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>

        ServerAdmin [email protected]
        ServerName mydomain.com      # Note along with mydomain.com your cert. file must
        ServerAlias www.mydomain.com # contain www.mydomain.com to use ServerAlias here

        DocumentRoot /var/www/html    
        <Directory /var/www/html/>
            AllowOverride All
        </Directory>

        Alias /nextcloud "/var/www/owncloud/"
        <Directory /var/www/owncloud/>

            Options +FollowSymlinks
            AllowOverride All

            <IfModule mod_dav.c>
                 Dav off
            </IfModule>

            SetEnv HOME /var/www/owncloud
            SetEnv HTTP_HOME /var/www/owncloud

            <IfModule mod_headers.c>
                Header always set Strict-Transport-Security "max-age=15768000; preload"
            </IfModule>

        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined 

        SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf

    </VirtualHost>
</IfModule>

在这种情况下,您应该能够访问 WordPress 安装https://mydomain.com和 ownCloud 安装https://mydomain.com/nextcloud。不要忘记a2dissite旧的 conf 文件、a2ensite新的 conf 文件并重新启动 Apache。

另一种方法是为虚拟主机使用不同的域名 (FQDN)。例如,mydomain.com为 WordPress 和www.mydomain.com(或cloud.mydomain.com)为 ownCloud。在这种情况下,您不需要使用指令,Alias /nextcloud "/var/www/owncloud/"而是可以使用DocumentRoot /var/www/owncloud/,这样您就可以直接在https://www.mydomain.com(分别在https://clould.mydomain.com)访问您的 ownCloud。

此外:在 Apache 文档中,你还可以被告知当您可以使用更简单的指令时,不要使用重写引擎。在 HTTP 主机定义中,您可以Redirect按原样使用该指令显示在这里。此方法的唯一限制是您必须为每个 FQDN 创建 HTTP VirtualHost。

相关内容