引言

这几天公司的项目要上线,小猿对nginx了解还是不够熟悉,为了保证公司项目上限,小猿疯狂的恶补相关知识,然而听君一席话,胜读十年书,小猿对小猿知无不言的老前辈表示衷心的感谢,下面小猿就不感慨了,直接进入今天的正题。
先说办理这件事情也是及其费劲,因为老板当初采购服务器,安全组件以及服务器的时候就是委托商务中的人去办理这些事情,结果导致跨了好多家平台,操作过程极不方便,下面就开始总结小猿的整个ssl证书的安装过程。

什么是ssl证书

首先要谈一谈为什么要装ssl证书。ssl证书是数字证书的一种,它通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议,ssl是由Netscape Communication公司设计开发。该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。

https 和ssl证书

ssl证书为HTTP网站提供转向HTTPS,加密应用层数据提供保障,ssl证书需要从提前准备。如果想用https的方式进行网站访问,就必须安装类似于ssl的相关证书。

https 通讯过程

下面先放一张图片,该图片能生动的解释https的通讯机理。


从上图可以看出如果想保证整个http中实现安全可靠传输,就需要用道https (Hypertext Transfer Protocol Secure),如果上述已经详细的描述了整个https协议的传输过程:

  1. 浏览器从服务器获取证书,证书中包含了公钥。
  2. 浏览器解析公钥,合法后使用公钥生成key,不合法就报警。
  3. 使用公钥对key进行加密,然后传输到服务器上去。
  4. 服务器使用私钥对传输的数据解密,并获取到key。
  5. 服务器获得key后对数据内容进行加密。
  6. 浏览器端之前生成的key来解密数据,这样就实现了整个传输过程安全且稳定。
    图片素材是小猿从网上扒取,如有侵犯请及时在播客下面留言。

ssl证书获取及安装

通常,ssl证书颁发之前必须先申请域名并备案,完成前面的工作后,就可在华为云或者其他运营商处购买相关证书,证书卖完后就可下载,当然证书获取的方式多种多样,也有免费的证书可以申请,就看实际需求。

ssl证书下载

这次由于是用的华为云的安装组件,直接下载

下载后有若干个版本的证书,只需要选择nginx版本的。

ssl安装模式的选择

小猿的项目结构在典型传统项目部署实战文章中阐述的很清楚,小猿在此就不做过多的解释,当下面对小猿的项目结构有以下几种ssl安装模式可以供小猿参考:

  1. 代理和web容器之间采用加密传输

  2. 浏览器和代理之间采用加密传输


3. 代理和web容器之间、 浏览器和代理之间均采用加密传输

第一种不太可取,因为浏览器和代理服务器之间的通讯信息安全问题频繁发生的高发区,俗话说,拒敌于千里之外就是说的这个道理。
第三种方式的话比较复杂,配置比较麻烦,如果没有对安全有苛刻要求的应用场景,可以选择第三种,且每次加密解密操作可能会有一定的性能损耗,所以要综合考虑。
综合来看,第二种是最为合理的安全传输方式,围绕第二种模式,小猿开始展开以下工作。

证书上传

将下载好的证书上传至nginx服务器,若没有ssl证书放置文件夹,先建立ssl证书放置文件夹。

mkdir  /usr/local/nginx/cert

上传文件

rz

测试ssl证书

