什么是Nginx?

Nginx (engine 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%的使用比率,大约为2220万个网站。

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

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

Nginx作用?

Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。正向代理代理客户端,反向代理代理服务器。

正向代理

正向代理服务器位于客户端和服务器之间,为了从服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端需要要进行一些正向代理的设置的。

举例:翻墙

正向代理中被代理的是客户端的请求

反向代理

反向代理,客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。

二者区别

一张图来说明正向代理和反向代理二者之间的区别,如图。

在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;

在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;

实际上,Proxy在两种代理中做的事情都是替服务器代为收发请求和响应,不过从结构上看正好左右互换了一下,所以把后出现的那种代理方式称为反向代理了。

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。

轮询

加权轮询


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

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


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

Nginx的安装

windows下安装

  1. 下载nginx
    http://nginx.org/en/download.html 下载稳定版本。 以nginx/Windows-1.16.1为例,直接下载 nginx-1.16.1.zip。
    下载后解压,解压后如下:

  2. 启动nginx

有很多种方法启动nginx

 (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可
  1. 检查nginx是否启动成功

直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!

4. 配置监听

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

当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效

  1. 关闭nginx

    如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx

(1)输入nginx命令 nginx -s stop (快速停止nginx) 或 nginx -s quit (完整有序的停止nginx)

(2)使用 taskkill 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

离线下载

//离线安装步骤,别的依赖步骤一样 略过
tar -zxvf 文件名.tar.gz,进入根目录
./configure
make
make install      //或者make && make install
pcre-config --version //查看版本

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、下载nginx安装包

手动下载.tar.gz安装包,地址:https://nginx.org/en/download.html


下载完毕上传到服务器上 /usr/local

6、解压

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


7、配置

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

./configure
make
make install

查找安装路径:whereis nginx

Nginx常用命令

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

如果nginx的server里没配置access.log,nginx会默认将server的访问日志记录到access.log,

关闭方法:在http块中添加:access_log off;

启动成功访问 服务器ip:80


注意:如何连接不上,检查安全组是否开放端口,或者服务器防火墙是否开放端口!
相关命令:

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;

Nginx配置之worker_processes

一般来说,worker_processes默认为1,官方说1一般情况足够了,也可以设置为cpu核心数,2或者4或者8再高没大意义,另外不要忘了设置worker_cpu_affinity,这个配置用于将worker process与指定cpu核绑定,降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。

或者省事些,直接设置为auto,根据需求自动调整

1.9.10版本后可以配置

worker_processes auto;
worker_cpu_affinity auto;

解释:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推

配置参考:

worker_processes     4;
worker_cpu_affinity 0001 0010 0100 1000;

反向代理

 server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;proxy_pass  http://127.0.0.1:8080;index  index.html index.htm;}

使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中

  server {listen    9001;server_name  192.168.12.128;location ~ /edu/ {proxy_pass  http://127.0.0.1:8080;}location ~ /vod/ {proxy_pass http://127.0.0.1:8081;}}

location 指令说明:

该指令用于匹配 URL。

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~
标识。

负载均衡

  upstream myserver {server 192.168.12.128:8080;server 192.168.12.128:8081;}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;proxy_pass  http://myserver;index  index.html index.htm;}

nginx 分配服务器策略

第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

第二种 weight
weight 代表权重默认为 1,权重越高被分配的客户端越多

第三种 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器

第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分

动静分离

假设某些文件需要经常变更,可以通过设置 expires 起到控制页面缓存的作用,合理的配置缓存和压缩可以减少很多服务器的请求压力。

        location /www/ {root   /data/;index  index.html index.htm;autoindex on;}location /image/ {root   /data/;autoindex   on;autoindex_exact_size off;autoindex_localtime on;}

Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:

autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间


高可用主备模式


(1)需要两台 nginx 服务器,在两台服务器安装 nginx
(2)需要 keepalived,在两台服务器安装 keepalived
(3)需要虚拟 ip

使用 yum 命令进行安装

yum install keepalived –y

安装之后, 有/etc/keepalived/keepalived.conf文件

修改/etc/keepalived/keepalivec.conf 配置文件,备份服务器注释带 * 号的地方注意更改。

global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.17.129smtp_connect_timeout 30router_id LVS_DEVEL   # 访问到主机,也可以写ip,也可以修改/etc/hosts文件添加映射********
}
vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2 #(检测脚本执行的间隔)weight 2
}
vrrp_instance VI_1 {state MASTER # 备份服务器上将 MASTER 改为 BACKUP *******interface ens33 //网卡,通过 ifconfig 查看网卡名 *******virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同priority 100 # 主、备机取不同的优先级,主机值较大,备份机值(90)较小 ****advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.17.50 // VRRP H 虚拟地址} }

在/usr/local/src 添加检测脚本,nginx_check.sh

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

把两台服务器上 nginx 和 keepalived 启动
启动 nginx:./nginx
启动 keepalived:systemctl start keepalived.service

最终测试
(1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50
(2)把主服务器(192.168.17.129)nginx 和 keepalived 停止,再输入 192.168.17.50

测试可以发现我们访问 keepalived 中配置的两个 VIP 都可以正常调度等,当我们停止任意一台 keepalived节点,同样还是正常访问;到此,keepalived+nginx 高可用集群(双主模式)就搭建完成了。

原理

  1. mater 和 worker

  2. worker是如何工作的?

  3. 一个 master 和多个 woker 有好处
    (1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
    (2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断

  4. 设置多少个 woker 合适

    worker 数和服务器的 cpu 数相等是最为适宜的

    查看CPU个数:cat /proc/cpuinfo |grep “cores”|uniq
    或者:top命令后 按1

  5. 连接数 worker_connection

    第一个:发送请求,占用了 woker 的几个连接数?
    答案:2 或者 4 个,如果是静态资源 则一个请求 一个响应 连接数2
    如果是动态资源 则客户端与nginx的请求响应(2) + nginx和tomcat的连接(2) = 4

    第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的
    最大并发数是多少?
    普通的静态访问最大并发数是: worker_connections * worker_processes /2, 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。

Nginx快速入门(安装 负载均衡 动静分离 主备 原理)相关推荐

  1. Nginx 反向代理 负载均衡 动静分离 高可用 原理

    1.Nginx简介 1.1 概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能 ...

  2. Nginx的动态代理,负载均衡,动静分离的简单使用

    nginx 一 Nginx介绍 1.1 为什么要学习Nginx 问题1: 客户端到底要将请求发送那台服务器 问题2:所有客户端的请求都发送给了服务器1 问题3:客户端发送的请求可能是申请静态资源的,也 ...

  3. HAproxy负载均衡动静分离实现及配置详解

     HAproxy负载均衡动静分离实现及配置详解 HAproxy的介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAP ...

  4. 四层负载均衡 动静分离和资源分离 Rewrite rewrite伪静态实例

    文章目录 四层负载均衡 四层负载均衡特点 查看四层负载均衡语法 四层负载均衡配置 优化配置文件 四层负载均衡日志配置 nginx的TCP负载均衡---端口转发 动静分离 单台的动静分离 多台机器动静分 ...

  5. nginx+apache实现负载均衡+动静分离配置(编译安装)

    一.编译安装nginx cd /usr/local/src wget http://nginx.org/download/nginx-1.6.3.tar.gz tar -zxvf nginx-1.6. ...

  6. ngixn+tomcat负载均衡 动静分离配置 (nginx反向代理)

    文章目录 Tomcat主要配置文件 Nginx负载均衡实现原理 实验环境 动静分离配置 创建静态页面 配置动态页面 图片动静分离 Tomcat主要配置文件 bin:存放启动和关闭Tomcat脚本 co ...

  7. Nginx 方向代理/负载均衡/动静分离/高可用

    一,反向代理 正向代理:正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端.这里客户端是要进行 ...

  8. Nginx 负载均衡动静分离配置

    nginx.conf 1.通过目录进行分离. #静态服务器 upstream static_pools {           server 10.0.0.9:80 weight=5 max_fail ...

  9. 从0开始,在Linux中配置Nginx反向代理、负载均衡、session共享、动静分离

    写这篇文章花费了我近一周的时间,参考网上许多优秀的博客文章,我不敢说写的很好,至少很全很详细.本文先介绍原理部分,然后再进行实战操作,我认为这样才会有更深的理解,不过这也导致了文章篇幅很长.但是,如果 ...

最新文章

  1. 思考:王者荣耀为什么不使用微服务架构?
  2. python add argument list_python模块介绍- argparse:命令行选项及参数解析
  3. 生产订单总目标成本为0
  4. latex 小于_一份菜鸡的Latex课堂作业works--(ii)
  5. 最短路径算法----floyd(转)
  6. ios html字符转义字符串,iOS HTML特殊字符转译
  7. 64位linux下的gns3网络模拟器配置
  8. 苹果官网下架 iPhone 8 全系;阿里推出“阿里云会议”;深度操作系统 20 BETA 发布 | 极客头条...
  9. 欧洲互联网将“死于”版权法?
  10. c语言程序设计怎么改卷,C语言程序设计(B卷)教程.doc
  11. 算法设计与分析(第2版)屈婉玲 刘田 张立昂 王捍贫编著 第二章课后习题答案
  12. 苹果macOS 13 Ventura 5K原生动态壁纸
  13. 几款引擎比较:BigWorld,Unreal,CryEngine等
  14. 【Android】ActivityManager的介绍
  15. 计算机网上邻居的网络密码是什么,网上邻居打开时需访问密码是怎么回事
  16. selenium操作浏览器
  17. 解决java:找不到符号办法
  18. NPOI导出真正的电子表格,支持 自定义多行表头(表头风格设置),支持多个sheet页面导出
  19. this指向,防抖函数中的fn.apply(this,arguments)作用
  20. php微信支付接口开发的实现程序

热门文章

  1. 后盾网-CI框架实例教程-马振宇 - 学习笔记(4)
  2. 最新温柔发卡程序源码10套显示模板 附带视频教程
  3. 拍照识别文字的方法有哪些?这些识别文字的方法安利给你
  4. 二重积分若干例题分析
  5. JavaScript的运行机制
  6. 爬楼梯问题C++假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
  7. Clickhouse—基础架构
  8. 便利的html5 之 required、number 、pattern
  9. 分治算法:根号n段合并排序算法
  10. 转载:艺用人体解剖(学习用书)(中央美术学院基础教学)