windows系统配置Nginx使用SSL证书实现Https反向代理

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版本。

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

下载后找位置解压

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

然后在该目录下运行命令窗口(可以在文件夹地址栏输入cmd进入)

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

输入nginx.exe回车提示报错

windows系统配置Nginx使用SSL证书实现Https反向代理

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文件夹,手动新建一个。

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

重新启动,浏览器输入localhsot 进入nginx页面成功即为安装成功!

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

二、申请SSL证书

腾讯云可以申请域名型免费SSL 腾讯云

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

立即购买

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

上面需要注意的提示为:仅支持绑定一个二级域名或者子域名,例如 tencent.com、cloud.tencent.com、dnspod.cloud.tencent.com的其中之一 。

也就是说申请的一个SSL只能绑定一个域名,但是可以多次申请绑定域名的二级域名或者子域名。

可以根据需要绑定域名或者二级域名或者子域名。例如我们申请的SSL所绑定的域名为 test.com

windows系统配置Nginx使用SSL证书实现Https反向代理

 

下一步需要解析验证,就是在域名所在的网站上根据腾讯云给出的参数去解析一条记录,来证明这个域名的使用权。

 

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

windows系统配置Nginx使用SSL证书实现Https反向代理

例如我的域名是在美橙互联上,地址:https://www.cndns.com

windows系统配置Nginx使用SSL证书实现Https反向代理

 

 

则需要在域名解析这里添加一条记录,主机名填写腾讯云提供的主机记录字段,记录类型选择TXT,记录值填写腾讯云提供的记录值字段。

然后保存后等待生效,一般在一个半小时内,然后等待腾讯云签发即可。

windows系统配置Nginx使用SSL证书实现Https反向代理

 

在证书详情里下载证书文件

windows系统配置Nginx使用SSL证书实现Https反向代理

 

windows系统配置Nginx使用SSL证书实现Https反向代理

三、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访问一致。

上一篇:css 居中对齐总结


下一篇:SpringBoot之Establishing SSL connection without server‘s identity verification is not recommended.