Nginx

目录

1. 什么是Nginx?

2. 应用场景

3. Nginx 安装

3.1 安装环境配置

3.2 安装 Nginx 步骤

3.3 启动并访问 Nginx

4. 配置虚拟主机

4.1 通过端口区分不同的虚拟主机

4.1.1 Nginx 配置文件

4.1.2 使用 Notpad++ 连接 Linux

4.1.3 配置 nginx.conf

4.2 通过域名区分不同的虚拟主机

4.2.1 什么是域名

4.2.2 域名级别

4.2.3 域名绑定

4.2.4 配置域名映射

4.2.5 配置 nginx.conf

5. 反向代理

5.1 什么是代理

5.2 正向代理

5.3 反向代理

5.4 Nginx 实现反向代理

6. 负载均衡

6.1 什么是负载均衡

6.2 为什么用负载均衡

6.3 负载均衡策略


1. 什么是Nginx?

Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP / POP3)代理服务器,并在一个BSD-like 协议下发行。

其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:新浪、网易、 腾讯等。

优点:

  • 占用内存少,并发能力强
  • Nginx 专为性能优化而开发,在高连接并发的情况下,能够支持高达 50000 个并发连接数的响应
  • Nginx 支持热部署,可以在不间断服务的情况下,对软件版本进行升级

2. 应用场景

1. HTTP 服务器:Nginx 是一个 http 服务可以独立提供 http 服务,可以做网页静态服务器。

2. 虚拟主机:可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟主机。

3. 反向代理、负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 nginx 做反向代理;并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

3. Nginx 安装

官方网站:

http://nginx.org/en/download.html

版本:1.17.8

Nginx 在 Linux 下安装,只提供了源代码,所以需要进行编译

3.1 安装环境配置

1)因为 Nginx 是 C 语言编写的,所以需要配置 C 语言编译环境(要在联网状态下安装)。

需要安装 gcc 的环境,执行命令:

yum install gcc-c++

如果执行命令出现这样的提示:

解决办法 - 问题是 yum 在锁定状态中,强制关掉 yum 进程即可:

rm -f /var/run/yum.pid

2)第三方的开发包,在编译之前需要安装这些第三方包。

-- PCRE

Nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库

yum install -y pcre pcre-devel

-- zlib

Nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。

yum install -y zlib zlib-devel

-- OpenSSL

OpenSSL 是一个强大的安全套接字层密码库,nginx 不仅支持 http 协议,还支持 https,所以需要在 linux 安装 openSSL 库。

yum install -y openssl openssl-devel

3.2 安装 Nginx 步骤

1)将 Nginx 的源码包上传到 Linux

2)解压 Nginx

tar -xvf nginx-1.17.8.tar

3)进入到解压之后的目录 nginx-1.17.8

4)执行命令 configure 生成 Mikefile 文件

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

执行命令后生成了 MakeFile 文件

5)创建临时文件目录

mkdir /var/temp/nginx/client -p

6)执行 make 命令进行编译

make

7)安装

make install

3.3 启动并访问 Nginx

1)进入到 nginx 安装目录

cd /usr/local/nginx/

2)进入到 sbin 目录执行 nginx 命令

# 启动
./nginx
# 关闭
./nginx -s stop
# 查看进程
ps aux | grep nginx

3)通过浏览器进行访问,默认端口 80(注意放行防火墙端口)

  

# 查看已经开放的端口:
firewall-cmd --list-ports

# 开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

# 重启防火墙
firewall-cmd --reload

4. 配置虚拟主机

虚拟主机指的是在一台服务器中,使用 Nginx 来配置多个网站。

区分不同的网站:

  • 端口不同
  • 域名不同

4.1 通过端口区分不同的虚拟主机

4.1.1 Nginx 配置文件

1)Nginx 配置文件的位置,nginx.conf 就是 Nginx 的配置文件

cd /usr/local/nginx/nginx.conf

2)Nginx 核心配置文件说明

