最近要做一个手机浏览器调用摄像头的功能,反正各种限制吧,需要部署一个本地的https环境,本来以为挺复杂的,没想到竟然so easy?
以前申请阿里云的ssl服务的时候就觉得还挺容易的,然而搞个假的竟然更容易???
好吧可能对我来说没踩坑就是容易的哈哈(一堆废话...)
第一步:使用openssl生成密钥privkey.pem
openssl genrsa -out privkey.pem 1024/2038
结果如图
第二步:使用密钥privkey.pem生成证书server.pem
openssl req -new -x509 -key privkey.pem -out server.pem -days 365
结果如图,这里需要填证书信息,我就随便填的(本来以为Common Name随便填后面会不能用,然而并没有啥影响)
经过以上两步就能在当前目录下看到生成的证书文件了
第三步:配置nginx
server {
listen 443 ssl;
server_name localhost;
ssl_certificate server.pem;
ssl_certificate_key privkey.pem;
location / {
root C:\你的路径\dist;
index index.html index.htm;
}
# ......
}
我把两个.pem文件跟nginx.conf放在图一个目录下了,如果放在别的目录下,这里路径注意要写对
第四步:重启/启动nginx,就OK啦
# 启动nginx服务器
start nginx
# 重启nginx服务器
nginx -s reload
在第四步的时候出了一点问题
第一个问题:nginx: [emerg] bind() to 0.0.0.0:443 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
原因是443端口被占用了
解决办法:
(1)查看被哪个进程占用
netstat -aon | findstr :443
(2)根据进程号查找到对应的进程/应用名称,在“任务管理器”中找到对应的进程(比如我这个就是vmware-hostd.exe),结束任务即可
tasklist|findstr "5760"
第二个问题:nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl"....
这个虽然只是warning,不影响使用,但还是有一点强迫症要把它给解掉。出现这个问题的原因是我一开始的nginx配置如下,新版本的nginx提示ssl这个指令已经不建议使用,要使用listen … ssl替代。根据提示使用listen 443 ssl,删除ssl on就行了,最终的nginx.conf的配置就是上面第三步那样
# 出现Warning的nginx配置
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate server.pem;
ssl_certificate_key privkey.pem;
location / {
root C:\你的路径\dist;
index index.html index.htm;
}
# ......
}
启动nginx成功后,访问https://localhost就可以了,当然,由于证书是未经认证的,因此会出现红色感叹号提示不安全
以上~