Nginx基本使用与建站配置
记录一下 Nginx 的基本使用与建站配置,免得改的时候又忘记了。 (这里不涉及 hexo 博客的具体配置细节,有专门的笔记)
Nginx 基本使用
基本命令
常见操作要求在 root 用户下进行:
- 第一类操作
 
- 启动:
systemctl nginx start - 关闭:
systemctl nginx stop - 重启:
systemctl nginx restart 
- 第二类操作
 
- 测试:
nginx -t,显示配置文件目录,检查nginx.conf是否有语法错误,并进行测试。 - 重新加载配置:
nginx -s reload,reload 命令会重新加载配置文件,此时 nginx 服务不会中断,服务启动,文件即加载成功。 - 平稳地关闭:
nginx -s quit,迅速地关闭:nginx -s stop。 
配置逻辑
首先记录一下 Nginx 的配置逻辑:(root
用户直接apt-get安装,而非源码编译)nginx
配置文件全部位于/etc/nginx/目录,其中值得关注的包括:
nginx.conf主配置文件sites-available/文件夹sites-enable/文件夹
主配置文件 nginx.conf
会先导入一些模块,值得关注的是最后的两行
1  | include /etc/nginx/conf.d/*.conf;  | 
通常情况下:
conf.d/没有任何东西sites-available/含义为可以启用的站点,默认含有一个文件 defaultsites-enabled/含义为正在启用的站点,默认含有一个文件 default,sites-enabled/通常只是一个中转环节,包括若干个指向sites-available/具体站点配置的软链接
建站配置
因为个人不是相关专业的,下面的只是自己的理解和记录,可能有的表述不够准确。
防火墙
由于使用的是云服务器,这里实际上涉及了两层防火墙:
- 第一层是腾讯云提供的防火墙,可以在腾讯云的控制台进行修改
 - 第二层是系统防火墙,需要在系统上进行修改(ufw)
 
防火墙主要关注:允许或禁止哪些 ip 哪些协议(TCP/UDP)访问哪些端口,腾讯云的防火墙只会管理入流量,对于出流量默认全部开放。
关于 IP 的基本知识:
- 私网 IP 地址范围:
- 10.0.0.0 ~ 10.255.255.255(A类私网地址)
 - 172.16.0.0 ~ 172.31.255.255(B类私网地址)
 - 192.168.0.0 ~ 192.168.255.255(C类私网地址)
 
 - 公网 IP 地址:所有非私网保留范围的IP地址均属于公网地址,(理想情况下)可直接在互联网上路由。
 
关于端口的基本知识:端口使用一个 16 位的数字表示,它的范围是 0~65535,包括:
- 0 到 1023 是被知名服务(Well-Known Ports)使用的端口,例如 http 的 80,https 的 443
 - 从 1024 到 49151,它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。
 - 从 49152 到 65535,理论上,不应为服务分配这些端口。实际上,机器通常从 1024 起分配动态端口。
 
如果一个服务(进程)已经在监听某个端口,那么其它服务就不可以再使用。
几个常见的默认端口:
- 80 端口 默认 http 网络服务
 - 443 端口 默认 https 网络服务
 - 22 端口 默认 Linux ssh 远程登陆
 - 3389 端口 默认 Windows 远程登陆
 
当前的腾讯云防火墙的规则如下,这里除了浏览器需要的默认端口 80 和 443,其它都进行了更改:
- 80 端口允许
 - 443 端口允许
 - 22 和 3389 端口,即Linux和Windows默认的远程登陆的默认端口,出于安全原因选择拒绝
 - 22 端口被手动修改成了一个特殊端口 xxxxx,用于 ssh 远程登陆
 
系统防火墙可以由 root
用户使用ufw status查看,当前规则如下:
1  | Status: active  | 
注:
- 防火墙如果未启用,那么默认允许所有的进出访问。
 - 防火墙启动状态下,缺省的默认规则是禁止。
 - 可以使用 ufw
相关命令进行规则的新建或删除,例如
ufw delete allow 22/tcp,对于规则的修改是实时生效的,不需要重启防火墙。(ufw开启之前务必反复确认规则是什么,不然一不小心把所有端口禁止,ssh远程登陆的端口也会被禁掉,只能去机房直接登陆,或者使用云平台的特殊手段登陆) 
域名
在腾讯云购买了几年的域名fenglielie.top。
SSL
为了支持https访问,申请为域名和子域名申请SSL证书,目前申请免费域名:
fenglielie.top
将申请得到的证书放在固定位置(Nginx需要配置对应路径),例如
1  | /path/to/ssl/fenglielie.top_nginx/  | 
目前免费域名的SSL证书有效期只有两三个月,很麻烦,需要频繁更新。
DNS
需要在腾讯云上面设置域名的 DNS 解析规则,当前包括:
fenglielie.top指向云服务器的公网 ip
Nginx 网站配置
包括如下几条配置:
default_403fenglielie.top
将这些文件存放在 /etc/nginx/sites-available/ 中,然后在
/etc/nginx/sites-enabled/
中创建同名的软链接指向对应的项。
default_403
使用下面的配置进行默认匹配,它起到兜底的效果:如果后续的其它规则都不符合,就会对应到当前的配置,从而默认 403 拒绝。(否则 Nginx 可能将第一个配置视作默认行为)
1  | # Default server configuration  | 
fenglielie.top
这就是当前的博客网站,配置文件如下
1  | ## fenglielie.top  | 
解释:
- 监听 80 端口的 
fenglielie.top和www.fenglielie.top,并转到443端口 - 监听 443 端口的 
fenglielie.top和www.fenglielie.top - 设置网站根位置为
/path/to/open/blog,作为博客的根目录 - 如果访问 
fenglielie.top/files/,会自动转到/path/to/open/files/目录下,可以浏览和下载文件- 这里在页脚手动添加了备案号
 - 如果写 
/files/,就不会匹配fenglielie.top/files,必须在结尾加/ 
 - 设置SSL证书位置为
/path/to/ssl/fenglielie.top_nginx - 对于博客部分,禁止一些常见的爬虫,包括使用 
curl和wget的直接访问,但是对于/files/目录没有限制 
考虑到目前没有使用的必要,注释了
/files/部分的配置。
