したがって、httpsバックエンドサーバーにリクエストをproxy_passしたいのですが、https://が設定されたバックエンドでnginxサーバーをリロードしようとするたびに、次のエラーが発生します。
nginx: [emerg] https protocol requires SSL support
これはnginx設定です
server{
listen 8080;
root /opt/nginx_1.17.0/nginx_ok/html;
server_name www.frontedndomain.com;
index index.php index.html;
location /health-monitor/ {
add_header Custom-Header test;
}
location ~* ^\/([a-z][a-z]\/)?abc\/?(.*)? {
error_log /opt/nginx_1.17.0/nginx_ok/logs/proxy_error.log;
add_header X-query-string $is_args$query_string;
resolver 0.0.0.0;
resolver_timeout 15s;
proxy_pass https://backenddomain.com;
proxy_ssl on;
proxy_http_version 1.1;
proxy_set_header Accept-Encoding "";
proxy_set_header Cache-Control no-cache;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Real-IP $remote_addr;
subs_filter_types *;
}
}
もともと私はソース用のnginxをビルドしましたが、これはnginx -Vの出力です
nginxバージョン:gcc 4.8.5 20150623(Red Hat 4.8.5-36)(GCC)によって構築されたnginx/1.16.0構成引数:--prefix =/opt/nginx_1.17.0/nginx_ok/--sbin-path =/opt/nginx_1.17.0/nginx_ok/sbin/nginx --with-openssl =/opt/nginx_1.17.0/openssl-1.1.1c/--add-module =/opt/nginx_1.17.0/ngx_http_substitutions_filter_module/--with-zlib =/opt/nginx_1.17.0/zlib-1.2.11 /
誰かが私がこの構成から欠落しているものを説明してください。クエリ文字列もバックエンドに転送したいと思います。
この問題は、次のディレクティブを追加することで解決しました
proxy_ssl_server_name on;
これにより、要求は、上流のエンドポイントにある証明書のSNIで指定されたサーバーによって処理されます。
SSL(http)のないポート8080でリッスンし、ポート443(https)でSSL対応のホストにプロキシしようとしています。これが機能した場合、パケットがクライアントに転送されている間は暗号化されないため、暗号化は本質的に無意味になります。解決策は、問題のポートに対して証明書がインストールされ、SSLが有効になっていることと、proxy_passが非SSL対応ポートからSSL対応ポートに転送しないことを確認することです。