nginx 将所有 https 请求重定向到本地 https 门户
nginx redirect all https requests to local https portal
我有本地门户(强制门户),它是 https 并且将所有 http 请求重定向到本地 https 工作正常。
但是将请求从 https 重定向到本地 https 门户根本不起作用。
这里我是如何配置 nginx 的:
upstream flask_portal {
server unix:/tmp/flask_portal.sock;
}
server {
listen 172.31.3.1:443 default_server;
rewrite ^(.*) https://my_site.com?url=$server_name;
}
server {
listen 172.31.3.1:80 default_server;
listen 172.31.3.1:443 ssl;
server_name my_site.com;
ssl_certificate my_site.com.cert;
ssl_certificate_key my_site.com.key;
location / {
uwsgi_pass flask_portal;
include uwsgi_params;
}
}
当我用 curl 测试它时 https://www.google.com
它报告:
curl: (35) Unknown SSL protocol error in connection to www.googlw.com:443
我认为 nginx 应该将 www.google com 重定向到 my_site.com 并且 curl 应该询问 my_site 证书,但它没有。
您不能 重定向 https,因为您的证书与 www.google.com 或 *.google.com 不匹配,因此浏览器(理所当然地)将失败与它握手。 Curl(和你的浏览器)甚至永远不会看到重定向,因为这需要一次成功的握手。
你可以做的是告诉浏览器你是一个强制门户:https://www.chromium.org/chromium-os/chromiumos-design-docs/network-portal-detection
我有本地门户(强制门户),它是 https 并且将所有 http 请求重定向到本地 https 工作正常。 但是将请求从 https 重定向到本地 https 门户根本不起作用。 这里我是如何配置 nginx 的:
upstream flask_portal {
server unix:/tmp/flask_portal.sock;
}
server {
listen 172.31.3.1:443 default_server;
rewrite ^(.*) https://my_site.com?url=$server_name;
}
server {
listen 172.31.3.1:80 default_server;
listen 172.31.3.1:443 ssl;
server_name my_site.com;
ssl_certificate my_site.com.cert;
ssl_certificate_key my_site.com.key;
location / {
uwsgi_pass flask_portal;
include uwsgi_params;
}
}
当我用 curl 测试它时 https://www.google.com 它报告:
curl: (35) Unknown SSL protocol error in connection to www.googlw.com:443
我认为 nginx 应该将 www.google com 重定向到 my_site.com 并且 curl 应该询问 my_site 证书,但它没有。
您不能 重定向 https,因为您的证书与 www.google.com 或 *.google.com 不匹配,因此浏览器(理所当然地)将失败与它握手。 Curl(和你的浏览器)甚至永远不会看到重定向,因为这需要一次成功的握手。
你可以做的是告诉浏览器你是一个强制门户:https://www.chromium.org/chromium-os/chromiumos-design-docs/network-portal-detection