Nginx 服务器 SSL 证书安装部署 实现HTTPS+域名 的形式访问nginx服务器

情况:

  1. 在阿里云有1个域名。
  2. 腾讯云有1个云服务器及IP地址。
  3. 云服务器上已经安装了Nginx服务器,通过IP已经可以实现HTTP访问服务器。

说明:域名解析到IP,通过IP或域名都可以实现HTTP访问。

目的:现在需要把HTTP改为HTTPS访问,改为HTTPS+域名的形式访问Nginx服务器

 

第一步:需要在云服务器上在安装SSL证书。

参考文档:https://cloud.tencent.com/document/product/400/35244

证书云平台上有免费的1年有效期,1年后重新申请一遍。

通过云平台申请,签发证书,大概半小时签发成功,然后把证书下载到本地。

 

证书下载好,解压,里面有效的是.crt和.key或.pem和.key这两个文件,,都可以,选一组即可。

接下来在Nginx服务器下安装SSL证书。

前提条件

  • 已准备文件远程拷贝软件,例如 WinSCP(建议从官方网站获取最新版本)。本人用的是FileZilla Client
  • 已准备远程登录工具,例如 PuTTY 或者 Xshell(建议从官方网站获取最新版本)。本人用的是XShell 7
  • 已在当前服务器中安装配置 Nginx 服务。
  • 安装 SSL 证书前需准备的数据如下:

     

    名称说明
    服务器的 IP 地址 服务器的 IP 地址,用于 PC 连接到服务器。
    用户名 登录服务器的用户名。
    密码 登录服务器的密码。

操作步骤

证书安装

  1. 请在 SSL 证书管理控制台 中选择您需要安装的证书并单击下载。
  2. 在弹出的 “证书下载” 窗口中,服务器类型选择 Nginx,单击下载并解压缩 cloud.tencent.com 证书文件包到本地目录。
    解压缩后,可获得相关类型的证书文件。其中包含 cloud.tencent.com_nginx 文件夹:
    • 文件夹名称:cloud.tencent.com_nginx
    • 文件夹内容:
      • cloud.tencent.com_bundle.crt 证书文件(或称作安全文件)
      • cloud.tencent.com_bundle.pem 证书文件
      • cloud.tencent.com.key 私钥文件
      • cloud.tencent.com.csr CSR 文件
说明:
 

CSR 文件是申请证书时由您上传或系统在线生成的,提供给 CA 机构。安装时可忽略该文件。

可以将.crt\.pem\.key文件都拷贝到指定服务器目录,nginx.conf中可以只配置一组即可,如.crt和.key一组,或.使用pem和.key一组。

    1. 使用 “WinSCP”(即本地与远程计算机间的复制文件工具)登录 Nginx 服务器。
    2. 将已获取到的 cloud.tencent.com_bundle.crt 证书文件和 cloud.tencent.com.key 私钥文件从本地目录拷贝到 Nginx 服务器的 /usr/local/nginx/conf 目录(此处为 Nginx 默认安装目录,请根据实际情况操作)下。———>如果放在/usr/local/nginx/conf这个默认目录下下,nginx.conf可以不用写明路径,也可以写明路径。放在其它目录下则必须要写明文件路径。
    3. 远程登录 Nginx 服务器。例如,使用 “PuTTY” 工具 登录。
    4. 编辑 Nginx 根目录下的 conf/nginx.conf 文件。修改内容如下:
    5. 说明:
      • 如找不到以下内容,可以手动添加。
      • 此操作可通过执行 vim /usr/local/nginx/conf/nginx.conf 命令行编辑该文件。
      • 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443 和 ssl on
把HTTP的server全部注释掉。

下面编辑的是nginx.conf中的HTTPS server

#user nobody;

worker_processes 1;

 

events { worker_connections 1024;}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

#gzip on;

#编辑HTTPS server时把HTTP server全部注释掉。

#// server {

#// listen 80;

#// server_name xxx.com;

#// root /usr/download/;

 

#// location /{

#// autoindex on;

#// autoindex_localtime on;

#// autoindex_exact_size off;

#//}

#// error_page 500 502 503 504 /50x.html;

#// location = /50x.html {

#// root html;

#// }

 

# location / {

# root html;

# index index.html index.htm;

# }

#}

 

# HTTPS server

