Nginx概述

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

官网:https://nginx.org/

下载和安装

在Nginx的官网的下载页面中(nginx: download),就展示了当前Nginx版本,并提供了下载的连接。 如下:

nginx 公众号_负载均衡

 安装依赖包

由于nginx是基于c语言开发的,所以需要安装c语言的编译环境,及正则表达式库等第三方依赖库。

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

下载Nginx安装包

yum install wget

根据自己下载的版本修改 

wget https://nginx.org/download/nginx-1.16.1.tar.gz

 解压nginx压缩包

tar -zxvf nginx-1.16.1.tar.gz

 配置Nginx编译环境

cd nginx-1.16.1
./configure --prefix=/usr/local/nginx

说明:

--prefix 指定的目录,就是我们安装Nginx的目录。

 编译&安装

make & make install

nginx 公众号_nginx_02

 

Nginx-常用命令

查看版本

./nginx -v

 

nginx 公众号_Nginx_03

 检查配置文件

修改了nginx.conf核心配置文件之后,在启动Nginx服务之前,可以先检查一下conf/nginx.conf文件配置的是否有错误,命令如下:

./nginx -t

 

nginx 公众号_nginx 公众号_04

 启动

./nginx

 启动之后,我们可以通过ps -ef指令来查看nginx的进程是否存在。

nginx 公众号_Nginx_05

 注意: nginx服务启动后,默认就会有两个进程。  

启动之后,我们可以直接访问Nginx的80端口 http://192.168.200.200 (这里输入自己的ip地址) 

nginx 公众号_nginx_06

 

注意:

要想正常访问Nginx,需要关闭防火墙或开放指定端口号,执行的指令如下:

A. 关闭防火墙

systemctl stop firewalld

B. 开放80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

firewall-cmd --reload

停止

./nginx -s stop

重新加载

当修改了Nginx配置文件后,需要重新加载才能生效,可以使用下面命令重新加载配置文件:

./nginx -s reload

环境变量配置

在上述我们在使用nginx命令在进行服务的启动、停止、重新加载时,都需要用到一个指令nginx,而这个指令是在nginx/sbin目录下的,我们每一次使用这个指令都需要切换到sbin目录才可以,使用相对繁琐。那么我们能不能在任意目录下都可以执行该指令来操作nginx呢?答案是可以的,配置nginx的环境变量即可。  

通过vim编辑器,打开/etc/profile文件, 在PATH环境变量中增加nginx的sbin目录,如下:

nginx 公众号_负载均衡_07

修改完配置文件之后,需要执行 source /etc/profile 使文件生效。 接下来,我们就可以在任意目录下执行nginx的指令了; 

Nginx-应用

配置文件结构

nginx的配置文件(conf/nginx.conf)整体上分为三部分: 全局块、events块、http块。这三块的分别配置什么样的信息呢,看下表:

nginx 公众号_负载均衡_08

具体结构图如下:

nginx 公众号_负载均衡_09

 

在全局块、events块以及http块中,我们经常配置的是http块。

在http块中可以包含多个server块,每个server块可以配置多个location块。

部署静态资源

Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源。

相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中。

将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。

server {
    listen 80;				#监听端口	
    server_name localhost;	#服务器名称
    location / {			#匹配客户端请求url
        root html;			#指定静态资源根目录
        index index.html;	#指定默认首页
    }
}

将静态资源上传到 /usr/local/nginx/html 目录(hello.html是自己随便创建的,测试用的)

nginx 公众号_nginx 公众号_10

 

启动nginx

nginx 公众号_Nginx_11

 

 访问

nginx 公众号_nginx 公众号_12

nginx 公众号_nginx 公众号_13

  

上面nginx默认首页也可以更换的

nginx 公众号_运维_14

nginx -s reload

nginx 公众号_负载均衡_15

 

反向代理

nginx 公众号_nginx_16

 

nginx 公众号_运维_17

 

那么在本小节,我们就是要使用nginx来作为反向代理服务器使用。 在nginx中,我们可以在nginx.conf中配置反向代理:

server {
    listen 82;
    server_name localhost;
    location / {
        proxy_pass http://192.168.200.201:8080; 	#反向代理配置,将请求转发到指定服务
    }
}

上述配置的含义为: 当我们访问nginx的82端口时,根据反向代理配置,会将请求转发到 http://192.168.200.201:8080 对应的服务上。

测试

nginx 公众号_Nginx_18

在192.168.200.200中的nginx.conf中配置反向代理

进入nginx的安装目录,并编辑配置文件nginx.conf:

cd /usr/local/nginx/conf/
vim nginx.conf

在http块中,再添加一个server块虚拟主机的配置,监听82端口,并配置反向代理proxy_pass:

server {
    listen 82;
    server_name localhost;
    location / {
        proxy_pass http://192.168.200.201:8080; 	#反向代理配置,将请求转发到指定服务
    }
}

nginx 公众号_nginx 公众号_19

 

检查配置文件,并重新加载

nginx -t
nginx -s reload

nginx 公众号_Nginx_20

 

systemctl stop firewalld

==B. 开发指定端口==

 

firewall-cmd --zone=public --add-port=82/tcp --permanent

firewall-cmd --reload

负载均衡

nginx 公众号_nginx 公众号_21

 

在nginx中配置负载均衡

#upstream指令可以定义一组服务器
upstream targetserver{	
    server 192.168.200.201:8080;   # 输入自己的ip和端口
    server 192.168.200.201:8081;
}

server {
    listen       8080;
    server_name  localhost;
    location / {
        proxy_pass http://targetserver;
    }
}

nginx 公众号_nginx_22

 

配置好后要重新加载nginx配置文件

nginx -s reload

注意: 上述所有涉及到的端口号,都需要在对应的服务器的防火墙中开放,或者彻底关闭防火墙

负载均衡策略

处理上述默认的轮询策略以外,在Nginx中还提供了其他的负载均衡策略,如下:

nginx 公众号_运维_23

 权重的配置:

#upstream指令可以定义一组服务器
upstream targetserver{	
    server 192.168.200.201:8080 weight=10;
    server 192.168.200.201:8081 weight=5;
}

 上述配置的weight权重是相对的,在上述的配置中,效果就是,在大数据量的请求下,最终8080接收的请求数是8081的两倍。