一、原料:
1、Express
2、Openssl
3、Nginx
二、过程:
1、Express项目搭建(省略)
2、Openssl生成密钥
1)下载openssl
下载链接:http://slproweb.com/products/Win32OpenSSL.html
2)安装openssl,配置环境变量
3)生成密钥文件,命令行
1>创建文件夹cert(将文件夹放到项目根目录下)
2>进入cert ,生成lee.key:openssl genrsa -des3 -out lee.key 1024
3>生成lee.csr:openssl req -new -key lee.key -out lee.csr
注意: Common Name,即为我们要使用https访问的域名。(例如:www.example.com)
4>去除密码:copy lee.key lee.key.org;
openssl rsa -in lee.key.org -out lee.key
5>生成crt证书:openssl x509 -req -days 365 -in lee.csr -signkey lee.key -out lee.crt
用到的是lee.crt和lee.key
3、Nginx
1)下载Nginx
下载链接:http://nginx.org/en/download.html
2)配置Nginx(nginx.config文件)
upstream web-server {
server 192.168.1.9:3000;
}
server {
listen 80;
listen 443 ssl;
server_name www.example.com; #域名
ssl_certificate G:/www/demo1/cert/lee.crt;
ssl_certificate_key G:/www/demo1/cert/lee.key;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://web-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3)配置hosts文件(要访问https://www.example.com的电脑都得配置)
192.168.1.9 www.example.com
4)开启、停止、重启Nginx命令
1>开启nginx: start nginx;
2>关闭nginx: nginx -s quit;
3>重启nginx: nginx -s reload;(每次修改nginx.config文件,都需要重启)
4、开启服务
1)开启express项目:node app.js
2)开启nginx服务:start nginx
3)访问 https://www.example.com
5、遇见的问题
1)Authorization Required
原因::nginx未开启,443端口被占
通过运行开启命令行:start nginx; 查看err.log文件
2017/12/05 10:12:34 [emerg] 10588#9692: bind() to 0.0.0.0:443failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
解决:杀死占用443端口的进程
命令行:
杀死进程有关命令行:
1>查看PID: netstat -aon|findstr "443"
2>查看PID对应进程:tasklist|findstr "PID的值"
2)其他机器(客户端)访问问题:【关闭防火墙、hosts文件(客户端)配置】