NGINX免费配置二级域名及同时开启HTTPS(HTTP强制转HTTPS)nodejs的express后端项目,前端next.js的SSR项目

最近在做web3的创业项目,需要给第三方提供API接口需要配置二级域名:整个过程遇到了一系列问题都一一解决了,记录下整个过程:

二级域名是可以不开启HTTPS的,直接用HTTP也行,开启HTTPS后配置会繁琐些,但不算太复杂。一个SSL证书只能对应一个域名,所以要为二级域名申请一个证书,有免费的申请网站:FreeSSL首页 - FreeSSL.cn一个提供免费HTTPS证书申请的网站

1、先在域名服务商哪里配置解析,也就是添加主机记录(A),IP地址和一级域名的一样,端口也一样,我的是在Godaddy上买的,解析配置如下:

 添加完后,域名服务商这边就好了,接下就去申请证书,申请证书也需要在域名服务商这边在填写一遍cname的验证,这个验证是SSL证书服务商那边验证这个域名是不是你所有,具体教程如下:ACME v2证书自动化快速入门,这个是可以自动续期的。

ACME v2证书自动化快速入门

1.安装acme.sh

建议切换到root模式,可以减少证书安装时的问题
sudo su 注意:MacOS 不用切换到root更简单。

curl https://get.acme.sh | sh -s email=my@example.com

如果上面官方下载地址失败 或者 太慢,可以选用国内的备用地址

curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=my@example.com

注意:安装完成后,再重新打开命令行(如果是 SSH,选择重新连接),以使acme.sh命令生效。

或者执行刷新

source ~/.bashrc 

2.对域名进行授权

输入域名

获得域名验证(DCV)授权信息

到您的域名解析服务商添加解析记录,下面以DNSPod为例:

3.证书申请 & 部署

点击【配置完成,立即检测】后获得证书申请命令

部署到 WebServer

Apache example:

acme.sh --install-cert -d example.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

Nginx example:

acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

享受自动续期吧!证书进入到30天有效期,acme.sh 会自动完成续期。

下面就可以配置NGINX的二级域名解析了,配置和一级域名的一样,只是多了代理和SSL。前面只是讲解当前一级域名https的请求。根据http二级域名经验,进行制作二级https二级域名。都是一样的,只要后面新增一个新的,然后再代理上新的就好了(注意:一定是在第一个server的后面新增server)完整核心的NGINX配置如下:


server {
        listen 80 default_server;
        listen [::]:80 default_server;


        root /var/www/html;#前端项目根目录

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;
        rewrite ^(.*)$  https://$host$1 permanent; #用于将http页面重定向到https页面
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri.html $uri/ /index.html;#这里是next.js的多页面访问配置,解决404错误
                
        }

}


server {
        listen       80;
        server_name  metadata.tnafcs.com;#这里很重要二级域名配置
        rewrite ^(.*)$  https://$host$1 permanent; #用于将http页面重定向到https页面
        location / {
        proxy_pass http://127.0.0.1:9897;#nodejs后端项目地址端口,开启HTTP强制转HTTPS后直接走HTTPS里的
                proxy_buffer_size 64k;
proxy_buffering on;
proxy_buffers 4 64k;
proxy_busy_buffers_size 64k;
proxy_max_temp_file_size 1024m;
proxy_ssl_server_name  off;
        }
}



server {
    listen 443 ssl http2;#开启了HTTP2版本,加载速度是HTTP1.1的7倍左右
    listen [::]:443 ssl http2;#开启了HTTP2版本,加载速度是HTTP1.1的7倍左右

    ssl_certificate /etc/nginx/cert/full_chain.pem;
    ssl_certificate_key /etc/nginx/cert/private.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    ssl_dhparam /etc/nginx/cert/ffdhe2048.txt;

    # intermediate configuration
    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;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

        root /var/www/html;#前端项目根目录
    location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri.html $uri/ /index.html;#这里是next.js的多页面访问配置,解决404错误

        }

}



