当 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。
我有一个 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。