前提:
项目中,需要调用第三方接口计算某个xxx值,因为该值并不需要对数据有组装拼接或者其他复杂的处理,所以打算让前端直接调用第三方接口,不走后端,但是第三方并没有将其服务代理为https,根据chrome的策略会对前端的http请求进行拦截,所以,我要负责将第三方的服务代理成https,于是就有了接下来的采坑经历,但是其实最后并没有用这个使用openssl自制的证书,也并没有用这个新安装的nginx,因为还涉及跨域问题。
windows:
1. nginx安装
1. windows下直接到官网下载zip包
1). Mainline version 是现在正在开发和维护的版本
2.) Stable version 是稳定版本
3.) Legacy version 是相对比较旧的版本
2. 解压压缩包到指定文件夹
3. nginx文件夹的路径下运行cmd或者直接运行cmd进入到nginx所在的文件夹。
4. 输入指令 start nginx
5. 使用浏览器访问http://localhost或http:localhost:80可以访问到nginx的访问页面说明启动成功。
6. 安装openssl,这里要使用spenssl生成证书和密钥。
7. openssl下载地址
8. 下载之后直接安装,安装好之后需要配置一下环境变量。
9. 系统变量中添加OPENSSL_HOME变量,变量值为安装ssl的路径,路径需要精确到bin文件夹比如(E:\Program Files\OpenSSL_Light\OpenSSL-Win64\bin)。
10. 在系统变量path中添加以下值%OPENSSL_HOME%;
11. 运行cmd,执行命令openssl version 如果可以正常显示openssl的版本,说明安装成功了。
12. 生成证书和密钥。
13. 执行以下命令, openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout nginx.key -out nginx.crt 有效期为100年,密钥文件名称为nginx,证书文件名称也为nginx。接下来会填很多参数,其中比较重要的是 Common Name 应为域名(我对这个一直有着深深的误解,因为是在局域网,所以没有考虑过申请域名这回事,所以觉得既然不需要在外网访问,所以这里起什么都可以,代理之后,直接访问这个域名就可以了,所以在这里耗费了很长一段时间)
14. 修改nginx的config配置文件。在配置文件的最下方有一个 #HTTPS server 块被注掉了,在这里需要把注释放开。
15. 其中 ssl_certificate 为证书的路径,ssl_certificate_key为密钥的url,需要注意路径写法,location 后面跟着的需要在访问时的路径中包含, proxy_pass 为我们要代理的真实的url。
server {
listen 443 ssl;
server_name www.cavalry.com;
ssl_certificate E:/nginx/ssl/nginx.crt;
ssl_certificate_key E:/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.0.104:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_next_upstream off;
proxy_connect_timeout 30;
proxy_read_timeout 300;
proxy_send_timeout 300;
}
}
16. 验证结果 注意在这里我们并不能够使用https://www.cavalry.com访问到我们的页面,依然要通过https:localhost/ 或者 https:+ip 来访问。