Nginx配置入门

目录

  1. 认识Nginx
    1. 什么是Nginx?能干啥?
  2. 起步
    1. Nginx的安装
    2. 认识Nginx配置文件
    3. 创建第一个站点

什么是Nginx?能干啥?

官方自述

High Performance Load Balancer, Web Server, & Reverse Proxy

翻译过来就是 一个高性能的负载均衡器,Web服务器和反向代理服务器。

Nginx能提供Web服务(实现http协议),反向代理网站和多个站点的负载均衡调控。Nginx高并发负载下性能表现极其优秀,因此高性能是Nginx的一大特色。

随着现在Nginx的发展,拓展也在不断的增多,如今Nginx能提供的服务已经不再局限于HTTP协议了(如RTMP网络推流服务器)

起步

安装Nginx

环境
  • 操作系统:GNU/Linux

    为了专注于Nginx本身而避免其他各种不必要的麻烦和其他因素,这里采用使用Linux的软件包管理器进行安装(注:安装时需要root权限)

Debian系

apt install nginx

Red Hat系

yum install nginx

安装成功后,在浏览器中输入服务器的ip地址,即可访问到Nginx的默认站点(如下图)


这个是Nginx安装后默认配置的一个站点,能访问到它就说明Nginx正常运行。那么现在,我们就可以对Nginx的配置下手了,利用搭建我们自己的第一个网站啦

认识Nginx配置文件

使用Linux软件包管理器apt或yum安装的nginx配置文件目录在/etc/nginx,如果是编译安装,则在nginx目录下的etc文件夹

使用命令ls 观察发现这里有一大堆的配置文件,是不是感觉无从下手?没关系,nginx有一个配置文件入口配置文件nginx.conf,nginx启动时,第一个读取的配置文件就是这个,至于其他的配置文件nginx要如何读取,也是在这个文件中配置的。

安装完nginx,它有个默认配置的站点,那么能不能在nginx.conf中找到这个站点的蛛丝马迹呢?当然可以!
在此之前,我们先了解下nginx配置文件的语法规则

nginx配置语法规则
  • 与命令行一样,选项与参数,参数与参数之间要有空格
  • 每一个配置选项末尾必须要以英文半角分号;结尾
  • 每行的井号#后面的内容为注释

我们关注下nginx.conf文件中的http { xxx }这块配置(也就是被http { xxx }包围起来的那部分,这部分是nignx的http服务的配置,里面定义了nginx处理http协议的各种参数,这里大部分我们现在暂时都不需要手动修改,保持默认即可。

http { ... }配置块最后两行,是两条include配置

http {
    # ---- 其他各种默认配置参数(略) ----
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

这个和C语言编译器的#include预处理指令的效果是类似的,这里是把目录
/etc/nginx/conf.d/下所有文件名以.conf结尾的文件

/etc/nginx/sites-enabled/下的所有文件内容导入(可以理解为复制粘贴)进http { ... }块中。

我们查看下/etc/nginx/conf.d//etc/nginx/sites-enabled/这两个目录,前者是空的,后者有个名为default的文件,顾名思义,这个极有可能就是默认站点的配置文件了。

用你自己喜欢的文本编辑器(如vi/vim,nano)打开/etc/nginx/sites-enabled/default文件,除去注释,有效配置只有一个server { ... }块内容,内容如下:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name _;
    location / {
        try_files $uri $uri/ =404;
    }
}

而前面有提到,nginx.conf中的http { ... }代码块最后两行有两条include配置选项,那么就不难理解,逻辑上/etc/nginx/sites-enabled/default文件的内容被插入到了nginx.conf中的http { ... }块中,这时,文件nginx.conf的配置内容可以看作与如下内容等价:

# nginx.conf的其他配置(略)
http {
    # http块的其他配置(略)
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        location / {
            try_files $uri $uri/ =404;
        }
    }
}

总结:

  • nginx.confhttp { ... }代码块中,一个server { ... }块定义了一个站点,同时推测可知:在nginx.confhttp { ... }代码块中,编写多个server { ... }块,就能定义多个站点了。
  • 用包管理器安装nginx时,默认配置中并没有直接在在nginx.confhttp { ... }代码块中写入server { ... }块,而是通过include指令,引入外部其他文件编写的server { ... }块配置,这种方式能避免当存在多个站点时导致nginx.conf文件过于复杂,同时可以分离nginx本体运行配置和站点配置,提高了管理效率。网上很多nginx配置站点的教程,是直接在nginx.confhttp { ... }块中编写server { ... }块,这种方式其实并不推荐,更好的方式应该是在单独的外部文件中编写nginx站点(即server { ... }块)。

创建第一个站点

在了解了上面的nginx配置基础后,我们可以开始着手配置我们自己的站点了。
首先,安装nginx时的默认站点我们就不需要了

第一步:移除默认站点。

前面有说明,nginx的默认站点的配置就在/etc/nginx/sites-enabled/default,这个文件在nginx.conf中被http { ... }块下的include /etc/nginx/sites-enabled/*;配置所引入。

要移除这个站点,根据如上所述的站点配置文件加载的流程,我们只需打断其中的任意一个环节即可导致这个默认站点失效

  • (不推荐)直接删除/etc/nginx/sites-enabled/default文件 (文件中的有大量的注释和官方示例配置,是官方文档的一部分)
  • (不推荐)注释掉/etc/nginx/sites-enabled/default文件中的server { ... }(有10行呢,还是零零散散的,太麻烦)
  • (推荐) 在文件nginx.confhttp { ... }块中加#注释掉include /etc/nginx/sites-enabled/*;(最小程度的更改)

第二步:上传网站文件

使用WinScp,XShell等工具将网站上传至服务器,如上传至/var/www/demo。若服务器中已有网站可跳过该步骤。
直接在服务器上使用文本编辑器临时编写一个Hello World网页也行

第三步:创建并编辑站点配置文件

还记得在nginx.confhttp { ... }代码配置块中,是有两条include配置的吧,我们把默认站点的给注释掉了,那么就剩下了include /etc/nginx/conf.d/*.conf;
现在,我们就可以在/etc/nginx/conf.d目录中创建我们的站点配置文件了,文件记得必须以.conf结尾噢。
一般情况下,我个人推荐一个配置文件 只配置一个项目的server { ... }块。

实操:

  • /etc/nginx/conf.d创建并编辑一个名为demo.conf(文件名自定义,只要是.conf结尾即可)的文件
[root@xiaotao233: /etc/nginx/conf.d]# nano demo.conf
  • demo.conf文件内容
server {
    listen 80;              # 站点使用80端口(http协议默认端口)
    root /var/www/demo;     # 网站在服务器的目录
    index index.html;       # 配置默认主页文件名
}

第四步:Nginx平滑重载让配置生效(需要root权限)

Nginx支持在不中断现有服务的情况下,重载配置。
为了防止配置出错导致Nginx停止运行中断服务,因此一般情况下,在重载Nginx之前,需要用以下命令先检查配置是否正确

nginx -t

若有如下输出则表示配置正确无异常

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

然后使用以下命令即可重载Nginx

nginx -s reload

至此,站点已配置完成

第五步:访问网站

直接在浏览器输入服务器IP地址即可访问到网站