残念ながら私はあまりシステム管理者ではないので、頭を壁にぶつけてしまう問題に遭遇しました。
短い話は、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_do_handshake()が失敗しました(SSL:エラー:14094438:SSLルーチン:SSL3_READ_BYTES:tlsv1アラートの内部エラー:SSLアラート番号80)アップストリームへのSSLハンドシェイク、クライアント:ipaddress1、サーバー:example.com、リクエスト: "GET / proxiedpath / proxiedpage HTTP / 1.1」、アップストリーム:「https:// ipaddress2:443 / proxiedpath / proxiedpage」、ホスト:「example.com」
私はいくつかの追加のガイダンスを探して探しました-運が悪いのにNginx(1.10.1)とOpenSSL(1.0.2h)をアップグレードしました。この問題の原因はHerokuの新しい無料SSL機能(https://devcenter.heroku.com/articles/ssl-beta)でのSNIの使用にあると思われますが、これが問題である理由を特定できませんでした。
このポイントへの私の探査のいくつかの追加ポイント:
新しい無料のHeroku SSLに切り替えたとき、ドキュメントの指示に従って、app.example.com DNSレコードをapp.example.com.herokudns.comを指すように変更しました。アプリケーションには通常app.example.comからアクセスできます。app.example.comとapp.example.com.herokudns.comでnslookupを実行すると、同じIPアドレスが返されます。しかしながら...
nslookupから返されたIPアドレスまたはapp.example.com.herokudns.comからアプリケーションにアクセスできません。これは正常で予想されることだと思いますが、これがなぜなのかを正確に説明するのに十分な知識はありません。そして...
nslookupから返されたIPアドレスは、上記のログのエラーメッセージで参照されているIPアドレス( "ipaddress2")とは異なります。実際、「ipaddress2」はログ全体で一貫していません-定期的に変更されているようです。繰り返しになりますが、私にはわからないことがよくわかりません... Heroku側での負荷分散ですか?
そして最後に、私の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/;
}
}
}
どんな助けでも大歓迎です-どうもありがとうございます!
私はこれを今日解決することができ、他の人が同じ問題に遭遇した場合の解決策を投稿したいと思いました。
結局のところ、問題はSNIに関連していることがわかりました。私はnginx.orgでこのチケットを見つけました:
https://trac.nginx.org/nginx/ticket/229
これにより、proxy_ssl_server_nameディレクティブが表示されます。
http://nginx.org/r/proxy_ssl_server_name
設定で「オン」に設定すると、SNIを使用してアップストリームホストにプロキシできます。
提案でコメントしたすべての人に感謝します!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加