先直接配置主页面代理服务器上,看nginx是否接配置成功

   server {listen    80;server_name  xxx.com www.xxx.com;rewrite ^(.*)$ https://$host$1 permanent;}server {#listen       80;listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。server_name  xxx.com www.xxx.com;ssl_certificate   cert/server.crt; #替换成您的证书文件的路径。ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;  #加密套件。ssl_prefer_server_ciphers  on;#server_name  xxx.com www.xxx.com;if ( $host = 'xxx.com'){rewrite ^(.*)$ https://www.xxx.com$1 permanent;}#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   /mnt/sdc/apps/wlhy-platform/wlhy-site/;index  index.html index.htm;}location ~ /xxx-js/ {root   /mnt/sdc/apps/;#autoindex on;       }}

验证证书

需要输入下面的命令来验证准确性

./sbin/nginx  -t


证书测试完毕,没有任何问题

配置全部的代理服务器

由于项目结构,需要http和https同时运行,故需要在项目中配置http和https同时运作,具体的项目配置见下面配置

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
error_log /dev/null;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;access_log off;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;client_max_body_size 100m;client_header_buffer_size 512k;   large_client_header_buffers 4 512k; underscores_in_headers on;gzip  on;proxy_hide_header X-Powered-By;proxy_hide_header Server;server_tokens off;upstream tomcat71 {server 127.0.0.1:18081;}upstream tomcat72 {server 127.0.0.1:18082;}upstream tomcat73 {server 127.0.0.1:18083;}server {listen    80;server_name  xxx.com www.xxx.com;rewrite ^(.*)$ https://$host$1 permanent; }server {#listen       80;listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。server_name  xxx.com www.xxx.com;ssl_certificate      cert/server.crt; #替换成您的证书文件的路径。ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;  #加密套件。ssl_prefer_server_ciphers  on;#server_name  xxx.com www.xxx.com;if ( $host = 'xxx.com'){rewrite ^(.*)$ https://www.xxx.com$1 permanent;}#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   /mnt/sdc/apps/wlhy-platform/wlhy-site/;index  index.html index.htm;}location ~ /vvise-js/ {            root   /mnt/sdc/apps/;            #autoindex on;       }}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}server {listen       80;server_name  pt.xxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;# rewrite ^(.*)$ https://$host$1 permanent;add_header backendIP $upstream_addr;add_header backendCode $upstream_status;location / {root   html;index  index.html index.htm;proxy_pass http://tomcat71;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';client_max_body_size 100m;client_body_buffer_size 128k;client_body_in_file_only clean;proxy_read_timeout 600;proxy_send_timeout 600;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}        }server {listen       80;server_name  fh.xxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;# rewrite ^(.*)$ https://$host$1 permanent;add_header backendIP $upstream_addr;add_header backendCode $upstream_status;location / {root   html;index  index.html index.htm;proxy_pass http://tomcat72;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';     client_max_body_size 100m;client_body_buffer_size 128k;client_body_in_file_only clean;proxy_read_timeout 600;proxy_send_timeout 600;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}        }server {listen       80;server_name  cy.xxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;#rewrite ^(.*)$ https://$host$1 permanent;add_header backendIP $upstream_addr;add_header backendCode $upstream_status;location / {root   html;index  index.html index.htm;proxy_pass http://tomcat73;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';  client_max_body_size 100m;client_body_buffer_size 128k;client_body_in_file_only clean;proxy_read_timeout 600;proxy_send_timeout 600;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}        }server {#listen       80;listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。server_name  pt.xxx.com;ssl_certificate   cert/server.crt; #替换成您的证书文件的路径。ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;  #加密套件。ssl_prefer_server_ciphers  on;#server_name  xxx.com www.xxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;add_header backendIP $upstream_addr;add_header backendCode $upstream_status;location / {root   html;index  index.html index.htm;proxy_pass http://tomcat71;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';client_max_body_size 100m;client_body_buffer_size 128k;client_body_in_file_only clean;proxy_read_timeout 600;proxy_send_timeout 600;}}server {#listen       80;listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。server_name  fh.xxx.com;ssl_certificate   cert/server.crt; #替换成您的证书文件的路径。ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;  #加密套件。ssl_prefer_server_ciphers  on;#server_name  xxx.com www.xxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;add_header backendIP $upstream_addr;add_header backendCode $upstream_status;location / {root   html;index  index.html index.htm;proxy_pass  http://tomcat72;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';client_max_body_size 100m;client_body_buffer_size 128k;client_body_in_file_only clean;proxy_read_timeout 600;proxy_send_timeout 600;}}server {#listen       80;listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。server_name  cy.xxx.com;ssl_certificate   cert/server.crt; #替换成您的证书文件的路径。ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;  #加密套件。ssl_prefer_server_ciphers  on;#server_name  xxx.com www.xxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;add_header backendIP $upstream_addr;add_header backendCode $upstream_status;location / {root   html;index  index.html index.htm;proxy_pass  http://tomcat73;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';client_max_body_size 100m;client_body_buffer_size 128k;client_body_in_file_only clean;proxy_read_timeout 600;proxy_send_timeout 600;}}
}

上述过程中xxx代表项目域名的主要部分,具体的需要具体场景具体应用。
nginx相关项目配置完成后,我们需要在项目的js接口中去处理一些地址这些问题,否则项目访问可能会出现各种奇怪的问题。

修改项目js等相关地址接口



经过上述修改,基本上nginx的证书就安装成功了,网站访问一切正常。

nginx代理安装ssl证书相关推荐

  1. 如何在Nginx上 安装SSL证书

    下载证书 申请证书 证书下载 文件格式为: PEM格式的证书文件. PEM格式的证书文件是采用Base64编码的文本文件,您可以根据需要将证书文件修改成其他格式. KEY格式的证书私钥文件. 安装证书 ...

  2. 在Nginx/Tengine服务器上安装SSL证书

    在Nginx/Tengine服务器上安装SSL证书 阿里云SSL证书服务支持下载证书安装到Nginx/Tengine服务器上,本文介绍了证书安装的具体操作. 背景信息 本文档以CentOS 7.Ngi ...

  3. http升级为https全过程(通过nginx安装SSL证书)

    背景: 之前项目都是为集团内部提供服务的,很多接口都是内网访问,网络安全方面考虑不多.但是随着业务发展,可能要对外提供互联网服务了,一些安全方面的因素也要逐步考虑计划. 这次,就从最基本的域名安装SS ...

  4. Nginx配置免费SSL证书

    SSL证书HTTPS优势 购买域名型免费版(DV)SSL证书 安装SSL证书:参考官方文档 nginx中的配置:nginx配置https转发到tomcat server {listen 443;ser ...

  5. 在Jetty服务器上安装SSL证书

    在Jetty服务器上安装SSL证书 阿里云SSL证书服务支持下载证书安装到Jetty服务器,从而使Jetty服务器支持HTTPS安全访问.本文介绍了证书安装的具体操作. Jetty服务器版本确认.建议 ...

  6. 在Apache服务器上安装SSL证书

    在Apache服务器上安装SSL证书 本页目录 前提条件 操作步骤 后续操作 相关文档 阿里云SSL证书服务支持下载证书安装到Apache服务器,从而使Apache服务器支持HTTPS安全访问.本文介 ...

  7. 在IIS服务器上安装SSL证书

    在IIS服务器上安装SSL证书 本页目录 前提条件 操作步骤 相关文档 阿里云SSL证书服务支持下载SSL证书安装到IIS服务器上,从而使IIS服务器支持HTTPS安全访问.本文介绍了证书安装的具体操 ...

  8. phpstudy安装ssl证书_给网站安装免费SSL证书

    突然有一天老板让我给用Flask写的小网站安装SSL证书,虽然之前没弄过但是感觉应该不难. 主要分为以下几个步骤: 购买域名 购买SSL证书 DNS(域名解析) 部署SSL证书 1. 购买域名 因为我 ...

  9. 宝塔Linux面板安装SSL证书

    本文主要讲的宝塔可视化控制面板安装SSL证书,由于考虑长期及产品稳定性,这里用的是商业SSL证书. 推荐SSL证书店铺:首页-Gworg-淘宝网 1.进入宝塔控制面板后台,比如:http://你的服务 ...

  10. 在WDCP控制面板怎么安装SSL证书

    WDCP全称是WDlinux Control Panel,它是一套通过WEB控制和管理服务器的Linux服务器管理系统以及虚拟主机管理系统,旨在易于使用Linux系统做为我们的网站服务器系统.在国内L ...

最新文章

  1. Android-Presentation双屏异显-一看就懂篇
  2. 解決scott 用戶登錄錯誤: invalid username/password;logon denied
  3. JavaScript一步一步:JavaScript 对象和HTML DOM 对象
  4. Windows服务器版本简介
  5. python django设置中文及时区
  6. 图象关于y轴对称是什么意思_数学概念丨“图象”与“图像”是有区别的 ,你知道吗?...
  7. Oracle中索引位图转换的优势
  8. SQL的「悲观锁定」与「乐观锁定」
  9. [洛谷P4720] [模板] 扩展卢卡斯
  10. 利用java反射根据方法名称字符串调用方法
  11. 虫师Selenium2+Python_11、自动化测试项目实战
  12. OpenCV——无法打开“opencv2/opencv.hpp”文件
  13. 2022上海Java工资收入概览
  14. Linux虚拟机远程连接工具
  15. .net课堂流水账_20110116
  16. 黑客帝国之八种超级武器
  17. 九款远程办公软件,打破时空限制
  18. 什么是计算机网络AP,AP与AC的区别是什么,拓扑网络知识。
  19. Android当方法总数超过64K时(Android Studio)
  20. matlab2021安装教程

热门文章

  1. 0/0型极限等于多少_两个重要极限的一点理解(下)
  2. html embed自动播放,HTML-embed标签
  3. embed实现PDF文件预览
  4. 如何用计算机设置热点,电脑技巧:怎么用电脑设置wifi热点
  5. 安装Centos8设置基础软件仓库时出错
  6. dategurd oracle_Oracle Data Guard
  7. html 学习笔记(9)
  8. java学习第114天,p699-706(05/12),完成QQ群发
  9. Gif动图如何裁剪?收下这个图片在线裁剪工具
  10. [OpenCV实战]23 使用OpenCV获取高动态范围成像HDR