# work 的进程数,默认为 1
worker_processes  1;
# 配置影响 nginx 服务器与用户的网络连接
events {
    # 单个 work 最大并发连接数
    worker_connections  1024;
}

# http 块是配置最频繁的部分,可以嵌套多个 server,配置代理、缓存、日志定义等绝大多数功能
http {
    # 引入 mime 类型定义文件
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    # 超时时间
    keepalive_timeout  65;

    # server 配置虚拟主机的相关参数,可以有多个,一个 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;
        }
    }
}

4.1.2 使用 Notpad++ 连接 Linux

使用 notepad++ 来编辑 linux 中文件的批量文字,会比直接在 linux 中操作方便快捷很多

1)Notepad 插件中安装 NppFTP

2)打开 NppFTP

3)选择设置

4)配置连接信息

5)连接

4.1.3 配置 nginx.conf

1)使用 Notpad++ 在 nginx.conf 中添加一个新的 server

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    # tcp_nopush     on;

    # keepalive_timeout  0;
    keepalive_timeout  65;

    # gzip  on;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
    
    # 配置新的 server
    server {
        # 修改端口,防火墙需要开放 81 端口
        listen       81;
        server_name  localhost;

        location / {
            # 重新制定一个目录
            root   html81;
            index  index.html index.htm;
        }
    }

}

2)复制一份 html 目录

cp -r html html81

3)重新加载配置文件

sbin/nginx -s reload

4)访问

# 访问第一个 server
http://192.168.186.128
# 访问第二个 server
http://192.168.186.128:81/

4.2 通过域名区分不同的虚拟主机

4.2.1 什么是域名

网址就是域名,是一个网站的地址,由域名提供商提供,一般需要购买。例如:www.baidu.com

4.2.2 域名级别

一级域名:
.com
.org
.cn

二级域名 - 在一级域名前加一级
baidu.com
zhihu.com

三级域名:
www.baidu.com
image.baidu.com

4.2.3 域名绑定

  1. 一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定
  2. 通过 DNS 服务器去解析域名

4.2.4 配置域名映射

1)本地测试可以修改 hosts 文件,修改 window 的 hosts 文件:

C:\Windows\System32\drivers\etc

可以配置域名和 ip 的映射关系,如果 hosts 文件中配置了域名和 ip 的对应关系,不需要走 dns 服务器。

配置一下 nginx 的映射

192.168.186.128     www.test.com

2)也可以使用 SwitchHosts 工具修改 hosts

在SwitchHosts 中配置 IP 与域名的映射:

# My hosts edu
192.168.186.128 www.t1.com
192.168.186.128 www.t2.com

4.2.5 配置 nginx.conf

通过域名区分虚拟主机

server {
    listen       80;
    server_name  www.t1.com;

    location / {
        root   html-t1;
        index  index.html index.htm;
    }
}

server {
    listen       80;
    server_name  www.t2.com;

    location / {
        root   html-t2;
        index  index.html index.htm;
    }
}

创建 html-t1 和 html-t2 目录

cp -r html html-t1
cp -r html html-t2

修改一下 index.html 并刷新

sbin/nginx -s reload

访问 www.t1.com 和 www.t2.com

虽然只有一台服务器,但是这台服务器上运行着多个网站,访问不同的域名就可访问到不同的网站内容


5. 反向代理

5.1 什么是代理

代理其实就是一个中介,A 和 B 本来可以直连,中间插入一个 C,C 就是中介。刚开始的时候,代理多数是帮助内网 client 访问外网 server 用的。

客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据再发送给客户机。

5.2 正向代理

比如国内访问谷歌,直接访问访问不到,这里就可以通过一个正向代理服务器,先将请求发送到到代理服务器;代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,从而能访问谷歌了。

正向代理代理的是客户端,服务端不知道实际发出请求的客户端。

客户端和代理成为一个整体与服务端进行交互。

作用:正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁。

5.3 反向代理

反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器(也可以说:正向代理隐藏的是用户,反向代理隐藏的是服务器)。

