我有一台 Windows 10 家庭版,其中使用 vmware 虚拟机软件运行 Linux kali。
有一个本地网站可以在 url 上打开https://example.com在 Linux 中,并具有自签名证书。我已在文件中添加了它的 IP 条目,etc/hosts
以便它在 example.com 上打开。
Linux 上的 /etc/hosts 文件条目:
192.168.49.2 example.com
在浏览器(即)上打开时,此本地网站会重定向到 https 网址http://example.com=>>>https://example.com。
该网站托管在 kubernetes 上,入口代码如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: first-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- example.com
secretName: myssl
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: first-service
port:
number: 8080
(我认为问题中不需要入口代码,但为了这个目的,我给出了它。)
问题是我无法从我的 Windows 进行 ssh 本地端口转发。ssh 脚本是:
ssh -L 9090:example.com:80 [email protected]
我收到 404 Not Found nginx 错误。
我还尝试使用以下命令使用 443 端口:
ssh -L 9090:example.com:443 [email protected]
在这种情况下,错误是:
400 Bad Request 普通的 HTTP 请求被发送到 HTTPS 端口 nginx
当我打开 URL“https://localhost:9090/”时,我也收到错误消息“证书链由不受信任的机构颁发。”
如果我删除重定向,那么 ssh 本地端口重定向就可以正常工作,我可以使用localhost:9090
url 在 Windows 浏览器上打开网站。只有存在重定向时才会出现此问题。
我怎么解决这个问题?
答案1
在第一种情况下,当您的浏览器收到重定向到时,https://example.com
它会尝试在端口 443(默认 https 端口)上与主机建立新连接。因此,如果您希望此方法有效,则除了现有的 http 端口转发子句( )之外,example.com
还需要在 ssh 命令行中添加第二个 https 端口转发子句(例如) 。443:example.com:443
9090:example.com:80
此外,根据您的 nginx 配置(您未共享),nginx 可能仅为对主机名 的请求提供服务example.com
,而不是localhost
。因此,您可能必须localhost
在 nginx 配置中添加该站点的别名,或者example.com
将 的 IPv4 地址添加127.0.0.1
到 Windowshosts
文件并在浏览器中使用它。
在第二种情况下,当您在浏览器中输入 URL http://localhost:9090
(或只是localhost:9090
)时,您指示它与端口 9090 建立 http(非 TLS)连接,但您将该端口转发到 nginx 服务器的 https 端口 443。因此,您的浏览器最终会尝试与 nginx 想要使用 https 的端口进行 http 通信。如果您希望此方案有效,则必须告诉浏览器使用 https 而不是 http,即输入 URLhttps://localhost:9090
而不是http://localhost:9090
。
请注意,与第一种情况一样,nginx 可能(取决于配置)仅响应主机名example.com
,并且404 Not found
如果地址为 则响应localhost
。修复方法与上面针对第一种情况所述的相同。