这个问题似乎很大程度上取决于版本。在Ubuntu 14.04 LTS上,默认的nginx是过时的1.4。首先,您需要安装基于PPA的版本
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
显示了如何执行以下操作:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
您应该最终得到:
nginx -v
nginx version: nginx/1.8.0
来自@ xatr0z的配置https://serverfault.com/a/636455/162693指向 http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
无效:
无效的建议
backend {
server some-ip:443;
}
server {
listen 80;
location / {
proxy_ssl_certificate certs/client.crt;
proxy_ssl_certificate_key certs/client.key;
proxy_pass https://backend;
}
}
1.8.0不能立即使用。它可能仅是一个提示,而不能用作配置文件或依赖于另一个版本。
我正在使用启用了SSL和自签名客户端证书的基于apache2的后端服务器A进行测试。Apache配置SSLOptions设置为:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
由于后端的phpinfo()脚本将显示服务器和客户端信息,因此这使调试情况更加容易。
为了验证这一点,我使用了:
https:// backend / test / phpinfo
并在浏览器中安装了SSL证书,我得到如下部分:服务器证书SSL_SERVER_S_DN_CN和客户端证书SSL_CLIENT_S_DN_CN。
首先,我使用了(填写括号中的部分)在前端服务器B上配置nginx:
server {
listen 8080;
server_name <frontend>;
location / {
proxy_buffering off;
proxy_pass https://<backend>;
#proxy_ssl_certificate certs/<SSL Client Certificate>.crt;
#proxy_ssl_certificate_key certs/<SSL Client Certificate>.key;
}
}
取消提供SSL客户端证书特定部分的权限,只是为了检查反向代理本身是否起作用。
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart
nginx stop/waiting
nginx start/running, process 8931
现在http:// frontend:8080 / test / phpinfo.php可以了
显示服务器证书的SSL_SERVER_S_DN_CN,尚未显示客户端证书的SSL_CLIENT_S_DN_CN
现在取消注释后:
server {
listen 8080;
server_name <frontend>;
location / {
proxy_buffering off;
proxy_pass https://<backend>;
proxy_ssl_certificate certs/<SSL Client Certificate>.crt;
proxy_ssl_certificate_key certs/<SSL Client Certificate>.key;
}
}
和检查/重新启动
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart
nginx stop/waiting
nginx start/running, process 8931
http:// frontend:8080 / test / phpinfo.php可以正常工作
SSL_SERVER_S_DN_CN服务器证书显示和客户端证书SSL_CLIENT_S_DN_CN 显示
所以现在我们可以按要求进行工作了。
请注意错误https://trac.nginx.org/nginx/ticket/872#ticket