当 Nginx 反向代理在前面时,告诉 lighttpd 使用的协议(HTTPS)

Tell lighttpd used protocol (HTTPS) when Nginx reverse proxy is in front

我有一个 Nginx 反向代理重定向到同一台机器上的 lighttpd 服务器。这个反向代理在 HTTPS 上工作,所以我想告诉 lighttpd HTTPS 被用作协议而不是 HTTP。这是我的 Nginx 配置。

server {

  server_name mydomain.com;
  merge_slashes off;
  rewrite ^(.*?)//+(.*?)$ / permanent;

  location / {
      proxy_pass http://localhost:8088/;
      proxy_set_header Host       $host;
      proxy_set_header   X-Real-IP          $remote_addr;
      proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto  https;
      proxy_set_header   X-Forwarded-Ssl    on;
  }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    # SSL settings
}

server {
    if ($host = mydomain.com) {
        return 301 https://$host$request_uri;
    }

  listen 80;
  listen [::]:80;
}

lighttpd 服务器是 运行 一个使用 web.py 模块的 python 应用程序,但 web.ctx.protocol 的返回值仍然是 HTTP 而它应该是 HTTPS。看起来lighttpd忽略了Nginx发送的X-Forwarded-Proto header。

我做错了什么?是否有任何额外的配置要做? 谢谢

您必须将 lighttpd 配置为信任来自上游的 headers。在 lighttpd 中使用 mod_extforward。参见 https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModExtForward

比上面的许多 header 更好,nginx 和 lighttpd(通过 mod_extforward)都支持 RFC 7239 转发 header。

https://www.nginx.com/resources/wiki/start/topics/examples/forwarded/

应该优先使用 "Forwarded" header。