我的 ubuntu 10.04 / nginx 1.2.3 服务器出现了这种非常奇怪的行为。基本上,我今天早上更改了 SSL 证书。从那时起,它在所有应用程序上的行为都很奇怪。Godaddy 报告 HTTPS/SSL 设置正确。
当我尝试使用 HTTPS 时,页面仍能正常工作。但是当我尝试使用 HTTP 时,nginx 报告错误:
400 Bad Request
The plain HTTP request was sent to HTTPS port
在谷歌上搜索了几个小时后,我尝试了不同的设置(虽然我的设置最初长期运行正常,但我刚刚更新了证书)
通过将其添加到我的配置中,我找到了一半的解决方案:
错误页面 497 $request_uri;
真正奇怪的是,当我使用此设置时:
server {
listen 80;
server_name john.johnrocks.eu;
access_log /home/john/envs/john_prod/nginx_access.log;
error_log /home/john/envs/john_prod/nginx_error.log;
location / {
uwsgi_pass unix:///home/john/envs/john_prod/john.sock;
include uwsgi_params;
}
location /media {
alias /home/john/envs/john_prod/johntab/www;
}
location /adminmedia {
alias /home/john/envs/john_prod/johntab/www/adminmedia;
}
}
当我使用 HTTP 时仍然遇到同样的错误(虽然这里没有为 HTTPS 设置任何内容)??
我快要疯了!
**更新
即使有这样的配置:
server {
listen 80;
server_name john.johnrocks.eu;
access_log /home/john/envs/john_prod/nginx.access.log;
location / {
root /home/john/envs/john_prod/johntab/www;
index index.html index.htm;
}
}
我尝试加载的所有内容都出现错误 400(纯 HTTP 请求已发送到 HTTPS 端口)。
答案1
我不知道 400 错误是怎么回事,但如果你之前的配置中有 301(永久)重定向,浏览器可能仍会将此重定向存储在缓存中,而不会检查原始重定向。也许清除缓存可能会有所帮助。
答案2
所以我找到了问题所在。问题出在 nginx 如何加载 vhosts 配置。如果你查看 nginx.conf,你会发现这一行
include /etc/nginx/sites-enabled/*;
因此,这会将所有“vhost”以随机顺序加载到主 nginx.conf 中。因此,错误发生在其他地方,在另一个 vhost 中……并且它基本上导致所有 vhost 失败(nginx 没有检测到任何错误,它本身不是错误,而是配置错误)。
所以我删除了所有启用站点的虚拟主机,然后逐个放回去,每次都重新加载 nginx 并测试站点,直到我把它们全部弄好,然后就好了