Try search manuals with the following request: "nginx how to set up reverse proxy with https" (or something like that). It gives you many manuals how to proxy a HTTPS connection to a HTTP server. (Including the information about proxy_set_header X-Forwarded-Proto $scheme;
that you missed, I suppose.)
Bonus:
NGINX proxy_pass's documentation:
A request URI is passed to the server as follows:
If the proxy_pass directive is specified with a URI, then when a request is passed to the server, the part of a normalized request URI matching the location is replaced by a URI specified in the directive:
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
If proxy_pass is specified without a URI, the request URI is passed to the server in the same form as sent by a client when the original request is processed, or the full normalized request URI is passed when processing the changed URI:
location /some/path/ {
proxy_pass http://127.0.0.1;
}
In your case, using this you can rewrite your directive as the following: proxy_pass http://10.0.0.40;