第一章 快速入门


文章目录

  • 第一章 快速入门
  • 一、介绍
  • 1.引入
  • 2.什么是 Nginx
  • 3.Nginx 作用
  • 二、Windows 下使用
  • 1.启动 Nginx
  • 2.配置监听
  • 3.关闭 nginx
  • 三、Linux 下使用
  • 1.安装 gcc
  • 2.安装 PCRE pcre-devel
  • 3.安装 zlib
  • 4.安装 OpenSSL
  • 5.下载 Linux 版的 Nginx 安装包
  • 6.解压
  • 7.配置
  • 8.Nginx 常用命令
  • 五、Nginx 配置文件结构


一、介绍

1.引入

公司项目刚刚上线的时候,并发量小,用户使用的少,所以在第并发的情况下,一个 jar 包启动应用就够了,然后内部 Tomcat 返回内容给用户

但是慢慢地,使用的用户越来越多,并发量开始增大,这时候一台服务器满足不了用户的需求

于是我们横向扩展,又增加了服务器,这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器,帮助我们转发和处理请求

我们希望这个服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望可以按照服务器的性能提供不同的权重选择。因此,我们使用了 Nginx

2.什么是 Nginx

Nginx(egine x)是一个高性能的 HTTP 和反向代理 WEB 服务器,同时也提供了 IMAP / POP3 / SMTP 服务。Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二大的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。2011 年 6 月 1 日,nginx 1.0.4 发布

其特点是占用内存少,开发能力强,事实上 Nginx 的并发能力在同类型的网页服务器中表现较好,中国大陆使用 Nginx 的用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有 12.18% 的使用比率,大约为 2200 万个网站

Nginx 是一个安装非常简单、配置文件非常简洁、Bug 非常少的服务。Nginx 启动特别容易,并且几乎可以做到 7 * 24 不间断运行,即使运行数个月也不需要重新启动。此外,还能够不间断服务的情况下进行软件版本的升级

Nginx 代码完全用 C 语言写成,官方数据测试表明能够支持高达 50,000 个并发连接数的响应

3.Nginx 作用

1、HTTP 代理,反向代理

作为 WEB 服务器最常用的功能之一,尤其是反向代理

正向代理

nginx 配置拦截特殊字符请求 nginx 拦截指定请求_服务器


反向代理

nginx 配置拦截特殊字符请求 nginx 拦截指定请求_Nginx_02

2、提供两类负载均衡策略

内置策略:轮询策略、加权轮询策略、ip_hash 策略
扩展策略:url_hash 策略、fair 策略、sticky 策略

对于扩展策略是需要我们在安装时额外添加第三方模块才能实现的

轮询

nginx 配置拦截特殊字符请求 nginx 拦截指定请求_nginx 配置拦截特殊字符请求_03


配置

upstream backserver {
	server 192.168.0.14;
	server 192.168.0.15;
}

加权轮询

nginx 配置拦截特殊字符请求 nginx 拦截指定请求_nginx_04


配置

upstream backserver {
	server 192.168.0.14 weight=10;
	server 192.168.0.15 weight=10; 
}

ip_hash 策略

对客户端请求的 ip 进行 hash 操作,然后根据 hash 结果将同一个客户端 ip 的请求分发给同一台服务器进行处理,可以解决 session 不共享的问题

nginx 配置拦截特殊字符请求 nginx 拦截指定请求_Nginx_05


配置

upstream backserver {
	ip_hash;
	server 192.168.0.14:88;
	server 192.168.0.15:80; 
}
  • 动静分离
    在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js 等),这些不需要经过后台处理的文件称为静态文件。Nginx 让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,提高资源响应速度

通过使用 Nginx 可以大大提高我们网站的响应速度,优化用户体验,让网站的健壮性更上一层楼

二、Windows 下使用

1.启动 Nginx

有两种方式:

  1. 直接双击 nginx.exe
  2. 打开 cmd 命令窗口,跳转到 nginx 目录下,输入命令 nginx.exe 回车

检查 nginx 是否启动成功

在浏览器地址栏输入 http://localhost:80,回车,出现 “Welcome to nginx!” 说明启动成功

2.配置监听

nginx 的配置文件是 conf 目录下的 nginx.conf,默认配置的监听端口为 80,如果端口被占用可以修改为未被占用的端口

当我们修改了 nginx 的配置文件 nginx 后,不需要关闭 nginx,只需要执行 nginx -s reload 即可让改动生效

3.关闭 nginx

  1. 打开 cmd 命令窗口,跳转到 nginx 目录下,输入命令 nginx -s stop(快速停止)或者 nginx -s quit(完整有序地停止)
  2. 打开 cmd 命令窗口,输入 taskill 命令 taskkill /f /t /im nginx.exe 回车

taskkill 是用来终止进程的
/f 强制终止
/t 终止指定的进程和任何由此启动的子进程
/im 指定进程名称

三、Linux 下使用

1.安装 gcc

安装 Nginx 需要先将官网下载的源码进行编译,依赖 gcc 环境,如果没有 gcc 环境,则需要安装

