(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx专为性能优化而开发,性能是器最重要的考量,实现上非常注重效率,能经受高负载的考验,据报告能支持高达50,000个并发连接数。
Nginx不仅能做反向代理,实现负载均衡;还能可以作正向代理来进行上网等功能。
用户知道目标服务器地址,但由于网络限制等原因,无法直接访问。这时候需要先连接代理服务器,然后再由代理服务器访问目标服务器。
反向代理对用户则是不可知的,比如我们访问百度网站,百度的代理服务器对外的域名为 https://www.baidu.com 。具体内部的服务器节点我们不知道,现实中我们通过访问百度的代理服务器后,代理服务器给我们转发请求到他们N多的服务器节点中的一个给我们进行搜索后将结果返回
客户端发送多个请求到服务器,服务器处理请求,有些可能要访问数据库,服务器处理完毕后再将结果返回客户端。
这种架构模式单一,适合并发请求少的情况,但并发量大的时候如何解决?
首先可能想到升级服务器配置,但硬件的性能不能满足日益增长的需求,此时想到服务器集群,增加服务器数量,然后将原来请求单个服务器的情况改为请求分发到多个服务器上,将负载分发到多个服务器上,也就是我们讲的负载均衡。
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。
进入官网下载:http://nginx.io
第一步,安装pcre
1.1、wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
1.2、解压文件 tar -xzvf 路径
1.3、pcre主目录执行命令 ./configure
可能遇到情况:没有c++支持
安装c++支持:yum install -y gcc gcc-c++
1.4、完成后、回到pcre目录下执行 make && make install
1.5、查看版本 pcre-config --version
** 第二步,安装其他依赖**
zlib openssl
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
1、解压nginx-xx.tar.zg包
2、进入解压目录,执行./configure
3、make && make install
查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http –permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload
查看版本
nginx -version
启动nginx
在/nginx/sbin 目录下执行./nginx
关闭nginx
在nginx/sbin 目录下执行 ./nginx -s stop
重新加载nginx
在/nginx/sbin 目录下执行./nginx -s reload
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数, 进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如:worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置, worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等。
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是: http 块也可以包括 http 全局块、 server 块。
http全局块
http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了
节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
实现效果:输入www.123.com跳转到tomcat首页
a) 安装tomcat
将tomcat安装包复制到linux中,tar -zxvf 包名 解压,进入bin目录,输入./startup.sh启动。对外开放访问的端口:firewall-cmd –add-port=8080/tcp –permanent, 输入firewall-cmd -reload重启防火墙
b) 修改本机端口映射
在本机hosts文件中添加127.0.0.1 www.123.com
c) 修改nginx配置文件
实现效果:访问http:// 192.168.0.105:9001/edu/跳转到192.168.0.105:8001,
访问http:// 192.168.0.105:9001/vod/跳转到192.168.0.105:8002
安装两个tomca分别定义端口为8001和8002。
创建文件夹和测试页面
开放端口:
firewall-cmd --add-port=8001/tcp --permanent
firewall-cmd --add-port=8002/tcp --permanent
firewall-cmd --add-port=9001/tcp --permanent
firewall-cmd --reload
准备两个tomcat,一台8001,一台8002。
在两个tomcat的webapps目录中,创建名称为edu的文件夹,在edu下创建一个a.html,用于测试。
配置nginx.conf文件:
在http模块中配置
upstream myserver{
server 192.168.0.105:8001 weight=1;
server 192.168.0.105:8002 weight=2;
}
在server模块配置
listen 80;
server_name 192.168.0.105;
location / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
Nginx提供了几种分配方式:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 宕掉,能自动剔除。
2、weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
指定轮询几率, weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
upstream server_pool{
ip_hash;
server 192.168.5.21:80;
server 192.16 8.5.22:80;
}
4、 fair(第三方,需要安装第三方模块)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
在linux系统中准备静态资源,用于测试
修改nginx.conf配置文件:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
}
}
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];
then /usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];
then killall keepalived
fi
fi
systemctl start nginx
systemctl start keepalived.service
原文:https://www.cnblogs.com/lzy7422/p/14866991.html