初涉Nginx

目录:

  • 过程中应该注意的问题
  • 安装最新稳定版本
  • 配置站点上线
  • 为站点配置HTTPS

过程中应该注意的问题

  1. 安装Nginx完成后你应该执行以下命令来启动Nginx服务:

    sudo systemctl start nginx

    成功启动的话,不会有任何Nginx相关信息输出。

  2. 修改Nginx配置后,可通过执行nginx -s reload命令进行重载,更多相关请转到本文配置站点上线第四部分加载配置

  3. 配置站点上线后,若发现访问域名得到的页面却是 *Nginx 403 * 错误页面,你可以试着查看Nginx的错误日志,我遇到最常见的引发此错误的原因是Nginx配置中的用户权限不够,说白了就是Nginx配置文件(nginx.conf)中的用户权限和站点目录用户权限不一致。

    为了检查是否为这个问题,你可以试着在站点目录下执行ll(两个小写的L)命令,查看文件用户,在我的服务器上站点目录用户为root,于是我将Nginx默认用户也修改为root,并重载配置文件,至此站点已经可以正常访问。

    具体修改方法:修改/etc/nginx/nginx.conf文件中第一行user后参数为root(根据你的目录所有者修改)。

安装最新稳定版本

我当前服务器系统版本号为Ubuntu16.04,默认源安装的Nginx版本是v1.10.0,有消息指出v1.15.6之前版本存在多个安全问题,所以赶紧来将其升级至最新稳定版本。

  1. 卸载旧版本

    v1.14.0版本前后目录存在差异,建议执行sudo apt-get --purge remove nginx将已经安装的旧版本Ngxin的配置文件和程序全都卸载,当然,你可以选择备份sites-available文件夹下的配置文件。

  2. 安装新版本

    1. Nginx版本介绍

      先了解一下Nginx各个版本,官网地址http://nginx.org/en/download.html

      页面中有以下版本:

      • Mainline version:正在开发阶段的版本,可能会有漏洞。
      • Stable version:稳定版
      • Legacy versions: 历史版本
    2. Nginx升级/安装步骤

      以安装最新v1.16.0稳定版为例。

      1. 执行下列命令以添加Nginx官方源

        sudo wget http://nginx.org/keys/nginx_signing.key
        sudo apt-key add nginx_signing.key
      2. /etc/apt/sources.list文件末加入下面两行内容

        deb http://nginx.org/packages/ubuntu/ xenial nginx
        deb-src http://nginx.org/packages/ubuntu/ xenial nginx

        注:上面两行内容中xenial是Ubuntu系统代号,各大版本代号不同:

        Version Code
        16.04 xenial
        18.04 bionic
        18.10 cosmic
        19.04 disco

        更多参见:http://nginx.org/en/linux_packages.html#stable

      3. 执行安装指令

        以上步骤 1 & 2 完成了Nginx官方源的添加,接下来执行常规安装就好。

        sudo apt update
        sudo apt install nginx
      4. 检查版本

        nginx -v

        此时显示的版本应该是nginx version: nginx/1.16.0,大功告成!

参考博文:Ubuntu升级或安装Nginx最新稳定版

配置站点上线

不得不赞叹,Nginx简直就是神器,强大的反向代理以及负载均衡工具,其只需要监控80口,便可以根据配置文件上线大量站点(多个站点不同域名均解析至同一服务器IP,Nginx根据配置文件为不同域名返回其对应的站点内容),实现单服务器单IP单端口配置大量站点!并且其基础功能配置简单,极易上手。

大致步骤:

这里将会使用3ders.xyz实例,一个纯静态页面。

  1. 在服务器建好目录用于存放你的站点文件(若为JSP或者PHP站点需要先搭建其环境,再配合Nginx)

  2. /etc/nginx/conf.d(这是Nginx默认安装目录下的站点配置目录)下新建站点配置文件,命名格式为domain.conf

    注:

    • 个人建议配置文件命名格式为domain.conf,为不同域名建立不同的配置文件,方便管理。
    • 若你还在使用旧版本Nginx,其也是有此目录的,配置文件完全可以放在此目录下,sites-available文件夹不管问题不大。
  3. 配置文件写法

    下面是我的静态站点配置文件(/etc/nginx/conf.d/3ders.conf)内容:

    server{
    listen 80; # 监听80口
    server_name 3ders.xyz; # 站点域名
    root /root/www/3ders.xyz/; # 站点目录
    index index.html; # 站点默认首页文件
    }

    没有过多要求的话,这么写就行了。

  4. 加载配置

    执行nginx -s reload加载刚刚改好的配置,这是热重载,不同担心其他已经在运行的站点受本次配置更新受影响而无法正常访问。

    并且就算是配置文件有误,执行完命令会提示具体错误,并且Nginx仍会按照上一次正确的配置运行,不会down掉。

    若还不放心,可以先执行nginx -t命令测试配置文件,若是配置无误则会提示以下信息:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

