我们要将同一个域名下的不同服务都使用nginx转为https协议,
但是我们只有一个ssl证书。怎么办呢
首先nginx配置ssl证书
1、现在nginx的安装目录下的conf目录下新建cert目录,
将下载 好的证书上传cert目录下
2、修改nginx.conf配置文件
增加一下配置
server {
#可以兼容http协议,就是HTTPS和http同时存在
listen 80 default backlog=2048;
#监听HTTPS的端口
listen 443 ssl;
#你的域名
server_name www.xxxxx.com
index index.html;
#证书存放位置,
ssl_certificate cert/6078120_xxxx.com.pem;
#密钥存放位置,
ssl_certificate_key cert/6078120_xxxx.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
add_header 'Access-Control-Allow-Origin' '*';
index index.html;
#这是根路径代理的地址
proxy_pass http://127.0.0.1:8083;
}
}
server {
listen 80;
# 域名
server_name www.xxxx.com;
# 把http的域名请求转成https且转发到443端口
rewrite ^(.*)$ https://$host:443$1 permanent;
}
以上配置完成后即可完成ssl协议的安装
rewrite实现服务的转发
那比如我这边有一个 订单服务 www.xxxxx.com :8081 和一个商品服务为www.xxxxx.com :8082,两个服务都在同一个服务器上
那我们需要将订单服务和商品服务业要转为HTTPS协议,怎么弄呢?
看下面
前端先将www.xxxxx.com :8081 和www.xxxxx.com :8082的端口替换为www.xxxxx.com/api1,和www.xxxxx.com/api2
nginx.conf的443的server下配置
location /api1{
#会匹配/api1后面的请求,然后转发到代理地址下
rewrite ^/api1/(.*)$ /$1 break;
#代理的目标地址
proxy_pass http://127.0.0.1:9212;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 1;
proxy_send_timeout 30;
proxy_read_timeout 60;
}
location /api2{
rewrite ^/api2/(.*)$ /$1 break;
#代理的目标地址
proxy_pass http://127.0.0.1:9214;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 1;
proxy_send_timeout 30;
proxy_read_timeout 60;
}