Nginx: windows下nginx代理实现本地https请求转http
背景需求:
- https网站下要求ajax请求(iframe、img等资源)都要是https域名,http不能用,或被浏览器拦截(可以关闭浏览器的安全策略拦截)
- 小程序、公众号等需要https域名接口或资源,调用本地http资源失败(可以打开调试模式绕过)
解决原理
本地(服务器)代理监听https端口,代理转发请求http接口或资源。但是ip地址是不能创建安全证书的,所以需要先有一个域名,指向这个内网ip地址。最终内网下,访问域名即可请求到本地资源
解决步骤
1、下载安装nginx(先不要启动)
- 官网下载nginx https://nginx.org/en/download.html
- 解压
2、创建nginx证书
-
第一种 使用腾讯云、阿里云控制台(最简单),本文举例腾讯云
-
搜索:ssl证书,进入控制台
-
选择免费证书
-
填写域名和接收邮箱
-
等待邮件接收即可下载使用
-
-
第二种 使用openssl创建证书
参考文档:https://blog.51cto.com/lw112190/6265264
3、修改nginx配置项
新建文件夹pem,将刚才申请的证书下载存放在里面
打开并编辑:nginx.conf
本文是监听https服务,若http端口不冲突可以不改,或者注释掉http部分,只打开https这里
server {
listen 4433 ssl;
server_name localhost;
ssl_certificate pem/client.noleft.cn_bundle.pem;
ssl_certificate_key pem/client.noleft.cn.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.html index.htm;
# }
location / {
proxy_pass http://172.16.25.110:5001/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
证书如果是我一样存放方式,不要在ssl_certificate地址的地方前面加上 / 否则会从D盘开始找
4、配置homes
相当于 域名解析。只是解析放到了本地而已。只是本电脑生效
win + R 输入:C:\Windows\system32\drivers\etc
或者输入文件夹地址回车:
根据实际情况,添加ip和域名的映射关系
5、启动nginx
双击启动即可,会闪一次黑框就是启动正常
其他:
1、 重启nginx
nginx文件夹内,右击菜单选择
nginx -s reload
如果报错找不到nginx,则执行:
.\nginx -s reload