我正在开发一些PHP脚本,如果我通过http访问它可以正常工作。但是当我尝试通过https前缀服务器访问它时返回404错误。我在这里做错了什么?
答案 0 :(得分:1)
根据网络服务器,error_log
(nginx / apache / apache2)指令及其记录错误的位置,将帮助您了解问题发生的位置。 404表示该文件不存在或未正确设置权限以供Web服务器使用。由于它只发生在HTTPS上,很可能是建议 hakre ,您的HTTPS服务器可能没有使用与HTTP相同的文档根目录。
发布有关网络服务器类型的信息,错误日志中显示的内容(如果有的话)将有助于stackoverflow.com上的每个人更好地了解您的问题,并提出适当的答案。
基于名称的虚拟主机无法通过HTTPS正常运行。您可以使用HTTPS为1个IP地址设置1个虚拟主机:http://wiki.apache.org/httpd/NameBasedSSLVHosts
通常,在同一IP地址和端口上托管多个SSL虚拟主机是不可能的。这是因为Apache需要知道主机的名称才能选择正确的证书来设置加密层。但是,所请求主机的名称仅包含在HTTP请求标头中,该标头是加密内容的一部分。因此,在加密已经协商之后才可用。这意味着无法选择正确的证书,客户端将收到证书不匹配警告,并且容易受到中间人攻击。
实际上,Apache将允许您配置基于名称的SSL虚拟主机,但它将始终使用首先列出的虚拟主机(在所选IP地址和端口上)的配置来设置加密层。在某些特定情况下,可以为多个虚拟主机使用单个SSL配置。特别是,如果SSL证书适用于所有虚拟主机,则此功能将起作用。
答案 1 :(得分:1)
请检查并仔细检查您的服务器配置 - 尤其是DocumentRoots。
可以使用SNI(服务器名称指示 - 相对较新的TLS扩展名)在NameBasedVirtualHosting上使用SSL。
大多数主要服务器和几乎所有客户都支持SNI。
Apache2从版本2.2.12开始支持它,带有backport补丁的Apache,nginx,lighthttpd和cherokee都支持它。
有关更多信息,请参阅:http://de.wikipedia.org/wiki/Server_Name_Indication