不幸的是,我不是一个很好的系统管理员,遇到了一个让我头痛的问题。
简短的故事是,我在EC2(Ubuntu 14.04.4 LTS)上运行Nginx,以(a)托管我公司的营销网站(https://example.com,碰巧是Wordpress),(b)作为我们在Heroku(https://app.example.com)上运行的Rails应用程序的反向代理,用于某些路径。我们对example.com和app.example.com.都使用相同的SSL证书。所有这些在8-10个月内都非常有效,但我最近从Heroku的付费SSL插件切换到了新的免费SSL产品,现在我们的反向代理坏了。
在检查Nginx错误日志时,我看到了以下内容:
SSL\u do\u handshake()在与上游进行SSL握手时失败(SSL:错误:14094438:SSL例程:SSL3\u READ\u字节:tlsv1警报内部错误:SSL警报编号80),客户端:ipaddress1,服务器:示例。com,请求:“GET/proxiedpath/proxiedpage HTTP/1.1”,上游:“https://ipaddress2:443/proxiedpath/proxiedpage”,主机:“example.com”
我试着四处寻找一些额外的指导——我升级了Nginx(1.10.1)和OpenSSL(1.0.2h),但运气不好。我怀疑这个问题可能是因为Heroku在新的免费SSL功能中使用了SNI(https://devcenter.heroku.com/articles/ssl-beta),但无法确定这可能是一个问题的原因。
关于我对这一点的探索,还有几点:
>
我无法通过nslookup或app返回的IP地址访问应用程序。实例com。herokudns。com。我怀疑这是正常的,也是意料之中的,但我不知道为什么会这样。和
从nslookup返回的IP地址与上面日志的错误消息(“ipaddress2”)中引用的IP地址不同。事实上,“ipaddress2”在整个日志中并不一致——它似乎定期更改。同样,我知道的还不够多,不知道我不知道什么... Heroku这边的负载平衡?
最后,我的Nginx反向代理在Nginx中配置如下。形态:
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/;
}
}
}
任何帮助都非常感谢-非常感谢!
请尝试在上添加代理ssl服务器名称
location ^~ /proxiedpath/ {
proxy_ssl_server_name on;
}
作为其他人的注意事项,Heroku强加的一个相关条件是HOST字段必须与自定义域名匹配。
因此,除了proxy_ssl_server_name
之外,您可能还需要设置如下行:
proxy_set_header Host mycustomdomain.com;
当然,这仅适用于传入服务器的主机字段与服务器所在的域不同的情况。
您得到的具体错误是:
SSL证书错误
SSL连接、其证书和/或包含的HTTP请求之间存在冲突信息。
我今天能够解决这个问题,并想发布解决方案,以防其他人遇到同样的问题。
事实证明,这个问题毕竟与SNI有关。我在nginx上找到了这张票。组织机构:
https://trac.nginx.org/nginx/ticket/229
这让我想到了proxy_ssl_server_name指令:
http://nginx.org/r/proxy_ssl_server_name
通过在配置中设置为“on”,您将能够使用SNI代理到上游主机。
感谢所有提出建议的人!
我已经在预打包的jetty服务器前面安装了http反向代理。jetty服务器是预配置的应用程序,不太灵活。此Jetty服务器将只接受SSL请求。 我将nginx配置为使用自己的SSL证书在443上侦听SSL流量。然后在nginx后面,我在另一台运行jetty服务器的机器上有另一台服务器,在端口443上有自己的证书。 我的Nginx配置如下所示, 如果我在https上点击jetty服务器,就会得到一
我试图使用nginx作为双向SSL/相互SSL的web逻辑的反向代理。 客户端<=双向SSL=>NGINX<=双向SSL=>WebLogic服务器 客户端到NGINX双向SSL工作良好,但在上游连接到web逻辑上出现以下错误。 nginx调试日志: 以下是我对上游的nginx配置: 我尝试了各种选项,包括注释下面的配置。 如果我尝试使用openssl c_client命令行,我能够连接并获得HTT
主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过
Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server
我目前正在尝试为客户端界面-服务器交互构建一个API。我已经决定使用ASP.NET核心作为API,Nginx作为托管平台(在Ubuntu 18.04上)。由于ASP.NET使用Kestrel,我们设置了一个反向代理,将请求从Nginx转发到Kestrel——也就是托管API的服务器。我们在NGINX服务器上设置了SSL,但是它没有在Kestrel服务器上设置。 简单地说,我不知道如何在 Kestr
本小节,我们继续学习 Nginx 在 七层反向代理中的其它几种比较常见的情况,比如 web 服务中的 WebSocket 协议的反向代理和 uwsgi 协议的反向代理。 1. WebSocket的反向代理 WebSocket 是目前比较成熟的技术了, WebSocket 协议为创建客户端和服务器端需要实时双向通讯的 webapp 提供了一个选择。服务器可以向浏览器推送相关消息,这样在前端实现的某个