1 - 安装Nginx
Nginx在多个操作系统下的安装
Linux安装
在 ubuntu 的默认仓库中就有 nginx,因此安装非常简单,直接 apt-get 命令即可:
sudo apt-get install nginx
2 - 安装后的配置信息和命令
安装Nginx后的基本配置信息和相关命令
安装的路径概览
安装之后的各种文件路径和文件夹地址:
$ sudo find / -name nginx
/etc/nginx
/etc/logrotate.d/nginx
/etc/default/nginx # 目录不存在
/etc/ufw/applications.d/nginx # 防火墙
/etc/init.d/nginx # 开机自动启动
/var/log/nginx # 日志文件路径,包括 access 和 error 日志
/usr/lib/nginx # 目录不存在
/usr/sbin/nginx # nginx 二进制文件
/usr/share/doc/nginx # 文档路径
/usr/share/nginx # 只有一个 html 文件夹和一个 index.html 文件
配置目录
在 /etc/nginx
目录下的 nginx.conf 文件,默认http配置:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
操作命令
nginx相关的操作命令:
# 查看nginx状态
sudo service status nginx
# nginx操作
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
# 查看错误日志
sudo tail -f /var/log/nginx/error.log
3 - 记录:迁移到新服务器
记录将Nginx上的站点迁移到新服务器的过程(备忘)
原服务器到期,更换服务器之后,需要将原有nginx下的部署的网站迁移到新的服务器上。
迁移数据到新服务器
数据包括网站文件和相关的nginx配置。
迁移sites-available目录
cd
mkdir -p migrate/nginx/
scp -r sky@119.28.182.148:/etc/nginx/sites-available/ /home/sky/migrate/nginx/
cd migrate/nginx/sites-available/
rm -r default
sudo cp -r * /etc/nginx/sites-available/
迁移sites-enabled目录
这个目录下都是软链接:
ls -l
lrwxrwxrwx 1 root root 34 Jan 6 2018 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 41 Jan 27 2018 docs.dreamfly.io.https -> ../sites-available/docs.dreamfly.io.https
lrwxrwxrwx 1 root root 30 Jan 21 2018 dreamfly.io -> ../sites-available/dreamfly.io
lrwxrwxrwx 1 root root 36 Jan 24 2018 dreamfly.io.https -> ../sites-available/dreamfly.io.https
lrwxrwxrwx 1 root root 38 Jan 6 2018 jenkins.dreamfly.io -> ../sites-available/jenkins.dreamfly.io
lrwxrwxrwx 1 root root 27 Jan 7 2018 skyao.io -> ../sites-available/skyao.io
lrwxrwxrwx 1 root root 33 Jan 24 2018 skyao.io.https -> ../sites-available/skyao.io.https
通过下面这个特殊的cp命令可以为这些文件创建软链接:
cd /etc/nginx/sites-enabled
sudo cp -rs /etc/nginx/sites-available/* .
迁移 skyao 网站内容
原有网站内容存放在 /var/www/skyao
下,直接tar一个包:
cd /var/www
sudo tar cfv skyao.tar skyao/
然后通过scp复制到新的站点,解压缩到 /var/www
下:
cd migrate/nginx/
scp sky@119.28.182.148:/var/www/skyao.tar /home/sky/migrate/
tar xvf skyao.tar
sudo mv skyao /var/www
迁移部署脚本
/var/www/
下还有一些部署脚本,一起复制过去:
sudo scp sky@119.28.182.148:/var/www/*.sh /var/www
在新服务器上部署站点
直接启动nginx,发现报错,原因是开始了 https 但是新服务器上没有对应的证书。
证书就不迁移了,重新生成一遍。
重新生成letsencrypt证书
sudo letsencrypt certonly --webroot -w /var/www/skyao -d skyao.io
Challenge failed for domain skyao.io
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.
解决方案:
- 修改DNS解析,让 skyao.io 域名指向新的服务器IP
- 恢复sky.io 网站的非加密访问,以便通过 letsencrypt 的验证。
启动非加密网站
修改 /etc/nginx/sites-available/skyao.io
,内容修改为下面的内容:
server {
listen 80;
server_name skyao.io www.skyao.io;
root /var/www/skyao;
index index.html index.htm index.nginx-debian.html;
}
暂时移除https站点。执行 sudo systemctl restart nginx
重启nginx,通过浏览器访问 http://skyao.io 正常之后,再继续:
sudo letsencrypt certonly --webroot -w /var/www/skyao -d skyao.io
这次就可以正常生成证书了。
重新开启https加密
修改 /etc/nginx/sites-available/skyao.io
,内容修改为下面的内容:
server {
listen 80;
server_name skyao.io www.skyao.io;
rewrite ^(.*)$ https://$host$1 permanent;
}
然后enable https站点,再执行 sudo systemctl restart nginx
重启nginx,即可恢复https站点。