ng 能把https转发成http吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ng 能把https转发成http吗相关的知识,希望对你有一定的参考价值。
#配置负载均衡服务器(采用IP Hash算法,相同客户IP会转发到相同服务器)upstream backendServermall80
ip_hash;
server 192.168.10.91:8080;
server
#设置监听端口
listen 80;
#设置服务器域名(IP访问和多域名访问可不设置)
#server_name _*;
server_name www.test.com;
rewrite ^(.*$) https://$host$1 permanent;
#开启shtml支持
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
#设置主访问日志
#access_log logs/access.log main;
access_log /dev/null;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
#设置转发到后端服务器的URL(正则表达式)
#location ~ (^/(cgi-bin|servlet|chart)/|\\.jsp$)
#
# proxy_pass http://backendServerhx;
# include proxy.conf;
#
#设置监控nginx状态URL
location /__nginxstatus
stub_status on;
access_log off;
#全部请求转发到后端服务器的设置
location /
proxy_pass http://backendServermall80;
include proxy.conf;
参考技术A 关掉https就行了,浏览器都是默认http的。 参考技术B ejejejeeej
2021-10-29 利用nginx实现https的websocket转发
利用nginx实现https的websocket转发
- 环境描述:
- web服务器为nginx,前端为一个vue项目
- 后端为golang项目,为前端提供api服务
- 域名的cname由cloudflare托管,并选择“始终使用HTTPS”
- 前端需要使用websocket做实时显示和推送
- 问题:
- 假如项目全盘使用http,则一切正常
- nginx升级到https后,websocket失效,但强行使用http访问,勉强也能用
- 改由cloudflare托管后,因为全盘默认为 https,所以也就无法再“勉强使用”了
- 解决方案:
- nginx部分: 修改conf配置文件
首先按照常规方式配置https,比如申请证书,设置443端口等,然后再将URL的/api 以及 /websocket 做两个转发。nginx.conf 文件摘抄如下:server { # cloudflare始终使用https,因此80端口不需要再设置了 listen 443 ssl; server_name mysite.com; # 证书路径: ssl_certificate /cert/mysite.com.pem; ssl_certificate_key /cert/mysite.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.php index.html index.htm; } # 将https开头的 /api 路径转发到8080端口 , # 比如 https://mysite.com/api/getdata 将转为:http://127.0.0.1:8080/getdata location ~ /api/(.*) { proxy_pass http://127.0.0.1:8080/$1; } # 将https的 /websocket 转发到 http 的 8081 location /websocket { proxy_pass http://127.0.0.1:8081/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
- golang 部分
本程序使用的是Iris Web框架,其他框架大同小异即监听http的8080端口即可:
Websocket这边是这样的:app.Run(iris.Addr("0.0.0.0:8080"))
http.HandleFunc("/", ws) //ws是你的websocket处理函数 http.ListenAndServe("0.0.0.0:8081", nil) func ws(w http.ResponseWriter, r *http.Request) { ... }
- vue部分
项目使用axio实现ajax调用。只需要设置一下axio的baseURL即可:
在需要使用websockets的模块,是这样调用的:axios.defaults.baseURL = 'https://mysite.com/api/'
this.ws = new WebSocket('wss://rockage.net/websocket')
结语:
本方案比较简单,只是通过nginx将https请求映射成http而已,因此前后端程序无需做太多改动。
以上是关于ng 能把https转发成http吗的主要内容,如果未能解决你的问题,请参考以下文章