【发布时间】: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