刚刚在我的 debian wheezy、nginx 1.6 服务器上安装了 StartSSL 证书。
一切似乎都运行良好,我可以在 https 中浏览网站,没有任何问题,直到我尝试登录...
IE 运行正常,我可以登录 OK。Chrome
给我这个错误:错误代码:ERR_SPDY_PROTOCOL_ERROR
Firefox 只是挂起,什么也不做。
当我放弃 StartSSL 证书并使用自签名证书时,一切又恢复正常,我可以毫无问题地登录。
我的 nginx 配置:
server {
listen 443 ssl spdy;
server_name test.com;
root /home/www/test.com/;
ssl on;
ssl_certificate /etc/nginx/certs/test.com.crt;
ssl_certificate_key /etc/nginx/certs/test.com.key;
access_log /logs/access.log;
error_log /logs/error.log;
error_page 404 /404.html;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
..........
.........
}
有什么建议可能存在什么问题吗?
答案1
我遇到此问题是因为我已经更改了 nginx 用户,但它无权访问 /var/lib/nginx。我通过为新用户更改 /var/lib/nginx 来解决这个问题。
答案2
如果这对将来的任何人都有帮助,因为这是顶级搜索结果之一,我遇到了这个错误,但出于某种原因,我还没有看到提到。
虽然看起来是 Nginx 出了问题,但在同一台服务器上,我使用类似配置的其他网站运行良好。结果发现,这实际上是 PHP 标头重定向中的一个错误,我们的一名程序员忘记在地址前加上“Location:”,这似乎破坏了标头并导致 Chrome 中出现此错误。所有其他浏览器都忽略了它。
因为它是 index.php 中的第一行,所以它在看到网站的任何内容之前就已经中断了,看起来好像它影响了整个网站,但实际上只是那个页面。
答案3
添加适当的 Content-Type 标头即可修复此问题。
["内容类型"] = "text/html; 字符集=utf-8"