Nginx反向代理服务,可以代理接收请求,并把请求转发到设置好的其他服务器上。
例如,Nginx服务器为 100.101.102.103,A服务为 100.101.102.104 ,通过Nginx配置文件,可以是Nginx服务器代理接收A服务的请求,然后转发到A服务上。
通过SSL证书配置可以是Nginx具有接收Https的能力,然后通过http转发到A服务上;
或者接收Http请求,通过Nginx配置,强制转成Https请求转发到A服务上。
Nginx可以代理多个服务。
本文使用的是windows系统服务器操作,SSL证书为腾讯云的免费SSL(下文有详细步骤)。
一、安装Nginx
Nginx下载官网地址:http://nginx.org/en/download.html
此次使用的是1.18.0版本。
下载后找位置解压
然后在该目录下运行命令窗口(可以在文件夹地址栏输入cmd进入)
输入nginx.exe回车提示报错
nginx: [emerg] CreateDirectory() "E:\tools\Nginx\nginx-1.18.0/temp/client_body_temp" failed (3: The system cannot find the path specified)
原因是没有在nginx目录里找到temp文件夹,手动新建一个。
重新启动,浏览器输入localhsot 进入nginx页面成功即为安装成功!
二、申请SSL证书
腾讯云可以申请域名型免费SSL 腾讯云
立即购买
上面需要注意的提示为:仅支持绑定一个二级域名或者子域名,例如 tencent.com、cloud.tencent.com、dnspod.cloud.tencent.com的其中之一 。
也就是说申请的一个SSL只能绑定一个域名,但是可以多次申请绑定域名的二级域名或者子域名。
可以根据需要绑定域名或者二级域名或者子域名。例如我们申请的SSL所绑定的域名为 test.com
下一步需要解析验证,就是在域名所在的网站上根据腾讯云给出的参数去解析一条记录,来证明这个域名的使用权。
例如我的域名是在美橙互联上,地址:https://www.cndns.com
则需要在域名解析这里添加一条记录,主机名填写腾讯云提供的主机记录字段,记录类型选择TXT,记录值填写腾讯云提供的记录值字段。
然后保存后等待生效,一般在一个半小时内,然后等待腾讯云签发即可。
在证书详情里下载证书文件
三、Nginx配置SSL证书实现Https代理
实现代理接收https请求,把请求转发到其他服务的http接口上。
(例如服务A在100.101.102.104:8080上,只允许http访问,nginx 服务在 100.101.102.103:8080 上,通过nginx配置SSL证书来实现接口https的请求,然后把请求代理发送http请求到A服务上)。
把 test.com.key 和 test.com_bundle.crt 两个文件放到nginx安装目录下的conf目录里(和nginx.conf放一起)
修改 nginx.conf 配置文件:
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #gzip on; server { listen 81; server_name test.com; return 301 https://$host$request_uri; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # HTTPS server # server { listen 8080 ssl; # nginx所使用的端口 server_name test.com; # SSL 证书绑定的域名 ssl_certificate test.com_bundle.crt; ssl_certificate_key test.com.key;
ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m;
ssl_ciphers CDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass http://100.101.102.104:8080; # 需要转发到的服务地址 A服务的地址 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; } } }
重启nginx或者刷新nginx配置文件即可。
测试:
例如A服务有一个接口为:http://100.101.102.104:8080/login/index
则测试https://test.com/login/index
看是否和http://100.101.102.104:8080/login/index访问一致。