【问题标题】:NGINX Forward HTTPS request to HTTP Backend Server and BackNGINX 将 HTTPS 请求转发到 HTTP 后端服务器并返回
【发布时间】:2022-06-16 04:12:30
【问题描述】:

在单个服务器实例上,我有一个 NGINX Web 服务器,它在 HTTPS 上运行没有任何问题,我在 Spring Boot 中有一个后端服务器,在端口 8080 上运行。我不想将此端口打开到互联网,因此我想用 NGINX 设置一个反向代理,将 /api 开头的请求转发到我的后端并返回响应。

当我在浏览器中向域发送请求时,我在浏览器中运行的前端应用程序向我的后端发送一些请求(以 /api 开头),我的前端使用以下基本 URL:

http://my-ip:8080/api

而nginx的配置如下:

server {
  listen 80;
  ssl_certificate     /cert/cert.pem;
  ssl_certificate_key /cert/privkey.pem;
  server_name www.mydomain.com;
  rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen 443 ssl;
    server_name www.mydomain.com mydomain.com;

    ssl_certificate     /cert/cert.pem;
    ssl_certificate_key /cert/privkey.pem;

    location / {
      root   /usr/share/nginx/html;
      index  index.html index.htm;
      try_files $uri $uri/ /index.html;
    }
    error_page 404 /index.html;
    location = / {
      root /usr/share/nginx/html;
      internal;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
    location /api {
      proxy_set_header X-Forwarded-Host $host:$server_port;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_pass http://127.0.0.1:8080;
    }
}

我不断收到Mixed Content Error 并且我的后端请求被浏览器阻止,因为我的前端使用 http 进行请求。

如果我尝试在前端 URL 中使用 https,例如: https://my-ip:8080/api

然后我得到一个不同的错误:

GET https://my-ip/api/... net::ERR_CERT_COMMON_NAME_INVALID

这可能是因为我的证书是为我的域名而不是为 IP 生成的。

【问题讨论】:

    标签: nginx ssl https reverse-proxy


    【解决方案1】:

    解决方案:在前端,我们应该将请求发送到https版本并使用实际域而不是ip地址,因为域名应该与认证的域匹配。

    请求:https://my-domain:8080/api

    然后nginx正确转发这个请求。

    【讨论】:

      猜你喜欢
      • 2021-11-09
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2016-03-13
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多