第一章 快速入门
一、介绍
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 服务器最常用的功能之一,尤其是反向代理
正向代理 反向代理
2、提供两类负载均衡策略
内置策略:轮询策略、加权轮询策略、ip_hash 策略 扩展策略:url_hash 策略、fair 策略、sticky 策略
对于扩展策略是需要我们在安装时额外添加第三方模块才能实现的
轮询 配置
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
加权轮询 配置
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
ip_hash 策略
对客户端请求的 ip 进行 hash 操作,然后根据 hash 结果将同一个客户端 ip 的请求分发给同一台服务器进行处理,可以解决 session 不共享的问题 配置
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
有两种方式:
- 直接双击 nginx.exe
- 打开 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
- 打开 cmd 命令窗口,跳转到 nginx 目录下,输入命令 nginx -s stop(快速停止)或者 nginx -s quit(完整有序地停止)
- 打开 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 {
...
}
http
{
...
server
{
...
location [PATTERN]
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
...
}
此外,还有一个比较重要的模块 upstream(上游服务器设置,主要为反向代理、负载均衡相关配置),upstream 的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡。在 Nginx 作为代理服务或负载服务时,它的配置位于 http 模块中,具体的处理使用将在匹配到的 location 中
实例:
user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events{
use epoll;
worker_connections 1024;
}
http{
include mime.types;
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;
#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;
}
location ~^/(images|javascript|js|css|flash|media|static)/{
#过期 30 天,静态文件不怎么更新,过期可以设大一点
#如果频繁更新,则可以设置得小一点
expires 30d;
}
}
|