继续尝试将nginx配置为使用运行在本地主机上的胚根的反向代理,现在我在遵循关于代理的文档创建了自己的SSL证书之后获得了SSL错误。
我的nginx配置的相关部分是
location /radicale/ {
proxy_pass http://127.0.0.1:9468/;
#proxy_pass http://46.105.31.182:9468/;
proxy_set_header X-Script-Name /radicale;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-User $remote_user;
auth_basic "Radicale - Password Required";
auth_basic_user_file /etc/radicale/users;
proxy_ssl_verify on;
proxy_ssl_certificate /etc/radicale/client_cert.pem;
proxy_ssl_certificate_key /etc/radicale/client_key.pem;
proxy_ssl_trusted_certificate /etc/radicale/server_cert.pem;
} ...and我对SSL证书的激进配置是..。
[server]
hosts = 127.0.0.1:9468
ssl = true
certificate = /etc/radicale/server_cert.pem
key = /etc/radicale/server_key.pem
certificate_authority = /etc/radicale/client_cert.pem
[auth]
type = http_x_remote_user
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = bcrypt如果我转到https://####/radicale站点,会提示我输入用户名和密码以进行身份验证,但nginx随后返回以下错误.
upstream prematurely closed connection while reading response header from upstream, client: 62.253.154.162, server: #####, request: "GEET /radicale/ HTTP/2.0", upstream: "http://127.0.0.1:9468/", host: "####"...and上游神经根报道.
ERROR: An exception occurred during request: SSL handshake failed: [SSL: HTTP_REQUEST] http request (_ssl.c:1076)如果我禁用根和nginx上的反向代理之间的SSL,那么这不是一个问题,我可以访问WebUI https://####/radicale并登录。但是,如果我启用它,然后转到https://####/radicale,并得到一个弹出框,询问我用户名/密码,浏览器报告502 Bad Gateway,上面的错误再次发生。
我确实有LetsEncrypt证书,并且正在处理我的域,这是否会导致与用于反向代理的SSL证书发生某种冲突?
发布于 2019-08-20 09:23:59
根据Nginx文档,proxy_ssl_certificate proxy_ssl_certificate_key是相关的,如果您希望NGINX使用所提供的SSL客户端证书将自己标识到上游服务器。您还需要配置上游服务器以要求所有传入SSL连接的客户端证书。
我认为根目录不是通过客户端证书来处理身份验证的,您的激进服务器正在监听127.0.0.1,所以通过在根目录上配置SSL,您基本上是想加密本地主机上的通信。
在您的配置中的另一点。
location /radicale/ {
...
auth_basic "Radicale - Password Required";
auth_basic_user_file /etc/radicale/users;
...
} 您的身份验证部分已经由激元本身处理。在revers代理上添加这些行是没有意义的。
我建议:
如果您仍然希望加密revers、代理和激元之间的通信,只需删除客户端证书部分并添加proxy_ssl_name。
location /radicale/ {
proxy_pass http://127.0.0.1:9468/;
#proxy_pass http://46.105.31.182:9468/;
proxy_set_header X-Script-Name /radicale;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-User $remote_user;
proxy_ssl_name "####";
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /etc/radicale/server_cert.pem;
} 为了避免错误,需要使用proxy_ssl_name
upstream prematurely closed connection while reading response header from upstream, client: 62.253.154.162, server: #####, request: "GEET /radicale/ HTTP/2.0", upstream: "http://127.0.0.1:9468/", host: "####"这是因为过去根据SSL证书名称验证的名称默认为$proxy_host。
发布于 2022-01-26 18:59:09
我知道这是个老生常谈,但说句公道话,我让它这样运作.
我使用的是一个独立的子域,比如radicale.example.com,脚本在/中,所以X-Script-Name就是这样设置的。我使用letsencrypt/certbot作为证书。
nginx节是:
server {
server_name radicale.example.com;
# (all :80 connections are being redirected to :443)
listen 443 ssl;
listen [::]:443 ssl;
access_log /var/log/nginx/radicale/access.log main;
error_log /var/log/nginx/radicale/error.log info;
location / {
proxy_pass http://localhost:5232/;
proxy_set_header X-Script-Name /;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass_header Authorization;
}
ssl_certificate /etc/letsencrypt/live/radicale.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/radicale.example.com/privkey.pem; # managed by Certbot }
在根目录配置中不需要SSL设置,我允许根目录处理用户密码。
https://serverfault.com/questions/979856
复制相似问题