Nginx如何支持HTTPS?手把手教会你每一步操作都贼简单

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.crtapi_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; # 配置会话超时时间

location / {

proxy_pass http://192.168.3.101:8080; # 设置代理服务访问地址

proxy_set_header Host $http_host; # 设置客户端真实的域名(包括端口号)

proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IP

proxy_set_header X-Forwarded-Proto $scheme; # 设置客户端真实的协议(http还是https)

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

}

  • 通过HTTPS访问api.macrozheng.com这个域名,访问地址为:https://api.macrozheng.com/swagger-ui.html

  • 任意调用一个接口测试下,比如说登录接口,可以发现已经可以通过HTTPS正常访问SpringBoot应用提供的接口。

使用受信任的证书


之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,另一种是从FreeSSL申请。

阿里云证书

  • 阿里云上可以申请的免费证书目前只有支持单个域名的DV级SSL证书。比如说你有blog.macrozheng.comapi.macrozheng.com两个二级域名需要使用HTTPS,就需要申请两个SSL证书。

  • 申请成功后点击下载Nginx证书即可;

  • 下载完成后解压会有下面两个文件;
要让Nginx支持HTTPS协议响应,需要进行以下步骤: 1. 确认Nginx已经安装了SSL模块。可以通过查看Nginx的配置参数来确认,如果配置参数中包含了"--with-http_ssl_module",则表示SSL模块已经安装。\[1\] 2. 配置Nginx的虚拟主机,将HTTP请求重定向到HTTPS。可以在Nginx的配置文件中添加如下配置: ``` server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } ``` 这样,当用户访问HTTP的入口时,Nginx会自动将请求重定向到HTTPS。\[2\] 3. 配置SSL证书。为了支持HTTPS,需要在Nginx的配置文件中添加SSL证书的相关配置。具体的配置包括证书文件的路径、私钥文件的路径等。可以参考Nginx的官方文档或者SSL证书提供商的文档来进行配置。 4. 重启Nginx。在完成以上配置后,需要重启Nginx使配置生效。可以使用命令"/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf"来重启Nginx。\[2\] 这样,Nginx就可以支持HTTPS协议响应了。同时,为了兼容HTTP和HTTPS,建议在页面链接中去掉"http://"头部,改为使用相对路径,例如将"http://www.example.com"改为"//www.example.com"。这样无论用户是通过HTTP还是HTTPS访问页面,页面都能正确显示。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Nginx 如何支持HTTPS](https://blog.csdn.net/hanjinjuan/article/details/119741809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值