yum install gcc-c++

2.安装 PCRE pcre-devel

PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 Perl 兼容的正则表达式库。Nginx 的 HTTP 模块使用 PCRE 来解析正则表达式,所以需要在 Linux 上安装 PCRE 库,pcre-devel 是使用 PCRE 开发的一个二次开发库。Nginx 也需要此库

yum install -y pcre pcre-devel

3.安装 zlib

zlib 库提供了很多种压缩和解压缩的方式,Nginx 使用 zlib 对 HTTP 包的内容进行 gzip,所以需要在 Centos 上安装 zlib 库

yum install -y zlib zlib-devel

4.安装 OpenSSL

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。Nginx 不仅支持 HTTP 协议,还支持 HTTPS(即在 SSL 协议上传输 HTTP),所以需要在 Centos 安装 OpenSSL 库

yum install -y openssl openssl-devel

5.下载 Linux 版的 Nginx 安装包

下载完毕后上传到服务器上

6.解压

tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

7.配置

使用默认配置,在 Nginx 根目录下执行

./configure
make
make install

查找安装路径

whereis nginx

8.Nginx 常用命令

cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看 nginx 进程

五、Nginx 配置文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

nginx 配置拦截特殊字符请求 nginx 拦截指定请求_nginx_06

此外,还有一个比较重要的模块 upstream(上游服务器设置,主要为反向代理、负载均衡相关配置),upstream 的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡。在 Nginx 作为代理服务或负载服务时,它的配置位于 http 模块中,具体的处理使用将在匹配到的 location 中

实例:

user nobody;		//运行用户
worker_processes 1;	//启动 worker 进程数量,通常设置成和 cpu 的数量相等

//全局错误日志及 PID 文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid	logs/nginx.pid;		//设置进程的 pid 文件所在位置

events{
	//工作模式:epoll 是多路复用 IO(I/O Mutiplexing)中的一种方式
	//仅用于 linux 2.6 以上内核,可以大大提高 nginx 的性能
	use epoll;
	//连接数上限:单个后台 worker process 进程的最大并发连接数
	worker_connections 1024;
}

http{
	include			mime.types;	//Nginx 支持的媒体类型库文件(例如:text/html)
	//指定默认类型为二进制流,也就是当文件类型未定义时使用这种方式
	//例如在没有配置 PHP 环境时,Nginx 是不予解析的,此时,用浏览器访问 PHP 文件就会出现下载窗口
	default_type 	application/octet-stream;
	//设定日志格式
	log_format		main	'$remote_addr'
							'$status $body_bytes_sent "$http_referer" '
							'"$http_user_agent" "$http_x_forwarded_for" ';

	access_log		logs/access.log		main;

	//sendfile 系统调用在两个文件描述符之间直接传递数据(完全在内核中操作)
	//从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝
	//对于普通应用,必须设为 on
	//如果用来进行下载应该用磁盘 IO 重负载应用,可设置为 off
	//以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime
	sendfile		on;
	#tcp_nopush		on;

	//连接超时时间
	keepalive_timeout		65;
	tcp_nodelay				on;

	#开启 gzip 压缩
	gzip			on;
	gzip_disable	"MSIE	[1-6].";

	#设定请求缓冲
	client_header_buffer_size		128k;
	large_client_header_buffers		4	128k;

	//设定独立的虚拟主机站点
	server{
		#侦听 80 端口
		listen			80;
		#定义使用 www.nginx.cn 访问
		server_name		www.nginx.cn;

	//定义服务器的默认网站根目录位置
	root html;
	
	#设定本虚拟主机的访问日志
	access_log		logs/nginx.access.log		main;
	
	//默认请求
	location	/	{
		root html;
		#定义首页索引文件的名称
		index		index.php		index.html		index.html;
	}
	//静态文件,nginx 自己处理
	location	~^/(images|javascript|js|css|flash|media|static)/{
		#过期 30 天,静态文件不怎么更新,过期可以设大一点
		#如果频繁更新,则可以设置得小一点
		expires		30d;
	}
}

配置图片服务器实例:

#配置图片服务器
	#拦截域名:http://image.sisyphus.com:80
	#代理路径:C:\Users\admin\Desktop\images
	server {
		listen 80;
		server_name	image.sisyphus.com;
		location / {
			root	C:/Users/admin/Desktop/images;
		}
	}

配置前端服务器实例:

#配置前端服务器 www.sisyphus.com
    server {
        listen  80;
        server_name www.sisyphus.com;
        location / {
        		#需要先将将前端 dist 文件夹拷贝至 nginx 安装目录
            root    dist;       
            index   index.html;
        }
    }

定义 tomcat 集群

#定义 tomcat 集群
    #负载均衡策略:轮询
    upstream tomcats {
        server  127.0.0.1:8091;
        server  127.0.0.1:8092;
    }

配置后台服务器

#配置后台服务器 manage.jt.com  8091/8092
    server {
        listen  80;
        server_name manage.jt.com;

        location / {
            #代理的是一个请求路径
            proxy_pass  http://tomcats;
        }
    }