这篇文章介绍如何使用Nginx搭建静态Web服务器(比如静态博客),并实现HTTPS访问(可选)以及Github Pages双节点托管(可选)。Nginx是一款轻量级Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存。
本文假定你已经拥有一个域名和云服务器实例,并且域名解析已经指向了你的云服务器IP地址。如果没有的话需要购买和注册。
域名注册推荐腾讯云:腾讯云-域名注册(原Dnspod,已被腾讯收购),博主的域名是在腾讯云注册的,非常稳定,价格也很便宜,免费提供SSL证书,后面开启HTTPS需要腾讯云的SSL证书。
云服务器根据需求选择国外的或者国内的云服务器厂商,两者各有优势。
云服务器厂商 | 国内访问速度 | 国外访问速度 | 是否需要备案 |
---|---|---|---|
国内云服务器厂商 | 快 | 慢 | 是 |
国外云服务器厂商 | 慢 | 快 | 否 |
如果网站主要是面向国内或者中文用户的话,建议选择国内云服务器,后面会讨论如何使用免费的方案解决国外访问速度慢的问题。
国外云服务器推荐vultr:vultr-云服务器
国内云服务器推荐腾讯云:腾讯云-云服务器
完成域名注册和云服务器购买后,在域名解析设置里添加A类型记录将解析目标指向服务器的IP地址。
下面假定你注册的域名为 example.com,使用 www.example.com 作为网站的主域名,服务器IP地址为8.8.8.8。请替换为实际的域名和IP地址
通过ssh登陆服务器,使用系统的包管理工具安装Nginx。
如果是Ubuntu或者Debian系统,直接使用apt安装即可,命令如下
sudo apt-get update
sudo apt-get install nginx
在浏览器中输入http://8.8.8.8 可以看到Nginx欢迎页面,说明安装成功了,但是暂时还不能使用域名访问。
在/var/www/目录下创建网站目录,建议使用域名作为目录名称,这个目录将存放网站静态文件。
sudo cd /var/wwww
sudo mkdir wwww.example.com
如果你之前已经有网站了,进入你本地的网站目录,把网站静态文件复制到www.example.com目录下
sudo cd ~/website #~/website替换为实际的本地网站目录
sudo scp -r * [email protected]:/var/www/www.example.com
如果没有网站,打开服务器上的网站目录,创建一个名为index.html的文件作为网站的首页
sudo cd www.example.com
sudo echo "Hello,我是一个刚出生的网站,现在还啥都没有" > index.html
也可以使用Hugo生成一个比较美观的静态网站,Hugo是一个流行的静态网站生成工具,具体用法参照Hugo入门教程,这里可以先跳过这一步。
Nginx的配置文件在目录/etc/nginx下面。我们需要用到该目录下有两个子目录:
下面将首先在sites-available目录下创建配置文件,使用域名www.example.com作为配置文件名称,然后在sites-enabled下创建一个指向该配置文件的软连接使其生效。为了避免配置文件冲突,需要将默认的default配置文件在sites-enabled下的软连接删除。
sudo cd /etc/nginx/sites-available
sudo touch www.example.com
将下面的内容粘贴到配置文件中
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/www.example.com; #替换为实际域名
index index.html;
server_name wwww.example.com; #替换为实际域名
location / {
try_files $uri $uri/ =404;
}
}
上面的配置内容告诉Nginx如下内容:
在sites-enabled目录下为配置文件创建软连接,使配置文件可以生效
sudo ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/www.example.com
sudo rm default #default配置文件一定要删除,不然会冲突。
sudo systemctl restart nginx
HTTPS是一种安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。使用HTTPS可以增加网站的可信度,也可以提高网站在搜索引擎的权重。
本阶段假设你已经申请了SSL证书,并且已经有了crt和key文件。如果没有的话,请前往域名注册商网站申请SSL证书,获得证书后,下载证书。腾讯云的证书里包括多种Web服务器的证书格式,我们只需要Nginx目录下的两个文件,两个文件分别为证书文件1_www.example.com_bundle.crt和私钥文件2_www.example.com.key
在服务器的/etc/nginx目录下创建certs目录,将证书文件和私钥文件拷贝到certs目录下。
修改配置文件 /etc/nginx/sites-available/www.example.com,将其修改为如下内容:
server {
listen 443 default_server;
listen [::]:443 default_server;
root /var/www/www.example.com;
index index.html;
server_name www.example.com;
location / {
try_files $uri $uri/ =404;
}
# SSL证书配置
ssl on;
ssl_certificate certs/1_www.example.com_bundle.crt;
ssl_certificate_key certs/2_www.example.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
}
## 将http请求重定向到https请求
server {
listen 80;
listen [::]:80;
server_name www.example.com;
rewrite ^ https://$host$request_uri? permanent;
}
这个配置文件分为两个serve块,第一个server块告诉Nginx如下内容:
第二个server块告诉Nginx如下内容:
如果没有第二个server块,服务器只能使用HTTPS协议( https://www.example.com )访问,使用HTTP协议( http://www.example.com )访问服务器会被拒绝。
你也可以通过我的独立博客——胡刘郏的技术博客,获取本篇文章