server {

listen 443 ssl;

server_name XXX.com;

root /usr/download/;

#让该目录下的文件自动显示出来

location / {

autoindex on;

autoindex_localtime on;

autoindex_exact_size off; }

}

 

ssl_certificate 下载的pem文件名.pem;  //放在默认目录/usr/local/nginx/conf下可不写明详细目录,否则要写清文件所在目录。如/usr/XXX/XXX/aaa.pem

ssl_certificate_key 下载的key文件名.key; //放在默认目录/usr/local/nginx/conf下可不写明详细目录。

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3;

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

ssl_prefer_server_ciphers on;

 

#将HTTP访问都重定向到HTTPS访问

server{

listen 80;

server_name XXX.com;

#将请求转成

https rewrite ^/(.*)$ https://$host$1 permanent;

}

}

  1. 在 Nginx 根目录下,通过执行以下命令验证配置文件问题。
    ./sbin/nginx -t
    • 若存在,请您重新配置或者根据提示修改存在问题。
    • 若不存在,请执行 步骤8
  2. 重启 Nginx。

遇到问题:

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:104

解决参考网址:https://www.daozhao.com/8285.html

步骤:

1.切换到nginx源码包位置

cd  /usr/local/nginx/nginx-1.19.10    我的nginx-1.19.10位置

2.查看nginx原有的模块

/usr/local/nginx/sbin/nginx -V

3.那么我们的新配置信息就应该这样写 (在原有基础上增加 --with-http_ssl_modul):

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

4.运行上面的命令即可,等配置完 配置完成后,运行命令 make这里不要进行make install,否则就是覆盖安装 然后备份原有已安装好的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

5.然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)
停止nginx服务:
killall nginx
覆盖原有nginx:
cp ./objs/nginx /usr/local/nginx/sbin/

6.然后启动nginx

cd /usr/local/nginx/sbin

./nginx -s reload

./nginx

通过命令查看是否已经加入成功
/usr/local/nginx/sbin/nginx -V 

查看包含--with-http_ssl_module

说明SSL安装成功。

TIPS

如果意外出现443端口被占用的情况
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
可以使用sudo fuser -k 443/tcp杀掉占用进程,再启动nginx

HTTP 自动跳转 HTTPS 的安全配置(可选)

如果您需要将 HTTP 请求自动重定向到 HTTPS。您可以通过以下操作设置:

  1. 根据实际需求,选择以下配置方式:
      • 在页面中添加 JS 脚本。
      • 在后端程序中添加重定向。
      • 通过 Web 服务器实现跳转。
      • Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,您可在 HTTP 的 server 中增加 
        https rewrite ^/(.*)$ https://$host$1 permanent;
        ,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:
      • 说明:
        • 未添加注释的配置语句,您按照下述配置即可。
        • 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443 和 ssl on
     
    server {
        listen 80;
        #填写绑定证书的域名
        server_name XXX.com; 
        #把http的域名请求转成https
        https rewrite ^/(.*)$ https://$host$1 permanent;
    
    
  2. 若修改完成,重启 Nginx。

问题解决:

SSL证书安装好ssl免费证书已签发域名已解析到IP,www.xxx.com解析到xxx.com,nginx.conf已配置好安全组端口已放开,发现腾讯云sslpod监控下仍然提示域名未配置证书

 

 

 

 

 

 

然后输入浏览器域名也无法访问到服务器。

证书监控 SSLPod 提示 “连接异常”
https://cloud.tencent.com/document/product/1084/61741#TroubleshootNetwork
Linux防火墙——IPtables配置策略思路
https://baijiahao.baidu.com/s?id=1721666195906523725&wfr=spider&for=pc

SSL连接异常
https://cloud.tencent.com/document/product/1084/61741#TroubleshootNetwork
如何选择 SSL 证书安装部署类型?
https://cloud.tencent.com/document/product/400/4143?from=copy
Nginx 服务器 SSL 证书安装部署
https://cloud.tencent.com/document/product/400/35244

按照官方给出的连接异常逐个排查,然后关闭服务器防火墙后可以顺利访问HTTPS:xxx.com了

 

正常访问截图如下:

 

 这个是放在/usr/download下的几个文件。

 

 

用到的一些命令:

查看端口占用情况

netstat -anon|grep 443

netstat -anon|grep 80

ps -e |grep -ltunp

netstat -ltunp

停止nginx

./nginx -s stop

启动nginx

./nginx

posted @   coolyouguo  阅读(1038)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示