Nginx配置HTTPS/HTTP全流程精解,从备案到上线全过程,提供完整解决思路

Nginx配置HTTPS/HTTP全流程指南

云上建站终极攻略:域名注册+双协议部署+备案全流程详解

1.前提准备

首先准备好网站的代码,在华为云上租一个服务器,把代码先拷贝到服务器上,记录下项目的路径。

2.配置vscode ssh,方便开发(可跳过)

华为云上远程登录远程 Linux,检查 SSH 服务状态:

sudo systemctl status sshd

若未安装,安装 openssh-server

sudo apt install openssh-server  # Debian/Ubuntu
sudo yum install openssh-server # CentOS/RHEL

在本地生成​​,用cmd生成SSH 密钥认证:

ssh-keygen -t rsa

然后用sftp将秘钥文件传输到到远程服务器的 ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys  # 设置安全权限

在服务器上

sudo nano /etc/ssh/sshd_config

确保config中的这两项策略正确

PermitRootLogin yes   # 允许 root 登录
PasswordAuthentication yes  # 启用密码验证

接着重启一下ssh服务

sudo systemctl restart sshd

然后打开 vscode 编辑器

  • 按下快捷键打开命令面板:

    • ​Windows/Linux​​:Ctrl+Shift+P

    • ​macOS​​:Cmd+Shift+P

  • 输入命令:

  • Remote-SSH: Connect to Host...
  • 选择 + Add New SSH Host...

  • 在config中配置你服务器的ip

  • Host 192.168.1.100  # 服务器IP/别名
      HostName 192.168.1.100
      User root

    这一步就完成了,连接后可以直接通过vscode访问服务器中的文件。

3.在腾讯云或者服务运营商(华为云关闭了domain购买服务)购买自己的域名

在哪个运营商购买所有的步骤和思路都差不多,但是在哪买的就要在哪里配置dns解析,不然解析不了!

填写好资料购买,需要一定时间审核,成功后进行下一步

4.ICP备案

在备案界面输入自己的域名等信息,上传资料提交审核就可以了,这一步也比较简单。

5.申请SSL证书

控制台中搜索ssl,选择云证书管理服务,选择购买证书

证书类型自行选择,单域名可以选择免费的DV证书DigiCert测试证书(三个月有效期)

此时根据提示可以得到,主机记录,记录类型,记录值,这三个要记录下来。然后在控制台搜索dns。

添加创建自己的公网域名,然后点击管理解析,创建新的记录集,复制刚刚记录的主机记录,记录类型,记录值按照要求填写进去,注意有些运营商记录值要求加上双引号"..."。手动添加dns解析记录后回到ssl证书那里点击验证,一般就验证成功了。

6.绑定公网ip和域名

回到dns解析添加记录值界面,如果已经购买有公网ip,此时添加一条记录值,记录类型为A(ipv4),主机记录与之前相同,记录值为你的公网ip,添加成功后你的公网ip就和域名绑定起来了。

7.下载部署ssl证书密钥

ssl证书验证成功后可以点击下载,下载专门的密钥,本文因为是用nginx,所以是下载的nginx的密钥和证书,把密钥下载到本地环境后通过sftp上传到服务器

sudo mkdir -p /etc/ssl/certs # 存放证书

sudo mkdir -p /etc/ssl/private # 存放私钥

sudo cp your_domain.crt /etc/ssl/certs/    # 复制证书 

sudo cp your_domain.key /etc/ssl/private/  # 复制私钥

8.配置nginx

创建目录

sudo vi /etc/nginx/conf.d/yourdomain.conf

编辑内容主要是配置443端口https

server {
    listen 80;
    server_name yourdomain;
    return 301 https:/yourdomain$request_uri;
}

# HTTPS 主配置
server {
    listen 443 ssl http2;
    server_name yourdomain;

    ssl_certificate     /etc/ssl/certs/fullchain.pem;      # 证书路径
    ssl_certificate_key /etc/ssl/private/your_domain.key;  # 私钥路径

    # 安全协议配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # 会话设置
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    # 安全头
    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # 添加CORS支持
    add_header 'Access-Control-Allow-Origin' 'https://www.innoevsic.com' always;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Private-Network' 'true' always; # 针对Edge的特殊需要

    # 网站根目录需要配置自己的
    root /idea/idea;
    index index.html index.htm;

    # 主位置块
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 静态资源缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
        add_header Cache-Control "public, no-transform";
    }

  
    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # 错误页面
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }
}

# 重定向裸域名到 www
server {
    listen 443 ssl http2;
    server_name innoevsic.com;

    ssl_certificate /etc/nginx/ssl/www.innoevsic.com/yourdomain.crt;
    ssl_certificate_key /etc/nginx/ssl/www.innoevsic.com/yourdomain.key;

    return 301 https://yourdomain$request_uri;
}

重载nginx使配置生效

sudo nginx -t   # 测试配置语法
sudo systemctl reload nginx

PS如果有后端,也需要在后端配置相应的ssl密钥和证书

.js后端配置示例:

// SSL 证书配置

const privateKey = fs.readFileSync('/etc/nginx/ssl//yourdomain.com/yourdomain.key', 'utf8');

const certificate = fs.readFileSync('/etc/nginx/ssl/yourdomain//yourdomain_bundle.crt', 'utf8');

const credentials = { key: privateKey, cert: certificate };

9.通过域名访问网站测试

此时在浏览器输入你的域名应该就可以打开网站了,如果打不开可以看一下服务器的443端口是否开放,具体操作是在服务器中找到安全组,配置规则,开放0.0.0.0(可以控制只开放自己本地的ip测试一下访问)到443端口号。

10.网安备案

登录全国互联网安全管理平台,注册自己的身份信息,提交就可以了,一般会打电话通知的。最后记得把icp备案号和网安备案号加上在页脚的位置。

11.只配置http的思路

那就不需要申请ssl证书和配置ssl密钥,跳过步骤五直接进行步骤六,然后在nginx中只配置80端口的内容指向项目路径和index,服务器开放80端口号访问。

nginx配置:

server {
    listen 80;                        # HTTP默认端口
    server_name your_domain.com www.your_domain.com;  # 你的域名

    root /var/www/your_domain;         # 网站文件根目录
    index index.html index.htm;        # 默认索引文件

    # 基本的日志配置
    access_log /var/log/nginx/your_domain.access.log;
    error_log /var/log/nginx/your_domain.error.log;

    location / {
        try_files $uri $uri/ =404;     # 标准处理规则
    }

    # 可选的robots.txt处理
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
}

12.从http升级到https思路

从第五步开始申请一个新的ssl证书,完成域名验证,把证书下载下来上传到服务器指定位置,编辑nginx的配置文件加入https的配置,把80端口http也重定向到https,同时在后端也加入ssl证书相关配置。

重载一下nginx配置就可以了。

sudo nginx -t   # 测试配置语法
sudo systemctl reload nginx

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ni扣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值