为什么这个 HTTP 到 HTTPS 重定向不起作用?

为什么这个 HTTP 到 HTTPS 重定向不起作用?

我已经阅读了关于该主题的所有讨论,并决定使用 httpd.conf 文件中的重定向方法,但没有成功......所以我回到了这群知识渊博的人身边。

我们有一项服务,我们称之为“host1”(基于 https),它在 Centos 6.x 上运行,我们决定在那里添加我们的网站,以利用购买的通配符 SSL 证书,该证书在 https 连接时可以很好地用于两个 SSL 访问。

遗憾的是,当用户输入 ourdomain.com、www.ourdomain.com 或使用 http 访问 ourdomain.com 或 www.ourdomain.com 时,我们的网站无法访问且会超时。对于 ourdomain.com、www.ourdomain.com 和 host1.ourdomain.com,使用 https 一切正常。

下面您将发现 httpd.conf 和 ssl.conf 都被截断到虚拟主机区域并隐藏了我们的具体细节。

使用此配置,我从 httpd 收到以下错误:

这种情况不会再发生了,谢谢你的提示 Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80

------------ Start httpd.conf ------------------
# >>httpd configuration truncated down to Virtual Hosts

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

 <VirtualHost *:80>
   ServerName www.ourdomain.com
   Redirect permanent / https://www.ourdomain.com/
 </VirtualHost>

------------ End httpd.conf ------------------

------------ Start ssl.conf to manage 443 and ssl certificates------------------

# >>SSL Configuration Truncated up to Listen 443 and Virtual Hosts

Listen 443

    #Listen for virtual host requests on all IP addresses
NameVirtualHost *:443

# >>SSL Config ...

##
## SSL Virtual Host Context
##

<VirtualHost *:443>

DocumentRoot /var/www/html/dir1
ServerName host1.ourdomain.com
ServerAlias host1.ourdomain.com

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on

# >>SSL Certificates Config ... Truncated
</VirtualHost>


<VirtualHost *:443>

DocumentRoot /var/www/html/dir2
ServerName ourdomain.com
ServerAlias ourdomain.com www.ourdomain.com

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on

# >>SSL Certificates Config ... Truncated

</VirtualHost>

------------ End ssl.conf ------------------

问题出在哪里?我不想使用 .htaccess,因为我想避免 AllowOverride All 影响我们的 host1 服务。

谢谢。

奥利

----- 为 ngn 的 netstat 第二个请求添加了部分

# netstat -ant | grep 80
tcp        0      0 :::80                       :::*                        LISTEN

----- 添加了 Hbruijn 的 lsof 请求部分 - 有什么想法吗?

# lsof -iTCP:80
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
httpd   24331   root    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24334 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24335 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24336 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24337 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24338 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24339 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24340 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   24341 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   25323 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   25325 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)
httpd   25326 apache    5u  IPv6 5381394      0t0  TCP *:http (LISTEN)

本期新增内容

以下是 httpd -S 结果,从 httpd 的角度来看一切正常。但连接到“http://ourdomain.com”或“http://www.ourdomain.com”在所有浏览器中都停滞... 使用 https 重写根本不起作用。

wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
     default server ourdomain.com (/etc/httpd/conf/httpd.conf:1032)
     port 80 namevhost ourdomain.com (/etc/httpd/conf/httpd.conf:1032)
             alias ourdomain.com
             wild alias *.ourdomain.com
*:443                  is a NameVirtualHost
     default server host1.ourdomain.com (/etc/httpd/conf.d/ssl.conf:40)
     port 443 namevhost host1.ourdomain.com (/etc/httpd/conf.d/ssl.conf:40)
             alias host1.ourdomain.com
     port 443 namevhost ourdomain.com (/etc/httpd/conf.d/ssl.conf:95)
             alias ourdomain.com
             alias www.ourdomain.com
Syntax OK

端口 80 的 httpd.conf

<VirtualHost *:80>
    ServerName ourdomain.com
    ServerAlias ourdomain.com *.ourdomain.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</VirtualHost>

答案1

对于第一个问题,请尝试设置ServerAlias变量以在所有虚拟主机部分包含以下内容。

ServerAlias ourdomain.com *.ourdomain.com

参考:http://httpd.apache.org/docs/2.4/mod/core.html#serveralias

根据启动错误,似乎之前的运行没有正确关闭,即您的 netstat 和 lsof 输出显示它仍在运行并监听端口 80。在您尝试重新启动之前,请确保 httpd 尚未运行,即当您运行时,您不应该看到 httpd 的任何输出lsof -iTCP:80

相关内容