当前位置: 首页 > news >正文

Nginx-HTTPS 配置

目录

一、搞懂http与https

二、购买域名

三、域名解析

​四、申请 SSL 证书

五、把 SSL 证书上传到 nginx

1.下载 nginx 证书

2.上传文件

解决办法:


一、搞懂http与https

        HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。
        HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版本,HTTPS协议是利用SSL+HTTP协议建立安全信道,加密数据包,提供身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别:
• http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
• http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
• 使用https协议需要申请证书,证书有收费和免费的。

现在网站几乎所有都开启了https协议,所以使用https已经是个趋势。

二、购买域名

这次咱们使用阿里的SSL证书和域名,这两个必须得同一家的才行,同理,如果你是华为的则域名和SSL证书都得在华为云上申请购买!

阿里云域名购买网站

三、域名解析

购买域名后,需要对域名进行解析阿里云域名解析

 

 

在cmd ping 一下 www.startsky.top 试试,如果前面填写的是公网ip,则可以直接ping通,否则得在Windows配置本地域名解析,添加服务器ip和域名:

修改 hosts 需要权限:

添加完 ip 和 域名后,再把文件权限修改回来,保证安全!!!

此时在cmd 测试:

四、申请 SSL 证书

申请流程可以查看我的这篇文章用nginx构建高效不限速的个人网盘(File Browser)

五、把 SSL 证书上传到 nginx

1.下载 nginx 证书

解压后得到下面两个文件:

2.上传文件

        将证书上传到/usr/local/nginx/conf/ssl目录下并绑定到我们服务器的nginx配置上即可,在nginx上配置ssl证书,需要在nginx.conf中 http模块 新添加一个 server段,默认的 server 80端口不修改,内容如下:

[root@Euler nginx]# mkdir -p /usr/local/nginx/conf/ssl
[root@Euler nginx]# cd conf/ssl/
[root@Euler ssl]# ls
8132331_startsky.top.key  8132331_startsky.top.pem

[root@Euler ssl]# vim /usr/local/nginx/conf/nginx.conf

server
    {
        listen 443 ssl; # https 默认端口
        server_name www.startsky.top; # 设置的域名
        ssl_certificate ssl/8132331_startsky.top.pem; # 阿里云证书文件
        ssl_certificate_key ssl/8132331_startsky.top.key; # 私钥文件
        ssl_prefer_server_ciphers on; # 以下是加密算法和强度相关
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "HIGH:!aNULL:!MD5";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        add_header X-Xss-Protection 1;
 
# 反向代理
location / {
    proxy_pass http://192.168.78.138:8088;
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

reload一下nginx:

        在360极速浏览器中输入 域名 www.startsky.top访问,会跳转到80端口nginx的默认页面,而不会跳转到443https页面,需要手动加上https才能访问到安全界面,就很麻烦。但谷歌浏览器直接输入 域名会立刻跳转到https安全界面。这就造成一个问题,并不是所有用户都使用谷歌浏览器访问。

解决办法:

方法一:可以把 server 443 ssl 模块放到 最前面,这样访问的时候会先匹配第一个server模块的内容,则会访问 443 端口。

方法二:做一个页面跳转,让http的访问跳转到https的访问,这样就无需调整 server模块顺序。

worker_processes  auto;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;


    sendfile        on;

    keepalive_timeout  65;


# 方法二,页面跳转   
#    server {
#
#	listen 80;
#	server_name www.startsky.top; # 填写自己的域名
#	return 301 https://$server_name$request_uri;
#	}

    server {
        listen       443 ssl;
        server_name www.startsky.top; # 设置的域名
        ssl_certificate ssl/8132331_startsky.top.pem; # 阿里云证书文件
        ssl_certificate_key ssl/8132331_startsky.top.key; # 私钥文件
        ssl_prefer_server_ciphers on; # 以下是加密算法和强度相关
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "HIGH:!aNULL:!MD5";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        add_header X-Xss-Protection 1;

        location / {
	        proxy_pass http://192.168.78.138:9000;     
            proxy_set_header Host $proxy_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	

    }
   
    server {

        listen 80;
        server_name www.startsky.top;
        return 301 https://$server_name$request_uri;
        }

}

直接输入域名访问即可: 

 

相关文章:

  • 2022-09-07 mysql/stonedb-多线程遍历元组问题分析
  • 单调栈题目:找出最具竞争力的子序列
  • Python运算符,数字,字符串
  • JSP教学评估管理系统myeclipse开发mysql数据库bs框架java编程web网页结构
  • 【vue3】04. 跟着官网学习vue3
  • xv6源码阅读——xv6的启动,进程初识
  • 金仓数据库KingbaseES客户端应用参考手册--13. sys_isready
  • 前端工程师面试题总结
  • 从“1L 小钢炮”到 “PC界变形金刚”——Tiny助力企业数智转型的十年进化之路
  • 【数据结构:1.绪论】
  • 计算机组成原理第二章----数据信息的表示 详解版
  • 网络安全-防火墙安全加固
  • 中秋节祝福程序源代码分享:土地分类数据阈值筛选和重投影分类
  • Java新手小白入门篇 API - 多线程
  • Deep Reinforcement Learning with Double Q-learning(double DQN)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [译] 怎样写一个基础的编译器
  • 2017前端实习生面试总结
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • docker python 配置
  • ES6--对象的扩展
  • Javascript 原型链
  • Joomla 2.x, 3.x useful code cheatsheet
  • Material Design
  • Mithril.js 入门介绍
  • React-生命周期杂记
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • vue--为什么data属性必须是一个函数
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 前嗅ForeSpider中数据浏览界面介绍
  • 源码安装memcached和php memcache扩展
  • 正则表达式小结
  • nb
  • 交换综合实验一
  • 选择阿里云数据库HBase版十大理由
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​低代码平台的核心价值与优势
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)SpringBoot3---尚硅谷总结
  • (转)母版页和相对路径
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理出现中文乱码的情况
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 依赖注入和配置系统
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net访问oracle数据库性能问题
  • .NET性能优化(文摘)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @hook扩展分析
  • @开发者,一文搞懂什么是 C# 计时器!