不幸的是,我并不是一个很好的系统管理员,我遇到了一个让我的头撞到墙上的问题。
简而言之,我在EC2 (Ubuntu14.04.4LTS)上运行Nginx是为了(a)托管我公司的营销站点(顺便说一句是Wordpress),(b)作为我们在Heroku (https:// app.example.com)上运行的Rails应用程序的反向代理,用于某些路径。我们对example.com和app.example.com都使用相同的SSL证书。所有这些都很好用了8-10个月,但是最近我从Heroku的付费SSL插件转向了新的免费SSL服务,现在我们的反向代理已经崩溃了。
在检查Nginx错误日志时,我看到以下内容:
SSL_do_handshake()失败( SSL : routines:SSL3_READ_BYTES:tlsv1警报内部错误:SSL警报号80)而SSL握手到上游,客户端: ipaddress1,服务器: example.com,请求:"GET /proxiedpath/proxiedpage HTTP/1.1",上游:"https:// ipaddress2 2:443/proxiedpath/proxiedpage“,主机:"example.com”
我试图四处寻找一些额外的指导-我升级了Nginx (1.10.1)和OpenSSL (1.0.2h)没有运气。我怀疑这个问题可能是由于Heroku在新的免费SSL特性(https://devcenter.heroku.com/articles/ssl-beta)中使用了SNI,但还无法确定为什么会出现问题。
关于我对这一点的探索,我还要补充几点:
最后,我的Nginx反向代理在nginx.conf中配置如下:
http {
client_max_body_size 500M;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
server {
listen 443 default_server;
server_name example.com;
root /usr/share/nginx/html;
index index.php index.html index.htm;
ssl on;
ssl_certificate mycompanycert.crt;
ssl_certificate_key mycompanykey.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ^~ /proxiedpath/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_pass https://app.example.com/proxiedpath/;
}
}
}任何帮助都是非常感谢的--非常感谢!
发布于 2016-07-15 17:10:51
我今天能够解决这个问题,并希望发布解决方案,以防其他人遇到同样的问题。
事实证明,这个问题毕竟与SNI有关。我在nginx.org上找到了这张票:
https://trac.nginx.org/nginx/ticket/229
这让我看到了proxy_ssl_server_name指令:
name
通过在您的配置中设置为"on“,您将能够使用SNI代理到上游主机。
感谢所有提出建议的人!
发布于 2017-06-21 02:04:57
作为对其他人的注意,Heroku强加的一个相关条件是宿主字段必须与自定义域名匹配。
因此,除了proxy_ssl_server_name之外,您还可能希望设置如下一行:
proxy_set_header Host mycustomdomain.com;当然,这仅适用于传入服务器的主机字段与服务器所在的域不同的情况。
您得到的具体错误是:
SSL证书错误 SSL连接、其证书和/或包含的HTTP请求之间存在冲突信息。
发布于 2021-07-22 05:25:31
请尝试添加proxy_ssl_server_name on
location ^~ /proxiedpath/ {
proxy_ssl_server_name on;
}https://stackoverflow.com/questions/38375588
复制相似问题