为什么 IP 地址的重写规则显示“不安全”,而域名在 Apache2 中运行良好?

为什么 IP 地址的重写规则显示“不安全”,而域名在 Apache2 中运行良好?

我创建了 SSL 证书,myDomain.com 因此我/etc/apache2/sites-enabledUbuntu

example.com-le-ssl.conf  example.com.conf  example.conf

我的example.com.conf样子

<VirtualHost *:80>
    ServerAdmin admin@example
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
    JKMount /* ajp13_worker
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

现在,如果我输入,http://www.example.com它会被重定向到https://www.example.com

但如果有人找到我的服务器 IP 地址并输入http://<myIpAddress>内容,则将被视为非 https

所以我添加了这个除了上述 virtualHost 块之外

<VirtualHost myIpAddr:80>
    ServerAdmin admin@example
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
    JKMount /* ajp13_worker
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =myIpAddr [OR]
RewriteCond %{SERVER_NAME} =myIpAddr:80
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

但当我进入http://myIpAddr:80http://myIpAddr看到这个 在此处输入图片描述

答案1

这是因为您的 SSL 证书包含您的主机名(example.com 和 www.example.com),但不包含您的 IP 地址。也不应该包含 - 普通客户端只会使用您的实际域名,而不是服务器的 IP 地址。

根据您显示的配置,您的重定向应该转到主机名而不是 IP 地址,仅根据您的配置无法找出出错的原因。但我不太明白您为什么认为需要为您的 IP 地址设置单独的虚拟主机,或者为什么需要在 Host 标头上进行 RewriteCond 匹配。

我应该从你的文件中删除 RewriteCond 行并只保留 RewriteRule 行。

还要检查您获得的第三个文件 - 通常不应该同时存在example.com.confexample.conf。该文件中可能有一些内容在使用 IP 地址进行配置之前被读取。

相关内容