Nginx做为一个轻量且高性能的Web服务器,不仅支持正常网站访问,还支持反向代理,负载均衡等特性。这一节我们就安装一个,并初步感受一下它的使用。

文章目录

  • 操作环境
  • 安装
  • 配置文件
  • 基本控制
  • nginx命令
  • systemctl命令
  • 成功启动
  • 第一个网页
  • 总结


操作环境

  • Centos 7
  • Nginx 1.16.1

安装

Nginx是用c编写的,可以考虑用源码安装,方便自定义安装路径,不过常规使用直接yum安装即可。官网给出了源码编译安装和各平台预编译安装的详细步骤,看这里。如果是Centos版本的步骤,看这里

sudo yum install epel-release
sudo yum update
sudo yum install nginx

我这里使用的是epel源,大家也可以使用nginx自己的源,步骤在上面的步骤中可找到。

之后查看下版本

(base) [root@ai-therm API]# nginx -v
nginx version: nginx/1.16.1

配置文件

默认安装下配置文件都在/etc/nginx/目录

(base) [root@ai-therm system]# cd /etc/nginx
(base) [root@ai-therm nginx]# ll
total 68
drwxr-xr-x 2 root root    6 Oct  3  2019 conf.d
drwxr-xr-x 2 root root    6 Oct  3  2019 default.d
-rw-r--r-- 1 root root 1077 Oct  3  2019 fastcgi.conf
-rw-r--r-- 1 root root 1077 Oct  3  2019 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Oct  3  2019 fastcgi_params
-rw-r--r-- 1 root root 1007 Oct  3  2019 fastcgi_params.default
-rw-r--r-- 1 root root 2837 Oct  3  2019 koi-utf
-rw-r--r-- 1 root root 2223 Oct  3  2019 koi-win
-rw-r--r-- 1 root root 5231 Oct  3  2019 mime.types
-rw-r--r-- 1 root root 5231 Oct  3  2019 mime.types.default
-rw-r--r-- 1 root root 2471 Oct  3  2019 nginx.conf
-rw-r--r-- 1 root root 2656 Oct  3  2019 nginx.conf.default
-rw-r--r-- 1 root root  636 Oct  3  2019 scgi_params
-rw-r--r-- 1 root root  636 Oct  3  2019 scgi_params.default
-rw-r--r-- 1 root root  664 Oct  3  2019 uwsgi_params
-rw-r--r-- 1 root root  664 Oct  3  2019 uwsgi_params.default
-rw-r--r-- 1 root root 3610 Oct  3  2019 win-utf

其中的主配置文件nginx.conf是需要我们去做设置的,其余的配置文件可以暂时不用管,后面有需要时再详细介绍。

针对配置文件有如下两个操作

nginx -t -c /path/to/config/file

这个命令用于修改配置后检查配置的语法正确性,如果是默认目录就不用指定配置路径,否则就需要用-c后面接绝对路径来指定检查哪一个配置文件。

nginx -c /path/to/config/file

单独的nginx是启动nginx服务,后面用-c接配置文件路径是指定非默认目录的配置文件。

基本控制

nginx既支持systemd控制,也支持自身命令控制,各有利弊,这里两种方式都介绍一下。

nginx命令

这里列一个表格如下

命令

说明

nginx

启动服务,接-c指定配置文件

nginx -s quit

优雅地停止服务

nginx -s reload

重新载入配置文件,用于热更新

nginx -s stop

立即停止服务

systemctl命令

systemctl就不用列举了,和所有其他服务一样,也是startstopreloadstatusrestartenabledisable这几种操作命令。但是这里要指出的是,如果要使用自定义的配置文件,需要去/usr/lib/systemd/system/nginx.service中修改如下两项,利用-c指定配置文件

ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx

成功启动

按照默认配置启动服务

systemctl start nginx

查看下进程

(base) [root@ai-therm ~]# ps -ef | grep nginx
root     27212     1  0 May29 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx    27213 27212  0 May29 ?        00:00:00 nginx: worker process
nginx    27214 27212  0 May29 ?        00:00:00 nginx: worker process
root     27377 26533  0 00:05 pts/0    00:00:00 grep --color=auto nginx

有下面两点注意一下

  • nginx采用master+worker的工作方式,master负责维持worker数量,如果有worker进程消失会马上创建一个新的。worker数量可以在配置文件进行设定。
  • 我这里是用root用户运行的主程序,所以master的用户是root。但是两个worker进程是nginx用户,所以要注意nginx服务要访问的服务器资源必须要nginx用户有权限。worker的运行用户也可以在配置文件进行设定。

启动之后默认是监听在本机所有网卡的80端口的

(base) [root@ai-therm ~]# netstat -ntlp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27212/nginx: master 
tcp6       0      0 :::80                   :::*                    LISTEN      27212/nginx: master

访问一下

nginx探针_nginx探针

能看到这个欢迎页面表示nginx的基本安装没问题,当然不同os的欢迎页面可能不一样,这个没关系。

第一个网页

下面我们试着制作自己在nginx上部署的第一个网页。

首先打开配置文件/etc/nginx/nginx/conf看到下面这一段

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

这里不会讲解配置文件的所有字段和修改,以后会根据不同场景的使用来单独写文章详细说明,例如静态资源,反向代理,负载均衡等等

server开头的这一段定义了一个监听在80端口的web服务,以后需要在一台机器上运行多个web服务就复制这一块配置,修改下端口和相应配置即可。其中root字段是该web服务的主目录,所有返回的资源都从这里查找。location字段用来匹配请求的url,当出现以/开头的url时,执行默认操作,也就是去root中查找对应资源进行返回。所以如果我请求的是/xiaofu.html的话就会去查找/usr/share/nginx/html/xiaofu.html这个文件,存在就返回,不存在就返回404。

location可以存在多个,且存在优先级关系。关于location多种匹配方式及其对应的操作也会在后面单独详细讲解

下面创建/usr/share/nginx/html/xiaofu.html文件如下

<h2>xiaofu's hobby</h2>
<ul>
<li>Basketball</li>
<li>Swimming</li>
<li>Hiking</li>
</ul>

保存然后重新加载配置

是的,nginx可以直接热更新,不用中断业务

systemctl reload nginx

访问看看

nginx探针_nginx探针_02

成功了。

总结

总结下几个关键点

  • 可以源码安装也可以yum安装,官网都有详细步骤,推荐直接yum安装
  • 操作也可以用nginx命令或者systemctl命令,如果是非默认路径的配置文件要注意声明
  • nginx是master+worker模式,需要注意worker启动的用户权限问题
  • server配置块用来声明一个web服务,默认的是80端口