server {
    listen 443 ssl http2;#开启了HTTP2版本,加载速度是HTTP1.1的7倍左右
    listen [::]:443 ssl http2;#开启了HTTP2版本,加载速度是HTTP1.1的7倍左右
    server_name  metadata.etherfair.space;#这里很重要,二级域名配置


    ssl_certificate /root/.acme.sh/metadata.tnafcs.com/metadata.tnafcs.com.cer;
    ssl_certificate_key /root/.acme.sh/metadata.tnafcs.com/metadata.tnafcs.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    #ssl_dhparam /etc/nginx/cert/ffdhe2048.txt;

    # intermediate configuration
    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;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

     location / {
                proxy_pass http://metadata.tnafcs.com:9897;#这里很重要,#nodejs后端项目地址端口,开启HTTP强制转HTTPS后直接走HTTPS里的
                proxy_buffer_size 64k;
proxy_buffering on;
proxy_buffers 4 64k;
proxy_busy_buffers_size 64k;
proxy_max_temp_file_size 1024m;
proxy_ssl_server_name  on;
        }

}

 如果出现502,那是SSL_do_handshake()握手失败,proxy_pass 代理换成http的就可以了。参考这篇文章nginx反向代理网页502、SSL_do_handshake()握手失败_来碗米饭的博客-CSDN博客_ssl_do_handshake

其他的就不啰嗦了,具体可以看以下参考文献:


1、二级域名https怎么进行?如何配置? - SSL网

2、【搭建后台环境】nginx https 配置二级域名 - 掘金

3、NGINX反向代理某些请求出现502 BAD GATEWAY_IT_狂奔者的博客-CSDN博客_nginx反向代理出现502

4、nginx反向代理网页502、SSL_do_handshake()握手失败_来碗米饭的博客-CSDN博客_ssl_do_handshake

5、FreeSSL首页 - FreeSSL.cn一个提供免费HTTPS证书申请的网站

6、ACME v2证书自动化快速入门

### 什么是二级域名 二级域名是指在顶级域名之下的一级子域名结构。例如,在 `asurplus.baidu.com` 中,`com` 是顶级域名(TLD),`baidu` 是一级域名,而 `asurplus` 则是二级域名[^1]。 ### Nginx 配置二级域名的方法 为了配置二级域名,通常需要修改 DNS 设置以及 Web 服务器的配置文件来支持该二级域名访问请求。以下是基于 Nginx 的具体配置方法: #### 修改 DNS 记录 首先,需登录到您的域名注册商管理后台并添加一条新的 A 记录或者 CNAME 记录指向目标 IP 地址或主机名。假设我们希望解析 `asurplus.baidu.com` 到某个特定 IP 地址,则可以创建如下记录: - **名称**: asurplus - **类型**: A (IPv4 Address) 或者 CNAME (Canonical Name) - **值**: 对应的目标 IP 地址或者是主域名 完成上述操作之后,请等待一段时间让DNS更改生效。 #### 编辑 Nginx 配置文件 接着编辑 Nginx 的站点配置文件以处理来自这个新定义好的二级域名流量。下面给出了一段典型的针对 `asurplus.baidu.com` 进行设置的例子: ```nginx server { listen 80; server_name asurplus.baidu.com; location / { root /var/www/asurplus; # 替换为实际路径 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } ``` 这段脚本设置了当用户通过浏览器输入地址栏中的 URL 如 http://asurplus.baidu.com/ 后端会返回存储于 `/var/www/asurplus` 文件夹下的网页内容作为响应数据流的一部分呈现给客户端设备上显示出来。 最后记得重启 nginx 来使改动立即生效: ```bash sudo systemctl restart nginx ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

QC班长

班长有话说:要是有瓶水喝就好了

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

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

打赏作者

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

抵扣说明:

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

余额充值