Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务(摘自百度百科)。
Nginx在互联网项目中使用频繁,刚好最近在学习Nginx的知识,所以就用小本本记下学习成果,和诸君分享。
0x01 本篇学习目标
- 了解nginx;
- 了解反向代理;
- 如何使用nginx配置反向代理;
0x02 Nginx概念以及应用场景
- 正如上面所说,Nginx是一个高性能的HTTP和反向代理web服务器。支持在高并发情况下进行负债均衡,可以作为Apache服务器的替代品。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比同类产品好很多。
- 在这里,我们知道了Nginx是一个web服务器,那么它会应用到哪些地方呢?
- http服务器;Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
- 虚拟主机;可以实现在一台服务器虚拟出多个网站
- 反向代理,负载均衡;当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
- 安全管理;比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
0x03 Nginx安装
- 这里首先简单说一下在windows上如何使用,Linux上面安装nginx后面在补上。
- windows平台
- 到官网http://nginx.org/en/download.html中下载对应版本的windows平台的nginx。我这里下载的是
1.14.2
- 解压到目录。
- 目录结构如下:
- 目录结构如下:
- 双击
nginx.exe
运行 - 黑框会一闪而过,这时候怎样判断nginx是否启动成功了呢?或者说启动有没有报错呢?
- 打开logs目录
- 查看error.log中是否有错误信息。如果没有,则说明启动没有报错。
- 浏览器输入
http://127.0.0.1
如果看到如下界面,则说明启动成功
- 总体来说,在windows平台上使用Nginx还是挺简单的,但是在Linux上可就不一定。下面就来说说如何在Linux上安装Nginx。
- 到官网http://nginx.org/en/download.html中下载对应版本的windows平台的nginx。我这里下载的是
- Linux平台(以centos7作为例子)
- 首先如果我们Linux上面没有gcc环境,则需要通过下面的命令安装。因为nginx是C语言写的,编译需要依赖 gcc 环境。
yum install gcc-c++
- 安装
PCRE pcre-devel
,nginx 的 http 模块使用 pcre 来解析正则表达式。所以我们通过下面命令进行安装即可yum install -y pcre pcre-devel
- 安装
zlib
.zlib提供许多解压和压缩的方式,nginx通过zlib对 http 包的内容进行 gzip。安装命令如下:yum install -y zlib zlib-devel
- 安装
OpenSSL
.OpenSSL 是一个强大的安全套接字层密码库.拥有ssl、常见的密码算法、常见的密钥和证书等。因为nginx不仅支持http,还支持https。所以需要安装一下OpenSSL.命令如下:yum install -y openssl openssl-devel
- 接下来我们去Nginx官网的下载页面下载对应版本的.tar.gz包。或者直接使用wget命令下载。wget下载命令如下(这里下的是1.16.0版) :
wget -c https://nginx.org/download/nginx-1.16.0.tar.gz
- 下载完后,使用
tar -zxf nginx-16.0.tar.gz
命令解压 - 进入解压目录。执行如下命令:
./configure
make && make install
- 使用
where nginx
命令查找nginx安装目录。 - cd到指定目录,使用
./nginx
启动nginx。 - nginx常用命令
nginx -s stop
:退出nginxnginx -s reload
:重新加载nginx配置文件而不重启nginx
- 首先如果我们Linux上面没有gcc环境,则需要通过下面的命令安装。因为nginx是C语言写的,编译需要依赖 gcc 环境。
0x04 Nginx虚拟主机配置
- Nginx的配置全部都在
conf
这个文件夹下面的nginx.conf
文件中。我稍微的处理了下,把注释的全部都删了 nginx.conf
结构如下(图是网上找的,原图链接:https://www.imydl.tech/lnmp/527.html):
- 让我们对照上面的图来一一对 默认的配置进行解析吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51#在nginx配置文件中‘#’用作注释
#这是全局块
#worker_processes是指定Nginx进程最多可以产生的worker process数(即进程数)
worker_processes 1;
# events{}包含的就是events块
events {
#配置允许每一个worker process可以同时开启的最大连接数
worker_connections 1024;
}
#被http{}包裹的就是http块
http {
#http全局块
#include命令是包含的意识。这里是引入mime.types文件。该文件在conf目录下
#MIME-Type指的是网络资源的媒体类型,也即前端请求的资源类型
include mime.types;
default_type application/octet-stream;
#用于开启或关闭使用sendfile()传输文件,默认off
sendfile on;
#server端对连接的保持时间
keepalive_timeout 65;
#被server{}包裹的是server块,一个http块中可以有多个server块
server {
#server全局块
#listen表示监听的端口,可以配置成地址形式
listen 80;
#server_name表示可接收请求的域名,可使用正则。
server_name localhost;
# 以上配置表明该server块只处理localhost:80的请求
#使用location{}包裹的是location块 /代表所有请求
location / {
#配置根路径
root html;
#配置主页
index index.html index.htm;
}
#以上配置说明:只要是localhost:80下的请求。
#不管是localhost:80/aaa/bbb还是localhost:80/ccc都会映射到html路径下的对应文件
#主页的路径是html/index.html
#server全局块
#error_page配置的是错误页地址
error_page 500 502 503 504 /50x.html;
# location块,‘=’表示严格匹配。即只要是/50x.html都会映射到html路径中
location = /50x.html {
root html;
}
}
} - 下面让我们在在根目录建立一个
test
目录,来演示下如何配置请求不同,访问的目录也不同(即虚拟主机)- 我们复制一下html中的index.html到test目录中。然后简单修改下。即在标题中加一个test以作区分。
- 修改配置文件nginx.conf。修改好的配置如下(假设我们访问localhost:81/index会访问到test目录中的index.html文件): 可以看到要配置多个虚拟主机,只需要在http块中多添加几个server块就行了。然后监听不同的端口,指向不同的路径。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 这是原先的server
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#这是新加的server
server {
#监听81端口
listen 81;
#域名匹配为localhost
server_name localhost;
#所有请求
location / {
#根路径为test,这里的路径是相对路径,相对于nginx根路径,即最上层路径
root test;
#主页为index.html如果index.html找不到,则会找index.htm
index index.html index.htm;
}
#错误页配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
} - 重启nginx。注意:在windows平台上面不能使用命令去重启nginx,只能在任务管理器中把nginx进程kill掉,在重新打开。
- 访问localhost:81.效果如下:
- 到此,我们配置虚拟主机已经成功了。下面我们来看看反向代理。
- 我们复制一下html中的index.html到test目录中。然后简单修改下。即在标题中加一个test以作区分。
0x05 反向代理概念&如何使用Nginx配置反向代理
- 反向代理概念:
- 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。nginx使用
proxy_pass
转发请求。下面就让我们看看怎么配置吧。
- 使用Nginx配置反向代理
- 这里需要我们启动1个服务器。我这里以tomcat作为服务器,运行两个java项目,里面都只有1个html文件。
- 配置nginx.conf,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#还是两个不同的server块
server {
#监听的端口都是80,但server_name不同。
listen 80;
server_name www.zyzling.top;
location / {
#使用server_pass对请求到www.zyzling.top的所有请求都转发给127.0.0.1:8080/test1
#注意一定要以‘;’结束。
proxy_pass 127.0.0.1:8080/test1/;
}
}
server {
listen 80;
server_name bbs.zyzling.top;
location / {
proxy_pass 127.0.0.1:8080/test2/;
}
}
} - 因为我们是本地玩,没有域名。所以我们需要改host文件。修改如下:
1
2127.0.0.1 www.zyzling.top
127.0.0.1 bbs.zyzling.top - 重启nginx
- 效果如下:
- www.zyzling.top
- bbs.zyzling.top
- www.zyzling.top
- 反向代理到此也告一段落了。我们来总结下。
0x06 总结
- 该篇只是Nginx的第一篇,所以内容很简单,当然也会有很多错误之处,望大家不吝赐教。
- 需要注意的是,每句非块配置后面一定要加’;'作为结束,不然启动会报错。
- 反向代理其实配置很简单,命令为
proxy_pass
.这个在我前面的从jekyl到Hexo一文中有用过。我的博客就是通过该方法转发的。 - 后面我将学习怎样用Nginx做负载均衡,等我学完,再记下笔记,与诸位大佬分享。
- 参考资料:
- 感谢观看~~
评论