我在预先打包的jetty服务器前面设置了http反向代理 . jetty服务器是一个预配置的应用程序,并不是很灵活 . 此Jetty服务器仅接受SSL请求 .
我让nginx配置为使用自己的SSL证书侦听443的SSL流量 . 然后在nginx后面,我在其他机器上运行jetty服务器的anohter服务器,在端口443上有自己的证书 .
我的Nginx配置如下所示,
server
{
listen 443;
server_name _;
ssl on;
ssl_certificate cc_net.pem;
ssl_certificate_key cc_net.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location /rest/api/box/get_user_info {
proxy_pass https://fssdemo.cc.net/rest/api/box/get_user_info?external=true&server=$host;
}
location /rest/api/box/is_running {
proxy_pass https://fssdemo.cc.net/rest/api/box/is_running;
}
location / {
root html;
index index.html index.htm;
}
}
如果我在https上点击我的码头服务器,我会得到一个502,糟糕的网关 .
错误日志报告:
2014/04/10 08:52:48 [错误] 648#0:* 1 SSL_do_handshake()失败(SSL:错误:100AE081:椭圆曲线例程:EC_GROUP_new_by_curve_name:未知组错误:1408D010:SSL例程:SSL3_GET_KEY_EXCHANGE:EC lib )当SSL向上游握手时,客户端:172.16.9.140,服务器:_,请求:“GET / rest / api / box / is_running HTTP / 1.1”,上游:“https:// <54.221.108.189:443> / rest / api / box / is_running“,主持人:”ext.cc.net“
我把<>放在上面的错误日志中,不允许我发布带IP的链接 .
从上面我可以看出,这是说从我的代理到我的码头主机的ssl连接失败了 .
如果我直接浏览目标,在https和端口443上,它可以完美地工作 .
我想知道其中一个是否能解决代理问题?但是,当连接到目标时,我如何强制nginx使用ssl?
谢谢
1 回答
这个错误可能是你的openssl宣布的椭圆曲线比它支持的更多,然后服务器选择一个不受支持的曲线 . 见https://bugzilla.redhat.com/show_bug.cgi?id=1019390 . 你需要升级你的openssl .