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 | 启动服务,接 |
nginx -s quit | 优雅地停止服务 |
nginx -s reload | 重新载入配置文件,用于热更新 |
nginx -s stop | 立即停止服务 |
systemctl命令
systemctl就不用列举了,和所有其他服务一样,也是start
,stop
,reload
,status
,restart
,enable
,disable
这几种操作命令。但是这里要指出的是,如果要使用自定义的配置文件,需要去/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的基本安装没问题,当然不同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
访问看看
成功了。
总结
总结下几个关键点
- 可以源码安装也可以yum安装,官网都有详细步骤,推荐直接yum安装
- 操作也可以用nginx命令或者systemctl命令,如果是非默认路径的配置文件要注意声明
- nginx是master+worker模式,需要注意worker启动的用户权限问题
- server配置块用来声明一个web服务,默认的是80端口