1、Nginx简介
1.1、Nginx概述
Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器上表现较好,中国大陆使用Nginx的用户有:百度、京东、新浪、网易、腾讯、淘宝等。
1.2、Nginx作为Web服务器
Nginx可以作为静态页面的Web服务器,同时支持CGI协议的动态语言,比如perl、php等。但是不支持Java。Java程序只能通过与tomcat配合完成。Nginx专为性能优化而开发,性能是非常重要的考量,实际上也非常注重效率,能够经受高负载的考验,有报告表面Nginx是支持50000个并发连接数的。
2、Nginx相关概念
2.1、正向代理
如果把局域网的Intenet想象成一个巨大的资源库,则局域网中的客户端要访问Intenet,则需要通过代理服务器来访问,这种代理服务器就称为正向代理。
2.2、反向代理
客户端对代理是无感知的,因为客户端不需要任何配置就可以进行访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取到数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的IP地址。
2.3、正向代理与反向代理区别
正向代理:代理的对象为客户端,访问的内容为外部内容。
反向代理:代理的对象为服务端,访问的内容为内部内容。
2.4、负载均衡
将用户请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上(负载到不同的服务器上),也就是我们所说的负载均衡。
2.5、动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器进行解析,加快解析速度。降低原来单个服务器的压力。
3、Nginx在Linux上的安装和使用
一、安装Nginx
1、官方下载Nginx
2、Nginx的安装
- 安装Pcre依赖
- 下载Pcre压缩文件wget
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
- 解压Pcre压缩文件
tar -xvf pcre-8.37.tar.gz
- ./configure进行编译,pcre 目录下执行 make && make install
./configure make && make install
- 查看是否安装成功
pcre-config --version
- 下载Pcre压缩文件wget
- 安装Nginx
- (1) 使用tar -xcf 进行解压
- (2) ./configure进行编译
- (3) make && make install
- (4) 进入/usr/local/nginx/sbin/nginx文件
- (5) ./nginx启动
- (6) ps -ef | grep index查看Nginx进程
- 安装Nginx无法访问
- 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
- 查看开放的端口
firewall-cmd --list-all
- 设置开放的端口号
firewall-cmd --add-service=http –permanent #开放80端口号 firewall-cmd --add-port=80/tcp --permanent
- 设置端口号需要重启防火墙
firewall-cmd --reload
- 安装其他依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devl
3、Nginx常用命令
- 使用Nginx操作命令的前提条件:必须进入Nginx的目录
/usr/local/nginx/sbin
- 查看Nginx的版本号
./nginx -v
- 启动Nginx
./nginx
- 关闭Nginx
./nginx -s stop
- 重新加载Nginx
./nginx -s reload
4、Nginx配置文件
- Nginx配置文件位置
/usr/local/nginx/config/nginx.conf
- Nginx配置文件组成
配置文件由三部分组成
第一部分:全局快
从配置文件开始到events块之间的内容,它主要会设置一些影响nginx服务器整体运行的配置命令,主要包括了配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
比如第一行配置的:
worker_processes 1;
这是Nginx服务器并发处理器的关键配置,worker_processes值越大,可以支持的并发处理量也越多
第二部分:events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接。常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接受多个网络连接,选择哪种事件驱动模型来处理连接请求,每个word process表示同时支持最大的连接数。
events {
worker_connections 1024;
}
表示支持最大的连接数为1024(一般是与CPU相等的)。这部分的配置对于Nginx来说性能影响较大,在实际应用中需要进行灵活的配置。
第三部分:http块
Nginx服务配置中最频繁的部分,Http块中也可以包括Http全局块,Server块。Http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
#'$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 0;
keepalive_timeout 65;
#gzip on;
server {
#Nginx默认端口号
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;'
location / {
root html;
index index.html index.htm;
}
#访问出错所跳转的地址
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
5、Nginx配置实例-反向代理
Nginx准备工作
- 实现效果
(1)打开浏览器,在浏览器输入地址链接: www.123.com,跳转到Linux系统Tomcat主页面中。 - 准备工作
(1) 在Linux系统安装Tomcat,使用默认端口8080
Tomcat安装文件到Linux系统中,解压tar -xvf Tomcat安装包
进入Tomcat的Bin目录中,./startup.sh启动tomcat服务器中。
(2) 对外开放访问的端口(防火墙关闭了可无视)
firewalld-cmd-add-port =8080/tcp --permanent
firewalld-cmd-reload
(3) 查看已经开放的端口号
firewalld-cmd --list-all
(4) IP地址:8080访问Tomcat服务器 - 访问过程的分析
- 具体配置
第一步 在Windows系统的Host文件中进行域名和IP对应关系的配置
第二步 Nginx.conf配置文件中进行反向代理
第三步:使用www.123.com访问到Linux中的Tomcat
注意:若需要反向代理到多个不同的服务器当中,可以在HTTP块中进行配置
Location指令说明:
6、Nginx配置实例-负载均衡
Nginx.conf配置文件中进行配置
http{
......
upstream myserver{
ip_hash;
server 192.168.255.129:8080 weight=1;
server 192.168.255.129:8081 weight=2;
fair;
}
......
server{
location / {
......
#如果配置了proxy_pass,需要将相关的服务进行启动才能运行
proxy_pass http:myserver;
proxy_connect_timeout 10;
}
}
}
负载均衡即是将负载分摊到不同的服务单元,既可以保证服务的可用性,又能保证的响应足够快,能够给用户很好的体验,快速增长的访问量和数据流量催生了各种各样的负载均衡产品,很多专业的负载均衡提供了很好的功能,但价格都不非,因此使用负载均衡软件非常的受欢迎,Nginx就是其中的一个,在Linux下有Nginx、LVS、Haproxy等服务可提供负载均衡,且Nginx提供了几种分配方式(策略):
1. 轮询(默认)
每个请求按时间顺序逐一分配到不同的服务器,如果后端服务器挂了的话,能够自动进行剔除。
2. weight
weight代表的权重,默认为1,权重越高被分配到的几率也越高
3. ip_hash
每个请求按访问的ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决Session共享问题
4. fair
按后端服务器的响应时间分配请求,响应时间短的优先分配。
7、Nginx配置实例-动静分离
Nginx动静分离简单来说就是把动态和静态资源分离开来,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态资源分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度大致分为两种:一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流的推崇方案;另外一种方法就是动态跟静态文件混合在一起发布,通过Nginx分开。
8、Nginx配置实例-集群
- 什么是Nginx高可用
(1)需要两台Nginx服务器
(2)需要KeepAlived
(3)需要配置虚拟ip - 在两台服务器上安装KeepAlived
(1)使用yum命令进行安装
yum install keepalived -y
查询是否安装成功
rpm -q -a keepalived
(2)安装之后,会在etc里面生成目录keepalived,有文件keepalived.conf - 完成高可用配置(主从配置)
(1)修改/etc/keepalived/keepalived.conf配置文件
(2)在/usr/local/etc添加检测脚本文件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访问到主机(/etc/hosts) router_id LVS_DEVEL } vrrp_script chk_http_port{ #执行脚本 script"/usr/local/srclnginx_check.sh" #检测脚本执行的间隔 interval 2 #表示权重 weight 2 } vrrp instance VI_1{ state BACKUP #备份服务器上将 MASTER改为 BACKUP interface ens33 //网卡 virtual_router id51 #主、备机的 virtual router id必须相同 priority90 #主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 #每隔多久发送一次心跳,用于检测主Nginx是否挂了 #校验权限的一种方式,此处使用密码进行校验 authentication{ auth_type PASS auth_pass 1111 } 表示虚拟IP地址 virtual_ipaddress{ 192.168.255.129 #VRRP H虚拟地址 } }
(3)把两个服务器上的Nginx和KeepAlived启动#!/bin/bash A=`ps -C nginx -no-header |wc -l` if [ $A -eg 0 ]:then #Nginx启动脚本的位置 /usr/local/nginx/sbin/nginx sleep 2 if[ `ps -C nginx --no-header |wc -l` -eq 0 ]:then killall keepalived fi fi
(4)测试#启动Nginx ./nginx #启动KeepAlived systemctl start keepalived.service
先使用IP地址访问主Nginx。如果能够访问成功,将主Nginx服务器和KeepAlived关闭,再次进行访问的话会根据虚拟IP地址自动映射到从Nginx从服务器当中。