美文网首页
nginx 实现域名 + https 协议访问(虚拟机+阿里云L

nginx 实现域名 + https 协议访问(虚拟机+阿里云L

作者: 暴躁程序员 | 来源:发表于2023-12-14 14:05 被阅读0次

    一、实现域名 + https 协议访问(虚拟机模拟linux服务器)

    1. 准备虚拟机和测试域名

    注意:在测试环境中可以使用虚拟机或者本地电脑生成测试证书,在生产环境中必须要在 https 证书厂商注册

    准备虚拟机:192.168.76.100
    准备测试域名:www.bbb.com
    

    2. 在服务器生成证书和秘钥文件

    cd /usr/local/nginx/conf
    mkdir ssl
    cd ssl
    openssl genrsa -out bbb.key 2048
    openssl req -new -key bbb.key -out bbb.csr
    openssl x509 -req -days 365 -sha256 -in bbb.csr -signkey bbb.key -out bbb.crt
    

    3. 修改 nginx.conf 配置文件

    为测试域名配置 https 证书:监听 443 端口,指定证书和密钥的路径,使用 http 协议访问自动重写成 https 协议

    vim /usr/local/nginx/conf/nginx.conf
    
    server {
            listen       443 ssl;
            server_name  www.bbb.com;
            location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
    
                root   html/bbb; #网页根目录(/usr/local/nginx/html/bbb/)
                index  index.html index.htm; 
            }
    
            ssl_certificate /usr/local/nginx/conf/ssl/bbb.crt;
            ssl_certificate_key /usr/local/nginx/conf/ssl/bbb.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            ssl_ciphers
            "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    }
    
    server{
            listen 80;
            server_name www.bbb.com;
            rewrite ^(.*)$ https://www.bbb.com permanent; # http重写成https
            root   html/bbb; #网页根目录(/usr/local/nginx/html/bbb/)
            index  index.html index.htm; 
    }
    
    

    4. 重新加载配置文件

    /usr/local/nginx/sbin/nginx –s reload 
    

    5. 客户端测试

    1. 打开 C:\Windows\System32\drivers\etc\hosts 配置本地域名解析
    192.168.76.100 www.bbb.com
    
    1. 更新本地DNS数据库,使用cmd终端,输入
    ipconfig/flushdns
    
    1. 在客户端浏览器访问
      注意清空浏览器缓存
    http://www.bbb.com
    https://www.bbb.com
    

    6. 如果不生效

    1. 查看 nginx 错误日志
    发现:[emerg] 1339#0: the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:47
    

    错误原因是:Nginx 未开启 SSL 模块

    more /usr/local/nginx/logs/error.log
    
    2. 安装 nginx 时,需要将--with-http_ssl_module 模块开启,如果未开启则需要手动开启
    3. 手动开启 --with-http_ssl_module 模块
    1. 进入 nginx 源码包
    cd /usr/local/nginx/nginx-1.22.0
    
    1. 编译(注意:这里不要进行make install,否则就是覆盖安装)
    ./configure --with-http_stub_status_module --with-http_ssl_module && make
    
    1. 暂停 nginx 服务,将刚生成的配置覆盖原来的配置,并重启 nginx
    /usr/local/nginx/sbin/nginx -s stop
    
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    cp ./objs/nginx /usr/local/nginx/sbin/
    
    /usr/local/nginx/sbin/nginx
    
    4. 在客户端浏览器访问测试

    注意清空浏览器缓存

    http://www.bbb.com
    https://www.bbb.com
    

    二、 实现域名 + https 协议访问(阿里云购买真实域名 和 https证书)

    1. 购买域名、域名备案、域名解析

    1. 购买域名
    点击控制台 --> 域名 --> 点击域名交易 --> 可进行后缀和价格限制 -->选中要购买的域名支付即可,比如:greenp.com 
    
    1. 域名备案
    点击备案 --> 按照流程进行域名备案(阿里审核 1 ~ 3 天)(管理局审核需要13 ~ 20天) 
    
    1. 域名解析
    点击控制台 --> 域名 --> 域名列表,选中指定域名 --> 点击解析,将域名解析到指定到服务器的外网 ip 地址
    

    2. 购买 https 免费证书

    1. 依赖当前域名,购买 https 免费证书
    搜索里输入:SSL证书 --> 点击管理控制台 --> 点击 SSL 证书
    --> 点击免费证书 -->创建证书,域名填写:www.greenp.com
    --> 勾选快捷签发 --> 完善信息等待审核,签发证书(大概等待 10 分钟,有短信提示)
    
    1. 下载购买的证书
    点击下载 --> 可选择不同环境 nginx 或者 apache --> 点击帮助:可查看不同环境下的配置操作
    点击下载 --> 下载 nginx 版本的 https 证书包
    
    1. 解压下载的证书文件并全部上传到服务器的 /usr/local/nginx/conf/ssl 目录下(nginx 源码包)
      解压证书文件如下:
    www.greenp.com.key
    www.greenp.com.pem
    

    3. 在服务器中配置 https 证书:监听 443 端口,指定证书和密钥的路径,使用 http 协议访问自动重写成 https 协议

    1. 将证书文件拷贝到 /usr/local/nginx/conf/ssl 目录下
    2. 编辑 nginx 配置文件
    vim /usr/local/nginx/conf/nginx.conf
    
    server {
            listen       443 ssl;
            server_name  www.greenp.com;
            location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
    
                root   html; #网页根目录(/usr/local/nginx/html)
                index  index.html index.htm; 
            }
    
            ssl_certificate /usr/local/nginx/conf/ssl/9062163_www.greenp.com.pem;
            ssl_certificate_key /usr/local/nginx/conf/ssl/9062163_www.greenp.com.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            ssl_ciphers
            "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    }
    
    server{
            listen 80;
            server_name www.greenp.com;
            rewrite ^(.*)$ https://www.greenp.com permanent; # http重写成https
            root   html; #网页根目录(/usr/local/nginx/html/)
            index  index.html index.htm; 
    }
    
    

    4. 防火墙开放 80 和 443 端口

    1. 查看防火墙端口是否开启
    firewall-cmd --list-ports
    
    1. 开启防火墙 80 和 443 端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent          // 开启 80 端口
    firewall-cmd --zone=public --add-port=443/tcp --permanent         // 开启 443 端口
    firewall-cmd --reload                                             // 更新防火墙规则
    firewall-cmd --list-ports                                         // 查看端口是否开启成功
    

    5. 在阿里云控制台配置80和443安全组

    点击云服务器 ECS --> 点击购买的服务器实例 --> 点击安全组 --> 点击配置规则 --> 配置80和443安全组
    

    6. 在客户端浏览器上测试

    http://www.greenp.com
    https://www.greenp.com
    

    三、注意事项

    1. 以上是 nginx 源码包的配置,使用 nginx rpm包的配置方式类似

    nginx rpm包 html 根目录所在位置                 /usr/share/nginx/html/index.html
    nginx rpm包 nginx.conf 配置文件位置             /etc/nginx/nginx.conf
    
    1. 在 /etc/nginx/ 目录下新建 ssl 目录,将证书上传到 ssl 目录下
    2. 修改 /etc/nginx/nginx.conf 配置文件

    2. 域名解析范围说明

    1. DNS 域名解析的 ip 是本地电脑的虚拟机 ip:在虚拟机所在客户端是可以访问的,但是在互联网上则不行,因为虚拟机不是对外的
    2. DNS 域名解析的 ip 是 WLAN 即 wifi 的 ip:在同一 wifi 下的电脑和手机都可访问,但是在互联网上则不行,因为 wifi 有范围限制
    3. DNS 域名解析的 ip 是真实服务器的 ip:可以在互联网上自由访问,注意配置防火墙的出站端口,即:dns域名解析服务器的外网ip,通过域名可以生成https证书,再在服务器上通过nginx配置域名和https协议
    

    3. 本地解析和互联网解析

    1. 我们可以在本地电脑的hosts文件中配置自定义域名,也可以通过本机电脑生成https证书,但是只是局限在本地电脑上实用
    2. 在阿里云购买域名,配置完域名解析ip,再购买免费的https证书指定到购买的域名,这样既可以在本地电脑也可在互联网上使用
    

    4. 清理浏览器缓存

    客户端浏览器测试时注意,如果之前配置失败并用浏览器测试过,之后重新配置并在浏览器上测试发现无效且找不到问题的原因,
    可以尝试清理浏览器缓存试一下
    

    相关文章

      网友评论

          本文标题:nginx 实现域名 + https 协议访问(虚拟机+阿里云L

          本文链接:https://www.haomeiwen.com/subject/pbtwgdtx.html