然后再执行nginx -s reload加载刚刚改好的配置。

至此,你的站点已经可以成功通过域名访问了。

你可以试着访问我的样例网站3ders.xyz

注:差点忘记说了,你应该记得将你的域名解析至服务器IP,并且完成上述步骤后,才算是大功告成。

为站点配置HTTPS

先去域名提供商申请SSL证书,然后巴拉巴拉配置就好啦!

  1. 申请SSL证书

    我的域名3ders.xyz是在阿里云购买的,在其域名控制台可以申请免费的一年SSL证书,用于配置站点https。

    申请很简单,直接登录控制台找到申请地儿申请就好,过程大概一刻钟就能搞定。

    然后下载申请好的证书文件,咱们要配置的是Nginx服务器,那么下载对应的Nginx版本证书,下载形式会以压缩包提供,可以先下载到本地电脑,解压后应该会有两个文件,分别是keypem文件,把它们上载至服务器指定目录/etc/nginx/cert/domain/

    注:

    • 证书上载目录建议设置在/etc/nginx/cert/domain/下,cert/目录需要手动创建,是证书文件的总目录,domain/也需要手动创建,目录是具体域名对应的证书存放目录。

      如此设置方便管理。

    • 证书上载至服务器,建议使用的工具为 Xftp ,个人使用免费,官网直接申请下载就好,申请完成后下载链接会发送至申请时填写的邮箱。国内下载也许会非常慢,没有梯子可以复制链接到迅雷下载(以后遇见同样的问题,又不巧没有梯子的话,不妨都将下载链接加至迅雷试试)。

  2. 配置SSL证书

    参考官网文档:http://nginx.org/en/docs/http/configuring_https_servers.html

    还是需要修改站点配置文件,这里继续以3ders.xyz站点配置文件/etc/nginx/conf.d/3ders.conf为例。

    之前咱们的配置内容为:

    server{
    listen 80;

    server_name 3ders.xyz;

    root /root/www/3ders.xyz/;
    index index.html;
    }

    现在呢,需要重新加上一个server块儿,用于配置SSL证书以实现https访问,当然,咱们最好还是需要实现强制https访问,所以现在/etc/nginx/conf.d/3ders.conf内容为:

    server{
    # 监听443端口
    listen 443 ssl;

    server_name 3ders.xyz;

    # 1. 指定SSL证书位置
    # 2. pem文件不需要转换成crt格式
    # 3. 配置文件相对目录是/etc/nginx/
    ssl_certificate cert/3ders.xyz/3ders.pem;
    ssl_certificate_key cert/3ders.xyz/3ders.key;

    root /root/www/3ders.xyz/;
    index index.html;
    }

    server{
    listen 80;

    server_name 3ders.xyz;

    # 重定向,实现强制https访问
    rewrite ^(.*) https://$server_name$1 permanent;

    root /root/www/3ders.xyz/;
    index index.html;
    }

    也许你会有以下疑问:

    • 为什么要写两个server块儿?

      确实是可以写在一个server块儿内,那么就是以下内容:

      server{
      listen 80;
      listen 443 ssl;

      server_name 3ders.xyz;

      ssl_certificate cert/3ders.xyz/3ders.pem;
      ssl_certificate_key cert/3ders.xyz/3ders.key;

      root /root/www/3ders.xyz/;
      index index.html;
      }

      仔细对比,没有加上rewrite ^(.*) https://$server_name$1 permanent;,这是因为如果加上了,浏览器访问网站会提示重定向次数过多导致无法正常访问网站。

      此时用两个server块儿分别配置80和443端口就是为了解决这个问题。

至此本文终结。

0%