我在 Ubuntu 和 Windows 上使用相同版本(1.5.0)的 nginx。这两个 nginx 服务器在 glassfish2.x 前面作为反向代理。glassfish2.x 启用了 https 侦听器,我的 nginx 服务器也有 ssl 证书文件。我在 Ubuntu 上的 nginx 工作正常,但在 Windows 上的 nginx 却不行。当通过 nginx 通过 https 登录应用程序时,GlassFish 上的应用程序显示用户名和密码错误。Ubuntu 和 Windows 上的两个 nginx 的配置相同。
server {
listen 443 ssl;
server_name 127.0.0.1;
ssl_certificate server.crt;
ssl_certificate_key server.key;
location / {
proxy_pass https://10.112.18.110;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我发现 TLS 版本与 Chrome 不同,Ubuntu 上的 nginx 使用 tlsv1.1 和 ACE_256_CBC,但 Windows 上的 nginx 使用 tlsv1.0 和 AES_128_cbc。我不知道如何让 Windows 上的 nginx 使用 tlsv1.1。如果我能做到这一点,我会再次测试它们,看看 Windows 上的 nginx 是否能正常工作。
答案1
由于错误是由应用服务器报告的,这意味着 SSL 隧道已建立。您应该在其他地方搜索您的问题。
您可以使用 Fiddler 等 HTTP 调试代理来查看加密的 HTTPS 对话。比较两个 Nginx 服务器的 Fiddler 日志。
答案2
这是我的错。我发现之前我的本地计算机(Windows)上安装了一个应用程序,并作为 Windows 服务自动启动。此应用程序正在监听 443 端口号。当我的 Windows 上的 Nginx 启动时,它不会报告错误,因为 80 端口号未被其他进程使用。当使用 HTTPS 访问本地站点时,它只会与我本地计算机上的应用程序而不是我的 nginx 对话。我关闭了该应用程序并在 Windows 上重新测试 nginx,它运行正常。