我的服务器有多个域,运行 CentOS 6.2 和 Apache。该服务器已安装 SSL 证书并且运行良好。
每次我浏览到主域时,都不会添加http://
它显示该https
部分。
例如:
如果我输入mydomain.com
它会显示https
页面private_html/index.html
而不是public_html/index.html
如果我输入http://mydomain.com
或http://www.mydomain.com
它显示正确的页面public_html/index.html
如果我输入https://mydomain.com
或https://www.mydomain.com
它显示正确的页面private_html/index.html
问题是,如果我省略http
orhttps
部分,它总是显示该https
部分。我想要相反的。我想去https
的时候就去,而不是apache想要的时候去。
可能是什么原因造成的?
这是我的httpd.conf
这个域名
<VirtualHost 100.101.102.103:80 >
ServerName www.mysite.com
ServerAlias www.mysite.com mysite.com
ServerAdmin [email protected]
DocumentRoot /home/admin/domains/mysite.com/public_html
ScriptAlias /cgi-bin/ /home/admin/domains/mysite.com/public_html/cgi-bin/
UseCanonicalName OFF
<IfModule !mod_ruid2.c>
SuexecUserGroup admin admin
</IfModule>
<IfModule mod_ruid2.c>
RMode config
RUidGid admin admin
RGroups apache access
</IfModule>
CustomLog /var/log/httpd/domains/mysite.com.bytes bytes
CustomLog /var/log/httpd/domains/mysite.com.log combined
ErrorLog /var/log/httpd/domains/mysite.com.error.log
<Directory /home/admin/domains/mysite.com/public_html>
Options +Includes -Indexes
php_admin_flag safe_mode OFF
php_admin_flag engine ON
php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f [email protected]'
php_admin_value open_basedir /home/admin/:/tmp:/var/tmp:/usr/local/lib/php/
</Directory>
</VirtualHost>
<VirtualHost 100.101.102.103:443 >
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
ServerName www.mysite.com
ServerAlias www.mysite.com mysite.com
ServerAdmin [email protected]
DocumentRoot /home/admin/domains/mysite.com/private_html
ScriptAlias /cgi-bin/ /home/admin/domains/mysite.com/public_html/cgi-bin/
UseCanonicalName OFF
<IfModule !mod_ruid2.c>
SuexecUserGroup admin admin
</IfModule>
<IfModule mod_ruid2.c>
RMode config
RUidGid admin admin
RGroups apache access
</IfModule>
CustomLog /var/log/httpd/domains/mysite.com.bytes bytes
CustomLog /var/log/httpd/domains/mysite.com.log combined
ErrorLog /var/log/httpd/domains/mysite.com.error.log
<Directory /home/admin/domains/mysite.com/private_html>
Options +Includes -Indexes
php_admin_flag safe_mode OFF
php_admin_flag engine ON
php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f [email protected]'
php_admin_value open_basedir /home/admin/:/tmp:/var/tmp:/usr/local/lib/php/
</Directory>
</VirtualHost>
任何帮助表示赞赏。谢谢。
答案1
这有与阿帕奇无关。您的 http 服务和 https 服务位于不同的端口,并且该端口在 TCP/IP 标头中指定由客户。 Apache 并没有做出任意选择,它只是做它应该做的事情来响应特定端口上发出的特定请求。
换句话说,当您直接在地址栏中键入并省略协议(http、ftp、https...)时,您的网络客户端(浏览器)会选择 https。如果您有该站点的历史记录,浏览器就会从其内部列表中选择一个匹配项。
尽管只有在地址栏中输入内容而不是网站内的链接才会出现这种情况,但将网站布局可能是个好主意没有重复的路径在不同的协议中以避免混淆。您仍然可以使用相同的域名,只需在路径 ( https://my.domain/secure/rest-of-path
) 的开头添加“secure”即可。如果 apache 提供的内容对于 https 和 http 来说应该是相同的,请使用符号链接或 mod_rewrite (我认为这是合适的,我不是一个大 apache 人)来完成此操作,以便最终用户和 Web 客户端看到这些路径不同。
你能设置 apache 将 http 请求重定向到 https 端口,反之亦然,但您会知道是否这样做了。您还可能能够在服务器日志中找到此类重定向的证据,并且您当然可以通过查看wireshark中的事务来找到它。
我强烈建议使用wireshark来调试和了解HTTP事务。 “源”和“目标”端口位于“传输控制协议”下。这些是由发送者而不是接收者设置的。 80 通常被认为是 http,443 是 https。可以对任一端口使用非标准端口,但在这种情况下,必须明确告知普通网络客户端要使用哪个端口(通过添加:NNN
地址,例如https://my.domain:4040/path
),并且显然必须将服务器配置为为这些端口提供服务也明确地。
答案2
考虑到当今的硬件,HTTPS 的额外成本微乎其微;有些网站甚至建议使用配置仅有的HTTPS版本,其他人会自动重定向到它。为什么坚持使用不安全的HTTP协议?