首先需要在 Ubuntu 中安装 Nginx 服务, 打开终端执行以下命令:

$ sudo apt update

$ sudo apt install nginx -y

然后启动 Nginx 服务并设置为开机时自动启动, 执行以下命令:

$ sudo systemctl start nginx

$ sudo systemctl enable nginx

最后再验证一下 Nginx 服务的当前状态, 执行以下命令:

$ sudo systemctl status nginx

$ sudo systemctl is-active nginx

下载证书

从云服务提供商处下载适用 Nginx 的 SSL 证书文件, 以腾讯云为例, 如果有一个 xxx.xxx 的域名, 下载到本地的文件夹名称为 xxx.xxx_nginx, 文件夹内包含下面四个证书文件:

xxx.xxx_bundle.crt

根证书交叉文件 xxx.xxx_bundle.pem

使用pem编码的证书文件 xxx.xxx.csr

证书签名请求文件 xxx.xxx.key

私钥公钥对文件

进入到 Nginx 服务的配置目录下, 创建一个 xxx.xxx_nginx 目录并进入该目录下, 然后以管理员身份下载证书文件:

$ cd /etc/nginx

$ sudo mkdir xxx.xxx_nginx

$ cd xxx.xxx_nginx

$ sudo [证书下载请求地址]

证书文件下载完成后可以通过 ls -l 查看一下刚刚下载好的证书文件。

配置代理

进入到 Nginx 配置目录下 conf.d 目录, 创建一个 xxx.xxx_nginx.conf 配置文件, 并开始编辑配置文件:

cd /etc/nginx/conf.d

sudo touch xxx.xxx_nginx.conf

sudo vim xxx.xxx_nginx.conf

假设 XXX 为当前服务的名称, 开始配置代码。

动态服务配置

upstream XXX {

# 本地服务地址

server 127.0.0.1:10086;

}

server {

listen 80;

server_name xxx.xxx;

# 把 HTTP 的域名请求转成 HTTPS

return 301 https://$host$request_uri;

}

server {

# SSL 访问端口号为 443

listen 443 ssl;

# 填写绑定证书的域名

server_name xxx.xxx;

# 证书文件名称

ssl_certificate xxx.xxx_nginx/xxx.xxx_bundle.crt;

# 私钥文件名称

ssl_certificate_key xxx.xxx_nginx/xxx.xxx.key;

ssl_session_timeout 5m;

# 请按照以下协议配置

ssl_protocols TLSv1.2 TLSv1.3;

# 请按照以下套件配置, 配置加密套件, 写法遵循 openssl 标准

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

ssl_prefer_server_ciphers on;

location / {

# 网站主页路径. 此路径仅供参考, 具体请您按照实际目录操作

# 例如, 您的网站运行目录在/etc/www下, 则填写/etc/www

# root html;

# index index.html index.htm;

proxy_pass http://XXX;

proxy_http_version 1.1;

proxy_redirect off;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Forwarded-Host $host;

proxy_set_header X-Forwarded-Server $host;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "Upgrade";

proxy_send_timeout 120s;

proxy_read_timeout 240s;

# 最大允许上传 10~20000 MB 的内容

client_max_body_size 10m;

# 解决 HTTPS 站点里面引用 HTTP 资源的异常

add_header Content-Security-Policy upgrade-insecure-requests;

}

}

静态服务配置

server {

# SSL 访问端口号为 443

listen 443 ssl;

# 填写绑定证书的域名

server_name xxx.xxx;

# 证书文件名称

ssl_certificate xxx.xxx_nginx/xxx.xxx_bundle.crt;

# 私钥文件名称

ssl_certificate_key xxx.xxx_nginx/xxx.xxx.key;

ssl_session_timeout 5m;

# 请按照以下协议配置

ssl_protocols TLSv1.2 TLSv1.3;

# 请按照以下套件配置,配置加密套件, 写法遵循 openssl 标准。

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

ssl_prefer_server_ciphers on;

location / {

# 网站主页路径。此路径仅供参考, 具体请您按照实际目录操作。

# 例如,您的网站运行目录在/etc/www下, 则填写/etc/www。

root /.../.../.../app;

index index.html;

}

location /static {

alias /.../.../.../static;

}

}

代理到目标服务

server {

listen 80;

server_name xxx.xxx;

# 把 HTTP 的域名请求转成 HTTPS

return 301 https://$host$request_uri;

}

server {

# SSL 访问端口号为 443

listen 443 ssl;

# 填写绑定证书的域名

server_name xxx.xxx;

# 证书文件名称

ssl_certificate xxx.xxx_nginx/xxx.xxx_bundle.crt;

# 私钥文件名称

ssl_certificate_key xxx.xxx_nginx/xxx.xxx.key;

ssl_session_timeout 5m;

# 请按照以下协议配置

ssl_protocols TLSv1.2 TLSv1.3;

# 请按照以下套件配置, 配置加密套件, 写法遵循 openssl 标准

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

ssl_prefer_server_ciphers on;

location / {

# 网站主页路径. 此路径仅供参考, 具体请您按照实际目录操作

# 例如, 您的网站运行目录在/etc/www下, 则填写/etc/www

# root html;

# index index.html index.htm;

# https://api.n.n.com/ 为目标服务

proxy_pass https://api.n.n.com/;

proxy_ssl_server_name on;

proxy_set_header Host api.n.n.com;

# 保证 stream 请求时 EventSource 类型响应的输出

proxy_set_header Connection '';

proxy_http_version 1.1;

chunked_transfer_encoding off;

proxy_buffering off;

proxy_cache off;

}

}

重启服务

为了使上面的配置生效, 需要检测配置文件的有效性, 并且重启 Nginx 服务:

$ sudo nginx -t

$ sudo nginx -s reload

最后就可以验证一下 https://xxx.xxx 是否可以成功访问。

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: