Nginx随笔

Nginx的概念

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

由俄罗斯的程序设计师Igor Sysoev(伊戈尔·西索夫)开发,供俄罗斯大型的入口网站及搜索引擎Rambler(漫步者)(俄文:Рамблер)使用。

其特点是占有内存少,并发能力强。中国大陆使用nginx的网站用户有:新浪、网易、 腾讯等企业。

优点:

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

应用场景

  1. http服务器:作为网页静态服务器来使用。
  2. 虚拟主机:可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
  3. 反向代理,负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要使用多台服务器集群,此时可以使用nginx做反向代理。且多台服务器可以平均分担负载,不会出现因某台服务器高负载宕机而导致服务器闲置的情况。

Nginx的安装

  • 官方网站:http://nginx.org/
  • 我们这里使用1.17.8版本来演示Nginx在Linux系统下的安装。

请添加图片描述

  • Nginx只提供了源代码,所以我们首先需要进行编译。

安装环境配置

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

# 安装gcc环境
yum install -y gcc-c++

如果执行命令后出现以下提示,则表示yum当前处于锁定状态中:
请添加图片描述
解决方案:

# 强制关掉yum进程
rm -f /var/run/yum.pid

在编译之前安装第三方的开发包

# PCRE:nginx的http模块使用pcre来解析正则表达式
yum install -y pcre pcre-devel

# zlib:nginx使用zlib对http包的内容进行gzip
yum install -y zlib zlib-devel

# OpenSSL:一个强大的安全套接字层密码库,nginx不仅支持http协议,还支持https
yum install -y openssl openssl-devel

安装Nginx

将Nginx的源码包上传到Linux服务器并进行解压:

# 解压源码包
tar -xvf nginx-1.17.8.tar 

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

cd nginx-1.17.8

执行命令,生成MakeFile文件

./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 \
--add-module=/opt/fastdfs-nginx-module/src
# 创建临时文件目录
mkdir -p /var/temp/nginx/client

# 执行make命令进行编译
make

# 安装
make install

请添加图片描述

Nginx核心配置文件说明

文件路径:/usr/local/nginx/conf/nginx.conf

# work的进程数,默认为1
worker_processes  1; 

# 配置影响nginx服务器与用户的网络连接
events {
    worker_connections  1024; # 单个work最大并发连接数
}

# 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;
        }
    }
}

启动并访问Nginx

# 进入到sbin目录
cd /usr/local/nginx/sbin

# 启动Nginx
./nginx

通过浏览器访问,弹出如下界面则表示启动成功(此处建议关闭防火墙)。
请添加图片描述

配置虚拟主机

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

通过端口号与域名来区分不同的网站。

通过端口号区分虚拟主机

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 {
        listen       81; # 修改端口
        server_name  localhost;

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

# 重载配置文件
sbin/nginx -s reload
# 访问第一个server
http://192.168.52.100

# 访问第二个server
http://192.168.52.100:81

通过域名区分虚拟主机

域名的概念:

简单理解:网址就是域名,也就是一个网站的地址,由域名提供商提供,一般需要购买。

域名的级别:

  • 一级域名
    • 例如:.com .org .cn
  • 二级域名
    • 二级域名:在一级域名前加一级
    • 例如:baidu.com zhihu.com
  • 三级域名
    • 例如:www.baidu.com image.baidu.com

域名的绑定:

  • 一个域名对应一个ip地址,而一个ip地址可以被多个域名绑定。
  • 通过DNS服务器解析域名。

配置域名映射:

  • 本地测试可以修改windows的hosts文件:C:\Windows\System32\drivers\etc\hosts
  • 如果hosts文件中配置了域名和ip的映射关系,则不需要走dns服务器。
# 配置nginx的域名映射
192.168.52.100 www.ng.com

请添加图片描述

请添加图片描述
配置域名映射:
请添加图片描述
配置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

# 重载nginx
sbin/nginx -s reload

访问:(此前修改了index.html文件,以区分两个域名访问时的内容)
请添加图片描述
请添加图片描述

反向代理

代理的概念

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

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

正向代理

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

请添加图片描述

反向代理

而反向代理则恰恰相反——代理服务器端。

反向代理:用代理服务器接收客户端的请求,然后将请求转发给网站内部应用服务器,并将从服务器上得到的结果返回给客户端。

请添加图片描述

Nginx实现反向代理

Nginx作为反向代理服务器安装在服务端。

作用:接收客户端的请求,转发给应用服务器。

请添加图片描述

配置步骤:

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

请添加图片描述

  1. 启动tomcat
# 启动tomcat
./bin/startup.sh

# 访问两个tomcat
http://192.168.52.100:8080/
http://192.168.52.100:8081/ 
  1. 配置反向代理服务器
	# 反向代理配置 
	# upstream中的server是真正处理请求的应用服务器地址
	upstream test1{
		# 用server定义HTTP地址
		server 192.168.52.100:8080;
	}
	
	server {
        listen       80;
        server_name  www.test1.com;
        location / {
        	# 利用 proxy_ pass可以将请求代理到upstream命名的HTTP服务
            proxy_pass http://test1;  # 转发到的地址
            index  index.html index.htm;
        }
    }
	
	upstream test2{
		# 用server定义HTTP地址
		server 192.168.52.100:8081;
	}
	
	server {
        listen       80;
        server_name  www.test2.com;
        location / {
            proxy_pass http://test2; 
            index  index.html index.htm;
        }
  }
  1. 重载Nginx
nginx -s reload
  1. 在本地hosts文件中添加域名和ip的映射关系
192.168.52.100 www.test1.com
192.168.52.100 www.test2.com

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

负载均衡

负载均衡的概念

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

那么,如果存在多台目标服务器的话,应该找哪一台服务器去处理当前的请求呢?

这个合理分配请求到服务器的过程就叫做负载均衡。

请添加图片描述

为什么使用负载均衡

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

负载均衡的策略

轮询方式:

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

# 轮询式负载均衡
upstream testServer{
	# 用server定义HTTP地址
	server 192.168.52.100:8081;
	server 192.168.52.100:8082;	# 直接在此处配置server即开启了轮询方式的负载均衡
}

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

权重方式:

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

# 权重式负载均衡
upstream testServer{
	# 用server定义HTTP地址
	server 192.168.52.100:8081 weight=1;	# 使用weight关键字来定义权重
	server 192.168.52.100:8082 weight=10;
}

★ Nginx服务器配置详解 ★

点我传送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值