Nginx如何支持HTTPS?手把手教会你每一步 *** 作都贼简单,kafka和rabbitmq区别面试题

Nginx如何支持HTTPS?手把手教会你每一步 *** 作都贼简单,kafka和rabbitmq区别面试题,第1张

Nginx如何支持HTTPS?手把手教会你每一步 *** 作都贼简单,kafka和rabbitmq区别面试题

随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!

生成SSL自签名证书


虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的!

  • 首先创建SSL证书私钥,期间需要输入两次用户名和密码,生成文件为blog.key;

openssl genrsa -des3 -out blog.key 2048

  • 利用私钥生成一个不需要输入密码的密钥文件,生成文件为blog_nopass.key;

openssl rsa

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

-in blog.key -out blog_nopass.key

  • 创建SSL证书签名请求文件,生成SSL证书时需要使用到,生成文件为blog.csr;

openssl req -new -key blog.key -out blog.csr

  • 在生成过程中,我们需要输入一些信息,需要注意的是Common Name需要和网站域名一致;

Enter pass phrase for blog.key:


Country Name (2 letter code) [XX]:CN # 国家代码

State or Province Name (full name) []:jiangsu # 省份

Locality Name (eg, city) [Default City]:jiangsu # 城市

Organization Name (eg, company) [Default Company Ltd]:macrozheng # 机构名称

Organizational Unit Name (eg, section) []:dev # 单位名称

Common Name (eg, your name or your server’s hostname) []:blog.macrozheng.com # 网站域名

Email Address []:[email protected] # 邮箱

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []: # 私钥保护密码,可以不输入直接回车

An optional company name []: # 可选公司名称,可以不输入直接回车

  • 生成SSL证书,有效期为365天,生成文件为blog.crt;

openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt

  • 其实最终有用的文件是两个,一个是证书文件blog.crt,另一个是不需要输入密码的证书私钥文件blog_nopass.key。

Nginx支持HTTPS


SSL证书生成好了,接下来我们就可以配置Nginx来支持HTTPS了!

安装Nginx
  • 我们还是使用在Docker容器中安装Nginx的方式,先下载Nginx的Docker镜像;

docker pull nginx:1.10

  • 下载完成后先运行一次Nginx,由于之后我们要把宿主机的Nginx配置文件映射到Docker容器中去,运行一次方便我们拷贝默认配置;

docker run -p 80:80 --name nginx

-v /mydata/nginx/html:/usr/share/nginx/html

-v /mydata/nginx/logs:/var/log/nginx

-d nginx:1.10

  • 运行成功后将容器中的Nginx配置目录拷贝到宿主机上去;

docker container cp nginx:/etc/nginx /mydata/nginx/

  • 将宿主机上的nginx目录改名为conf,要不然/mydata/nginx/nginx这个配置文件目录看着有点别扭;

mv /mydata/nginx/nginx /mydata/nginx/conf

  • 创建的Nginx容器复制完配置后就没用了,停止并删除容器;

docker stop nginx

docker rm nginx

  • 使用Docker命令重新启动Nginx服务,需要映射好配置文件,由于我们要支持HTTPS,还需要开放443端口。

docker run -p 80:80 -p 443:443 --name nginx

-v /mydata/nginx/html:/usr/share/nginx/html

-v /mydata/nginx/logs:/var/log/nginx

-v /mydata/nginx/conf:/etc/nginx

-d nginx:1.10

配置支持HTTPS
  • 将我们生成好的SSL证书和私钥拷贝到Nginx的html/ssl目录下;

cp blog_nopass.key /mydata/nginx/html/ssl/

cp blog.crt /mydata/nginx/html/ssl/

  • 接下来我们需要给blog.macrozheng.com这个域名添加HTTPS支持,在/mydata/nginx/conf/conf.d/目录下添加Nginx配置文件blog.conf,配置文件内容如下;

server {

listen 80; # 同时支持HTTP

listen 443 ssl; # 添加HTTPS支持

server_name blog.macrozheng.com;

#SSL配置

ssl_certificate /usr/share/nginx/html/ssl/blog/blog.crt; # 配置证书

ssl_certificate_key /usr/share/nginx/html/ssl/blog/blog_nopass.key; # 配置证书私钥

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置SSL加密算法

ssl_prefer_server_ciphers on; # 优先采取服务器算法

ssl_session_cache shared:SSL:10m; # 配置共享会话缓存大小

ssl_session_timeout 10m; # 配置会话超时时间

location / {

root /usr/share/nginx/html/www;

index index.html index.htm;

}

location /admin {

alias /usr/share/nginx/html/admin;

index index.html index.htm;

}

location /app {

alias /usr/share/nginx/html/app;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

}

  • 通过HTTPS访问blog.macrozheng.com这个域名,由于我们使用的是自己签名的SSL证书,浏览器会提示您的连接不是私密连接,点击继续前往可以通过HTTPS正常访问;

  • 我们可以查看下证书的颁发者信息,可以发现正好是之前我们创建SSL证书签名请求文件时录入的信息;

  • 接下来我们需要给api.macrozheng.com这个域名添加HTTPS支持,通过这个域名可以使用HTTPS访问我们的SpringBoot应用,api.crt和api_nopass.key文件需要自行生成,在/mydata/nginx/conf/conf.d/目录下添加Nginx配置文件api.conf,配置文件内容如下;

server {

listen 80; # 同时支持HTTP

listen 443 ssl; # 添加HTTPS支持

server_name api.macrozheng.com; #修改域名

#ssl配置

ssl_certificate /usr/share/nginx/html/ssl/api/api.crt; # 配置证书

ssl_certificate_key /usr/share/nginx/html/ssl/api/api_nopass.key; # 配置证书私钥

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本 # 配置SSL加密算法

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

ssl_prefer_server_ciphers on; # 优先采取服务器算法

ssl_session_cache shared:SSL:10m; # 配置共享会话缓存大小

ssl_session_timeout 10m; # 配置会话超时时间

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5676819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存