我们有两个网站,sub.example1.com 和 example2.com。这两个网站都没有专门配置为处理 SSL 请求。一个网站 https:/sub.example1.com 通过将对端口 443 的安全请求视为 http 请求,成功处理了对另一个网站的安全请求,https://example2.com,超时并在 apache 日志中记录“\x16\x03\x01”错误。
以下是 /etc/httpd/sites-enabled/ 中 example1 的配置
ServerAdmin webmaster@localhost ServerName sub.example1.com
DocumentRoot /opt/example1/web/
DirectoryIndex index.php index.html
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /opt/example/web/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>
ErrorLog /var/log/httpd/errorExample1.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/httpd/accessExample1.log combined
ServerSignature On
~
例如 1 没有 .htaccess 文件。
以下是 /etc/httpd/sites-enabled/ 中示例 2 的配置
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.example2.com
DocumentRoot /opt/example2/web
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /opt/example2/web/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>
ErrorLog /var/log/httpd/errorExample2.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/httpd/accessExample2.log combined
ServerSignature On
以下是示例 2 的 .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
httpd配置文件
UseCanonicalName Off
NameVirtualHost *:80
# NameVirtualHost *:443
# Include generic snippets of statements
Include conf.d/*.conf
# Include the virtual host configurations:
Include /etc/httpd/sites-enabled/
conf.d/*.conf 条目:
TraceEnable On
服务器名称.conf
ServerName ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
欢迎文件
<LocationMatch "^/+$">
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>
我不明白为什么一个将 https 请求转换为 http,而另一个却没有。任何帮助表示感谢。
答案1
两者都没有专门配置来处理 ssl 请求。
在这种情况下,两个服务器都不应该监听端口 443,也就是说,浏览器甚至不应该能够连接到此端口。由于您收到响应或错误消息,因此浏览器显然能够连接到此端口,因此显然设置了某些设置来处理此端口。但第二台服务器上可能设置不正确。
一个站点 https:/sub.example1.com,通过将对端口 443 的安全请求视为 http 请求,成功处理了该请求。
不太可能,因为客户端发送的是 HTTPS 请求。如果没有 SSL(即纯 HTTP),客户端的 SSL 握手将失败,无法执行内部 HTTP 请求。虽然您没有提供完整的设置详细信息,但可能仍是此服务器上全局启用了 SSL,或者前面有一些反向代理在执行 SSL 终止并将请求转发为简单 HTTP。
在 apache 日志中记录“\x16\x03\x01”错误。
“\x16\x03\x01” 是 SSL/TLS 握手的第一个字节。这意味着客户端正在尝试使用 HTTPS 与服务器通信,如果您使用 URL,这是可以预料到的https://
。显然,服务器也在监听客户端发送请求的端口,否则 TCP 连接就已经失败了。对于正常https://host/
请求,端口将是 443,这意味着您的服务器必须明确设置为在端口 443 上处理纯 HTTP(这不会自行发生,也不会在默认设置中发生)。或者您实际上已经尝试了 URLhttps://port:80/
并强制浏览器使用 HTTPS 连接到为纯 HTTP 保留的端口。
我猜测问题出在您未在此处显示的服务器设置部分。
答案2
您可以将 .htaccess 文件添加到示例 1
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
示例 2 看起来像 wordpress,有用于 http 重定向的 wordpress 插件 - 也许它正在使用它