使用云服务器+Nginx搭建静态Web服务器

这篇文章介绍如何使用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地址

Step 1:安装Nginx

通过ssh登陆服务器,使用系统的包管理工具安装Nginx。

如果是Ubuntu或者Debian系统,直接使用apt安装即可,命令如下

sudo apt-get update
sudo apt-get install nginx

在浏览器中输入http://8.8.8.8 可以看到Nginx欢迎页面,说明安装成功了,但是暂时还不能使用域名访问。

Step 2:准备网站静态文件

在/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入门教程,这里可以先跳过这一步。

Step 3:配置Nginx

Nginx的配置文件在目录/etc/nginx下面。我们需要用到该目录下有两个子目录:

  • sites-available,存放所有可用的网站配置
  • sites-enabled,Nginx运行时读取该目录下的配置文件。该目录下的文件都是软连接,指向sites-available下的实际配置文件。只有在sites-enabled下有软连接的配置文件才会生效。

下面将首先在sites-available目录下创建配置文件,使用域名www.example.com作为配置文件名称,然后在sites-enabled下创建一个指向该配置文件的软连接使其生效。为了避免配置文件冲突,需要将默认的default配置文件在sites-enabled下的软连接删除。

Step 3.1 创建配置文件

sudo cd /etc/nginx/sites-available
sudo touch www.example.com

Step3.2 编辑配置文件

将下面的内容粘贴到配置文件中

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如下内容:

  • 网站目录为 /var/www/www.example.com
  • 网站首页文件为 index.html
  • 响应且仅响应访问目标域名为 www.example.com 的请求,如果想让Nginx响应多个域名,比如想要同时使用二级域名 example.com,可以在server_name项添加多个域名,使用逗号隔开

Step3.3 创建软连接

在sites-enabled目录下为配置文件创建软连接,使配置文件可以生效

sudo ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/www.example.com
sudo rm default #default配置文件一定要删除,不然会冲突。

Step3.4 重启Nginx使新配置生效

sudo systemctl restart nginx

开启HTTPS(可选)

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如下内容:

  • 监听443端口(HTTPS协议端口),即响应HTTPS请求
  • SSL证书文件为 certs/1_www.example.com_bundle.crt,私钥文件为certs/2_www.example.com.key
  • 网站目录为 /var/www/www.example.com
  • 网站首页文件为 index.html
  • 响应且仅响应访问目标域名为 www.example.com 的请求

第二个server块告诉Nginx如下内容:

  • 监听80端口(HTTP协议端口),即响应HTTP请求
  • 响应且仅响应访问目标域名为 www.example.com 的请求
  • 将HTTP请求重定向为HTTPS请求

如果没有第二个server块,服务器只能使用HTTPS协议( https://www.example.com )访问,使用HTTP协议( http://www.example.com )访问服务器会被拒绝。

参考文献

  • https://zh.wikipedia.org/wiki/超文本传输安全协议
  • https://zh.wikipedia.org/wiki/Nginx
  • https://medium.com/@jgefroh/a-guide-to-using-nginx-for-static-websites-d96a9d034940
  • https://cloud.tencent.com/document/product/400/4143#2.-nginx-.E8.AF.81.E4.B9.A6.E9.83.A8.E7.BD.B2

你也可以通过我的独立博客——胡刘郏的技术博客,获取本篇文章

你可能感兴趣的:(教程)