我已经阅读了关于该主题的所有讨论,并决定使用 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