Web:前后端http/https跨协议互相访问调用问题——使用nginx代理(好文章!!)

1.问题

搭建内部中台时遇到了一个很尴尬的问题:
搭建前端使用的vue,然后产出静态文件,用nginx代理到http的地址;
搭建后端使用的flask-restful,直接python运行,运行在http的地址;(另外吐槽下,flask-restful真心好用,但是目前资料真的太少,flask的资料多,但是作为初学者,还看不懂TAT)
内部地址找运维大大申请了,最终运行在https的地址;
问题出现了:前端使用http地址直接访问时没有问题,但是使用https访问时,请求后端是用ajax请求的http地址,报错

 

Mixed Content: The page at '[https://XXX)' was loaded over HTTPS, 
but requested an insecure XMLHttpRequest endpoint
'[http://XXX](http://XXX)'. This request has been blocked; 
the content must be served over HTTPS.

2.解决

查网上的方案主要是,将后端改造,也支持https/后端通过nginx代理成http。作为新手已经看懵了,因为还得自己配置下https证书。这些解决方案我贴到下面

但是问运维大大,找到了另外一个方案:把后端也用nginx反向代理到同一个接口,ajax请求就可以用https的啦。运维大大牛逼!
这里贴一下nginx的代理配置,希望可以帮助到其他同学~

 

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /home/data/ZheShiQianDuan; # 前端资源

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        location /HouDuanDuanKou/ {
            proxy_pass http://xxx:5000; # 这是后端端口,注意这里网址的格式没有uri,千万别写错了!!例如:http://xxx/HouDuanDuanKou/abc则访问结果为:http://xxx:5000/HouDuanDuanKou/abc
            # 如:你的后端是http://127.0.0.1:5000/api,location这里和proxy_pass都改下就行了
        }
    }

proxy_pass的格式千万别写错了,有无uri完全不同,详解可参考:https://www.jianshu.com/p/b010c9302cd0

 

感慨下,欠的债终究要补啊。不懂的东西太多,没系统学习过注定在日后踩坑TAT

Links

1.Nginx直接反向代理后端:https://blog.csdn.net/qq_37105358/article/details/80854559
2.Flask直接走https:
https://blog.miguelgrinberg.com/post/running-your-flask-application-over-https
3.阮一峰的SSL/TSL协议概述:
https://www.ruanyifeng.com/blog/2014/02/ssl_tls.html



转载自:https://www.jianshu.com/p/c564a775c217

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 `http://172.30.203.129:4850/` 通过 Nginx 代理变成使用 HTTPS 协议的textocr-uat.sunwoda.com` 访问,你可以按照以下步骤进行操作: 1. 确保你已经将 `textocr-uat.sunwoda.com` 这个域名解析到了正确的 IP 地址上,并且已经获取了有效的 SSL 证书和私钥。 2. 安装和配置 Nginx。确保你已经安装了 Nginx 并且正确配置了其基本设置。 3. 创建一个新的服务器块或编辑默认服务器块的配置文件。可以在 Nginx 配置文件的 `sites-available` 目录中创建一个新的配置文件,或者直接编辑默认配置文件。 4. 在服务器块中添加以下内容来配置反向代理和 SSL: ```nginx server { listen 443 ssl; server_name textocr-uat.sunwoda.com; ssl_certificate /path/to/ssl_certificate.crt; ssl_certificate_key /path/to/ssl_private_key.key; location / { proxy_pass http://172.30.203.129:4850/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 请将 `/path/to/ssl_certificate.crt` 替换为你的 SSL 证书公钥文件的路径,将 `/path/to/ssl_private_key.key` 替换为你的 SSL 证书私钥文件的路径。 5. 添加一个额外的服务器块来重定向 HTTP 请求到 HTTPS。将以下内容添加到 Nginx 配置文件中: ```nginx server { listen 80; server_name textocr-uat.sunwoda.com; return 301 https://textocr-uat.sunwoda.com$request_uri; } ``` 6. 保存并退出配置文件,然后重新加载 Nginx 配置以应用更改。 7. 检查防火墙设置,确保允许通过所选端口(通常是 80 和 443)的流量。 现在,你应该能够通过使用 HTTPS 访问 `https://textocr-uat.sunwoda.com` 来代理访问 `http://172.30.203.129:4850/` 的内容了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值