• 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端口不修改,内容如下:

    1. [root@Euler nginx]# mkdir -p /usr/local/nginx/conf/ssl
    2. [root@Euler nginx]# cd conf/ssl/
    3. [root@Euler ssl]# ls
    4. 8132331_startsky.top.key 8132331_startsky.top.pem
    5. [root@Euler ssl]# vim /usr/local/nginx/conf/nginx.conf
    6. server
    7. {
    8. listen 443 ssl; # https 默认端口
    9. server_name www.startsky.top; # 设置的域名
    10. ssl_certificate ssl/8132331_startsky.top.pem; # 阿里云证书文件
    11. ssl_certificate_key ssl/8132331_startsky.top.key; # 私钥文件
    12. ssl_prefer_server_ciphers on; # 以下是加密算法和强度相关
    13. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    14. ssl_ciphers "HIGH:!aNULL:!MD5";
    15. add_header X-Frame-Options DENY;
    16. add_header X-Content-Type-Options nosniff;
    17. add_header X-Xss-Protection 1;
    18. # 反向代理
    19. location / {
    20. proxy_pass http://192.168.78.138:8088;
    21. proxy_set_header Host $proxy_host;
    22. proxy_set_header X-Real-IP $remote_addr;
    23. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    24. }
    25. }

    reload一下nginx:

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

    解决办法:

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

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

    1. worker_processes auto;
    2. events {
    3. worker_connections 1024;
    4. }
    5. http {
    6. include mime.types;
    7. default_type application/octet-stream;
    8. sendfile on;
    9. keepalive_timeout 65;
    10. # 方法二,页面跳转
    11. # server {
    12. #
    13. # listen 80;
    14. # server_name www.startsky.top; # 填写自己的域名
    15. # return 301 https://$server_name$request_uri;
    16. # }
    17. server {
    18. listen 443 ssl;
    19. server_name www.startsky.top; # 设置的域名
    20. ssl_certificate ssl/8132331_startsky.top.pem; # 阿里云证书文件
    21. ssl_certificate_key ssl/8132331_startsky.top.key; # 私钥文件
    22. ssl_prefer_server_ciphers on; # 以下是加密算法和强度相关
    23. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    24. ssl_ciphers "HIGH:!aNULL:!MD5";
    25. add_header X-Frame-Options DENY;
    26. add_header X-Content-Type-Options nosniff;
    27. add_header X-Xss-Protection 1;
    28. location / {
    29. proxy_pass http://192.168.78.138:9000;
    30. proxy_set_header Host $proxy_host;
    31. proxy_set_header X-Real-IP $remote_addr;
    32. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    33. }
    34. error_page 500 502 503 504 /50x.html;
    35. location = /50x.html {
    36. root html;
    37. }
    38. }
    39. server {
    40. listen 80;
    41. server_name www.startsky.top;
    42. return 301 https://$server_name$request_uri;
    43. }
    44. }

    直接输入域名访问即可: 

     

  • 相关阅读:
    cplex入门系列(二)--- 线性规划求解
    Shell脚本文本三剑客之sed编辑器
    Spring注解驱动之FactoryBean注册组件
    第十一章 枚举和注解
    错误error 和例外Exceptions
    Java、前端、Python 现在应该如何选择,学习哪个更好?
    Leetcode 1425: DP + 单调队列
    Android Material Design之SwitchMaterial(三)
    Java 反射reflect.Array类简介说明
    合宙ESP32C3之Arduino、MicroPython上手
  • 原文地址:https://blog.csdn.net/weixin_46560589/article/details/126640052