Nginx快速入门
Nginx安装
根据前文的部署方案,需要在server02
部署Nginx。Nginx官网有详细的安装步骤,具体内容可参考官方文档。
配置Nginx yum存储库
创建
/etc/yum.repos.d/nginx.repo
文件1
vim /etc/yum.repos.d/nginx.repo
增加如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true在线安装Nginx
执行以下命令,安装Nginx
1
yum -y install nginx
启动Nginx
执行以下命令启动Nginx
1
systemctl start nginx
执行以下命令查看Nginx运行状态
1
systemctl status nginx
执行以下命令设置开机自启
1
systemctl enable nginx
访问Nginx服务默认首页
访问
http://192.168.10.102
,能访问到如下页面,则证明Nginx运行正常。
9.2.2 重要的目录、文件
Nginx中有很多十分重要的目录或者文件,下面对核心内容进行介绍
- 配置文件相关
/etc/nginx/
:主要的Nginx配置文件目录。/etc/nginx/nginx.conf
:Nginx的主配置文件,包含全局配置信息。
- 日志相关
/var/log/nginx/
:Nginx的日志文件目录,包括访问日志和错误日志。/var/log/nginx/access.log
:访问日志,记录所有进入服务器的请求。/var/log/nginx/error.log
:错误日志,记录服务器处理过程中的错误信息。
9.2.3 配置文件概述
配置文件结构
nginx.conf
文件层次分明,整个文件分为多个区块(block),每个区块下可配置各种参数,也可包含其子级区块,具体结构如下图所示nginx.conf
通过include /etc/nginx/conf.d/*.conf
引入了/etc/nginx/conf.d
目录下的所有.conf
文件,该目录下的配置文件结构如下图所示重要配置说明
下面分块介绍重要的配置参数
main block
main block
位于配置文件的最外层,其包含了影响Nginx服务器整体行为的全局参数,例如user
:定义Nginx工作进程的用户和用户组。worker_processes
:指定Nginx使用的工作进程数。error_log
:配置全局错误日志文件路径。
events block
events block
位于main block
中,用于配置Nginx服务器的事件处理机制,主要配置Nginx如何处理客户端连接。http block
http block
位于main block
中,用于配置HTTP服务器相关功能。例如access_log
:指定访问日志的路径log_format
:指定访问日志的格式
server block
server block
位于http block
,用于配置虚拟主机,一个Nginx服务可包含多个虚拟主机,每个虚拟主机都可以独立的提供服务,因此借助Nginx,我们可以在一台服务器部署多个独立的网站,如下图所示每个虚拟主机使用一个
server block
进行配置,配置的内容包括listen
:虚拟主机监听的端口号。server_name
:指定虚拟主机的域名或者IP。
location block
location block
位于server block
,用于配置请求的处理逻辑,一个server block
中可以包含多个location block
,例如1
2
3
4
5
6
7
8
9
10
11server {
listen 80;
server_name www.atguigu.com;
location /index {
root /var/www/html;
}
location /api {
proxy_pass http://backend-api;
}
}
9.2.4 静态资源服务器案例
下面完成一个简单案例,使用Nginx作为静态资源服务器。
项目资料中有一个简单的前端项目hello-nginx
,其中只包含html、css等静态资源,现将其部署在server02
上。
上传静态资源到服务器
将
hello-nginx.zip
上传到server02
服务器任意路径。解压
hello-nginx.zip
到/usr/share/nginx/html
中1
unzip hello-nginx.zip -d /usr/share/nginx/html
最终的路径结构如下
1
2
3
4
5
6
7
8
9
10/usr
└── share
└── nginx
└── html
└── hello-nginx
├── css
│ └── style.css
├── images
│ └── img.png
└── index.html配置Nginx虚拟主机
虚拟主机的配置应位于
/etc/nginx/nginx.conf
的server block中,由于/etc/nginx/nginx.conf
的http bolck中引入了/etc/nginx/conf.d/*.conf
,所以虚拟主机在/etc/nginx/conf.d/
目录下的任意.conf
文件配置即可。创建
/etc/nginx/conf.d/hello-nginx.conf
文件1
vim /etc/nginx/conf.d/hello-nginx.conf
添加如下内容
1
2
3
4
5
6
7
8
9server {
listen 8080;
server_name 192.168.10.102;
location /hello-nginx {
root /usr/share/nginx/html;
index index.html;
}
}重新加载Nginx的配置文件
1
systemctl reload nginx
访问项目
访问路径为http://192.168.10.102:8080/hello-nginx,若部署成功,可见到如下页面
案例剖析
下面通过上述案例来了解Ngxin处理请求的逻辑。
匹配server
由于Nginx中可存在多个虚拟主机的配置,故接收到一个请求后,Nginx首先要确定请求交给哪个虚拟主机进行处理。这很显然是根据
server_name
和listen
进行判断的。例如上述的请求路径http://192.168.10.102:8080/hello-nginx,就会匹配到以下的虚拟主机1
2
3
4
5server {
listen 8080;
server_name 192.168.10.102;
......
}匹配location
由于一个server block中可能包含多个location block,故Nginx在完成server匹配后,还要匹配location,location的匹配是根据请求路径进行判断的。例如以下写法
location
关键字后边的/hello-nginx
就是匹配规则,它表达的含义是匹配以/hello-nginx
为前缀的请求,例如上述的http://192.168.10.102:8080/hello-nginx请求就会匹配到该**location**,而http://192.168.10.102:8080/nginx则不会。
1
2
3location /hello-nginx {
......
}定位文件
完成location的匹配后,Nginx会以location block中的
root
作为根目录,然后查找请求路径对应的资源,例如以下配置1
2
3
4location /hello-nginx {
root /usr/share/nginx/html;
index index.html;
}当请求http://192.168.10.102:8080/hello-nginx 时,Ngxin会在
/usr/share/nginx/html/hello-nginx
路径中查找资源,由于该路径为目录(而非文件),故Nginx会在该目录下寻找index
,也就是上述配置的index.html
。然后将index.html
响应给客户端。至此,该请求的处理就结束了。注意:上述提到的server_name和location均有多种匹配模式,例如精确匹配、前缀匹配、正则匹配,此处不再展开。
9.2.5 反向代理案例
下面完成一个简单案例,使用Nginx作为反向代理。
使用Nginx反向代理其他网站,比如http://www.atguigu.com
。
配置虚拟主机
创建
/etc/nginx/conf.d/hello-proxy.conf
文件1
vim /etc/nginx/conf.d/hello-proxy.conf
内容如下
1
2
3
4
5
6
7
8server {
listen 9090;
server_name 192.168.10.102;
location / {
proxy_pass http://www.atguigu.com;
}
}重新加载Nginx配置文件
1
systemctl reload nginx
观察代理效果
注意:借助反向代理功能,Nginx可以实现负载均衡等高级功能,此处不再展开。
9.3 配置域名映射
现实生活中,几乎所有的网站都是通过域名去访问。真正的域名需要付费购买,此处在宿主机本地配置一下域名映射,模拟一下域名的效果即可。
我们准备两个域名lease.atguigu.com
和admin.lease.atguigu.com
,前者用于访问移动端网站,后者用于访问后台管理系统。由于两个前端项目都部署在server02
上,所以两个域名均指向server02
的IP。
Windows的域名映射配置文件位于C:\Windows\System32\drivers\etc\hosts
,需要使用管理员身份修改。使用管理员身份运行任意文本编辑器,然后使用其打开hosts
文件,并增加如下内容:
1 | 192.168.10.102 lease.atguigu.com admin.lease.atguigu.com |
修改完毕记得保存。