http转https,nginx配置详解

http转https

一.http和https简介

  • HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

  • HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL,HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

二、HTTP与HTTPS有什么区别?

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

三、HTTPS的工作原理

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。


http请求转为https请求

总的来说,https就是在发送数据时对数据一个加密操作,所以我这里采用RSA自己生成ssl证书,自己给自己授权,做一个测试使用,目的是更深刻的了解http和https的转换。

  1. 生成单向认证的https证书

1、在linux系统中安装nginx;会有两次要求输入密码,
2、在nginx安装目录下输入命令:mkdir ssl;
3、在ssl目录下创建文件:touch MyCompanyCA.cnf

2 并在配置文件输入以下内容:

并在配置文件输入以下内容:

[ req ]
distinguished_name = req_distinguished_name
x509_extensions = root_ca

[ req_distinguished_name ]

# 配置证书信息
countryName = CN (2 letter code)
countryName_min = 2
countryName_max = 2
stateOrProvinceName = SiChuan
localityName = ChengDu
0.organizationName = Mycompany
organizationalUnitName = technology
commonName = develop
commonName_max = 64
emailAddress = xxxxxxxx@gmail.com
emailAddress_max = 64

[ root_ca ]
basicConstraints = critical, CA:true



3、继续创建文件:touch MyCompanyLocalhost.ext

并在文件中输入以下内容:

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]

# 域名,如有多个用DNS.2,DNS.3…来增加

DNS.2=你的域名

# IP地址
IP.1 = 你的ip

4、保存以上2个文件,然后输入以下脚本:

openssl req -x509 -newkey rsa:2048 -out MyCompanyCA.cer -outform PEM -keyout MyCompanyCA.pvk -days 10000 -verbose -config MyCompanyCA.cnf -nodes -sha256 -subj “/CN=company name CA”
openssl req -newkey rsa:2048 -keyout MyCompanyLocalhost.pvk -out MyCompanyLocalhost.req -subj /CN=115.29.139.81 -sha256 -nodes
openssl x509 -req -CA MyCompanyCA.cer -CAkey MyCompanyCA.pvk -in MyCompanyLocalhost.req -out MyCompanyLocalhost.cer -days 10000 -extfile MyCompanyLocalhost.ext -sha256 -set_serial 0x1111

在这里插入图片描述

 #后端访问地址
   upstream music{
   #ip_hash;
       server 192.168.66.129:8000 weight=1 max_fails=2 fail_timeout=30s;
   }

   server{
        listen       8080 ssl;
        server_name  192.168.66.129;
        root        /usr/local/wangbo/social_art_level_exam/frontend/build;
        ssl_certificate         /usr/local/nginx/ssl/MyCompanyLocalhost.cer;    #加载ssl证书
        ssl_certificate_key     /usr/local/nginx/ssl/MyCompanyLocalhost.pvk; #加载ssl证书

         location /music/ {
                 proxy_pass https://192.168.66.129:9090;
                 add_header Access-Control-Allow-Methods *;
                 add_header Access-Control-Max-Age 3600;
                 add_header Access-Control-Allow-Credentials true;
                 add_header Access-Control-Allow-Origin $http_origin;
                 add_header Access-Control-Allow-Headers $http_access_control_request_headers;

            if ($request_method = OPTIONS ) {
                return 200;
            }
          proxy_redirect default;
         }
    }
    server {
       listen 9090 ssl;
       server_name 192.168.66.129;
        ssl_certificate         /usr/local/nginx/ssl/MyCompanyLocalhost.cer;
       ssl_certificate_key     /usr/local/nginx/ssl/MyCompanyLocalhost.pvk;
        location / {
            if ($request_method = 'OPTIONS') {
                 add_header Access-Control-Allow-Origin *;
                 add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
                 return 200;
          }
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header Host 192.168.66.129;
            proxy_set_header X-Protocol https;
            proxy_http_version 1.1;
            proxy_buffering off;
            proxy_ssl_server_name on;
            proxy_pass  http://music;
            expires    -1;
        }
   }

重点:

  1. 首先需要给nginx安装ssl模块,具体自行百度
  2. 前台是静态页面。后台是启动了服务端口号是8000,让nginx开放2个端口,其中8080去监听前段做一个页面访问,9090监听后端api,目的是为了通过ssl,用https访问
    在这里插入图片描述
    在这里插入图片描述
    项目我再用前后端分离,nginx做反向代理访问,
    启动nginx,会监听8080端口,然后回去访问root 对应目录下的静态页面,页面中存在一个总路由/music ,在这里插入图片描述
    意思就是所有以/music后面访问的路径都被拦截到,将请求代理到192.168.66.129:9090,nginx监听到了9090端口,代理到8000后台api从而完成https访问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值