服务器安装nginx 并配置支持HTTPS(ssl)
服务器环境: ubuntu16.04
域名:xxxx.com
证书服务:Let's Encrypt
安装nginx
安装之前请停掉端口80相关的程序
查看端口占用情况,列出所有的pid
sudo lsof -i :80
杀掉占用80端口进程,根据pid
sudo kill -9 xxx
安装nginx
sudo su
apt-get update
apt-get install nginx
安装成功后nginx相关目录如下
/usr/sbin/nginx 主程序
/etc/nginx 存放配置文件
/usr/share/nginx 存放静态文件
/var/log/nginx 存放日志
安装成功后查看nginx是否启动,nginx会占用80端口
sudo lsof -i :80
成功启动大概如下,看到nginx存在表示成功
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 17737 root 6u IPv4 31827669 0t0 TCP *:http (LISTEN)
nginx 17737 root 7u IPv6 31827670 0t0 TCP *:http (LISTEN)
nginx 32138 www-data 6u IPv4 31827669 0t0 TCP *:http (LISTEN)
nginx 32138 www-data 7u IPv6 31827670 0t0 TCP *:http (LISTEN)
如果没有成功,则查看是否还有其他程序占用80端口,并kill掉,然后执行如下语句启动nginx
nginx -s reload
执行以上语句有可能报类似如下错误
open() "/run/nginx/nginx.pid" failed (2: No such file or directory)
报错原因是因为nginx
重启指定需要有运行的进程id,但由于nginx
初次启动失败,所以并没有相关pid进程,也就没有重启的说法,此时需要以下指令让nginx启动,-c 后面的目录根据个人nginx安装目录决定。
nginx -c /etc/nginx/nginx.conf
域名解析到ip地址
进入nginx配置文件夹
cd /etc/nginx/conf.d
vi xxx.conf // 配置文件名称根据自己的需求设置
配置内容
注意:配置内容中不要使用 // 注释,需要注释某行使用 #,粘贴时注意将 //的内容删除
server {
listen 80;
server_name xxxx.com; // U域名
location / {
root /home/ubuntu/data/nodeServer/public; // 这里是前端静态文件的绝对路径
index index.html index.htm; // 入口文件
}
}
配置成功后保存退出运行检测指令,看到 test is successful 表示配置成功
到此即可输入域名访问
nginx -t
配置https证书
在官网筛选自己系统相关的配置后得到如下安装命令,依次执行。
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
获取并安装证书
运行下面的命令获取证书,这个命令同时会为你更改 Nginx 配置文件(并且重启)
certbot --nginx
以上顺利的话访问 https://xxxx.com 就能看到那把绿色的锁.
自动续签
Let's Encrypt 签发的证书有效期90天,到期后用如下指令续签,也可以自己写个脚本自动续签.
certbot renew --dry-run
手动生成Let's Encrypt
的证书配置方法如下
先停止nginx服务
nginx -s stop
生成域名证书
邮箱是验证邮箱,需要自己的有效邮箱,成功能看到提示。证书默认在 /etc/letsencrypt/live/xxxx.com
路径下
certbot certonly --standalone --email your@email.com -d xxxx.com
配置nginx
进入nginx配置文件夹,添加xxxx.com文件,文件路径依据个人的nginx安装路径
cd /etc/nginx/sites-enabled/
vi xxxx.com
配置内容,切记删除 // 和后面的内容
server {
listen 443;
server_name xxxx.com;
ssl on;
root /home/ubuntu/data/nodeServer/public; // 个人静态资源绝对路径
index index.html index.htm; // 入口文件
ssl_certificate /etc/letsencrypt/live/xxxx.top/fullchain.pem; // 证书目录
ssl_certificate_key /etc/letsencrypt/live/xxxx.top/privkey.pem; // 证书目录
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
保存退出,测试配置
nginx -t
成功后重启nginx服务即可。