banner
小鱼

小鱼's Blog

实现 https 访问与 Nginx 代理

## VPS 中生成 csr 和 key 用于 ssl 证书#

当我们要为网站申请 ssl 证书的时候需要准备 csr (证书请求文件), 包含申请证书所需要的相关信息,其中最重要的是域名,填写的域名必须是你要以 https 方式访问的那个域名。
比如我要生成 yus.bio 的证书

需要执行

openssl req -new -newkey rsa:2048 -nodes -keyout yus.key -out yus.csr

此命令将会生成两个文件,cmsky.key 是密钥文件,小心保存好这个文件,安装 SSL 证书的时候要用到。需要根据提示输入相应的信息,如域名等,按照提示一步一步操作,最后生成这两个文件。

Country Name (2 letter code) [AU]: CN (国家代码)  
State or Province Name (full name) [Some-State]: Fujian (省)  
Locality Name (eg, city) []: Xiamen (城市)  
Organizat[iON](http://www.idcbaby.com/tag/418)  Name (eg, company) [Internet Widgits Pty Ltd]: Cisco (企业/组织)  
Organizational Unit Name (eg, section) []: IT (部门)  
Common Name (eg, YOUR name) []: yus.bio (域名/请正确填写)  
Email Address []: (可直接回车)  
Please enter the following ‘extra’ attributes to be sent with your certificate request

A challenge password []: (直接回车)  
An optional company name []: (直接回车)  

其中的 Email Address 和 A challenge password 可以留空,不必填写,直接回车。以上需要填写的内容,如果不清楚应该怎么填写,除了域名其它的可以按照上面的内容填写。


image

之后执行命令

cat yus.csr

就会得到 csr 的内容

另外一个 .key 文件,一定不能搞丢 ,安装的的时候需要用到

## 申请 ssl,获得证书#

如果是在 name.com 注册的域名,可以直接激活

首先得添加 dns 的 A 记录


image

接着在 ssl 的申请界面中


image

将上一步获取的 yus.csr 的内容 全部 复制到 ssl 申请界面中的 证书签名请求
点击下一步

就会得到以下证书


image

其中这个 SERVER CERTIFICATE 就是 pem 证书,将要添加到 VPS 服务器中

vi yus.pem

将 SERVER CERTIFICATE 、CA CERTIFICATE 、ROOT 中的内容复制进去

最后将 yus.pem 和 yus.key 放到 /home/cert 目录下

## VPS 中通过 nginx 安装证书#

### 安装 Nginx#

查看状态

sudo systemctl status nginx

通过 apt 安装

sudo apt-get install nginx -y

启动
默认安装目录为 /etc/nginx

/etc/init.d/nginx start

测试 Nginx 配置是否正确,以后修改配置也常常用到

nginx -t

image

查看 nginx 版本

nginx -v

Nginx 启动、停止、重启

service nginx start / stop / restart 

## 修改配置文件#

例如现在需要把部署在 8090 端口的 halo 应用映射到 https 的 443 端口

  • 首先进入 conf.d 目录,添加 halo.conf 文件
    内容如下
upstream halo {
  server 127.0.0.1:8090;
}
  • 接着进入到 sites-enabled 目录

删除默认的 default 文件

添加 halo 文件

vi halo

内容如下

server {
		# https 监听的端口为 443 
		# http 监听的端口为 80
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        
        # 需要映射到的域名
		server_name www.yus.bio;

		# pem 证书的路径
        ssl_certificate "/home/cert/yus.pem";
        
        # 生成的 key 的路径
        ssl_certificate_key "/home/cert/yus.key";
        
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;


        client_max_body_size 1024m;
        location / {
		        # conf.d 目录中创建的 .conf 文件名
                proxy_pass http://halo;
                proxy_set_header HOST $host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.

        }

}

保存后执行

nginx -t

检查是否有配置错误

### 启动 nginx#

最后执行

service nginx restart

成功通过域名访问

Bryce's Blog

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。