任何帮助都将不胜感激。我被这个问题困扰了很长时间。
现在事情是这样的。我的 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。