反向代理是指用代理服务器接收客户端的请求(用户访问的其实是反向代理服务器,但用户不知道),然后将请求转发给网站内部应用服务器,并将从服务器上得到的结果返回给客户端。

服务器和代理成为一个整体与客户端进行交互。

作用:用户请求过多,服务器会有一个处理的极限。所以使用反向代理服务器接受请求,再用均衡负载将请求分布给多个真实的服务器。既能提高效率还有一定的安全性。

5.4 Nginx 实现反向代理

Nginx 作为反向代理服务器安装在服务端,Nginx 的功能就是把请求转发给后面的应用服务器(如 Tomcat)。

配置步骤:

第一步 - 简单的使用 2 个 tomcat 实例模拟两台 http 服务器,分别将 tomcat 的端口改为8080 和 8081


第二步 - 启动两个 tomcat

./bin/startup.sh

# 访问两个 tomcat
http://192.168.186.128:8080/
http://192.168.186.128:8081/ 

第三步:反向代理服务器的配置

# 反向代理配置 
# upstream 中的 server 是真正处理请求的应用服务器地址
upstream demo1{
    # 用 server 定义 HTTP 地址
    server 192.168.186.128:8080;
}

server {
    listen       80;
    server_name  www.demo1.com;
    location / {
        # 利用 proxy_pass 可以将请求代理到 upstream 命名的 HTTP 服务
        proxy_pass http://demo1;
        index  index.html index.htm;
    }
}

upstream demo2{
    # 用 server 定义 HTTP 地址
    server 192.168.186.128:8081;
}

server {
    listen       80;
    server_name  www.demo2.com;
    location / {
        # 转发到的地址
        proxy_pass http://demo2; 
        index  index.html index.htm;
    }
}

第四步 - nginx 重新加载配置文件

nginx -s reload

第五步 - 配置域名,在 hosts 文件中添加域名和 ip 的映射关系

# My hosts edu
192.168.186.128 www.demo1.com
192.168.186.128 www.demo2.com

通过浏览器输入域名,访问 Nginx 代理服务器,Nginx 根据域名将请求转发给对应的目标服务器,作为用户看到的是服务器的响应结果页面,在整个过程中目标服务器相对于客户端是不可见的,服务端向外暴露的就是 Nginx 的地址。


6. 负载均衡

6.1 什么是负载均衡

当一个请求发送过来的时候,Nginx 作为反向代理服务器,会根据请求找到后面的目标服务器去处理请求,这就是反向代理。

如果目标服务器有多台的话,找哪一个服务器去处理当前请求呢 ? 这个合理分配请求到服务器的过程就叫做负载均衡。

6.2 为什么用负载均衡

当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展;负载均衡主要是为了分担访问量,将请求合理分发给不同的服务器,避免临时的网络堵塞。

6.3 负载均衡策略

  • 轮询 - polling

默认策略,每个请求按照时间顺序逐一分配到不同的服务器,如果某一个服务器下线,能自动剔除。

# 负载均衡
upstream zmServer{
    # 用 server 定义 HTTP 地址
    server 192.168.186.128:8080;
    server 192.168.186.128:8081;
}

server {
    listen       80;
    server_name  www.zm.com;
    location / {
        # 利用 proxy_ pass 可以将请求代理到 upstream 命名的 HTTP 服务
        proxy_pass   http://zmServer;
        index  index.html index.htm;
    }
}
  • 权重 - weight

可以根据服务器的实际情况调整服务器权重;权重越高分配的请求越多,权重越低,请求越少,默认是都是 1。

# 负载均衡
upstream zmServer{
    # 用 server 定义 HTTP 地址
    server 192.168.186.128:8080 weight=1;
    server 192.168.186.128:8081 weight=10;
}

server {
    listen       80;
    server_name  www.zm.com;
    location / {
        # 利用 proxy_ pass 可以将请求代理到 upstream 命名的 HTTP 服务
        proxy_pass   http://zmServer;
        index  index.html index.htm;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值