Nginx同Apache一样都是Web服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier ) URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通一句,通过HTTP协议提供各种网络服务
然而,这些服务器在设计之初收到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个Web服务器有着各自鲜明的特点。
Apache的发展十七很长,而且是毫无争议的世界第一大服务器,他有着很多有点:稳定、开源、跨平台等等。
他出现的时间太长了,他兴起的年代,互联网产业远远比不上现在。所以他被设计为一个重量级的。
但是它不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。
操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。
这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。
俄罗斯的工程师lgor Sysoev,他在为Rambler Media工作期间,使用c语言开发了Nginx。
Nginx作为Web服务器一直为Rambler Mdia 提供出色而又稳定的服务。然后呢,lgorSysoev将nginx代码开源,并且赋予自由软件许可证。
基于一下几点:Nginx活了
1.Nginx使用基于时间驱动架构,使得其可以支持数以百万级别的tcp连接。
2.高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代)。
3.Nginx是一个跨平台服务器,可以运行在Linux、Windows、FreeBSD、Solaris、AIX、Mac OS等操作系统上。
4.这些优秀设计带来的极大稳定性
其特点是占有内存少,并发能力强
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发
正向代理
如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理
简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理
需要在客户端配置代理服务器进行指定网站访问
反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
负载均衡
增加服务器的数量,然后将请求分发到各个服务器上。将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器。
是客户端发送多个请求到服务器,服务器处理请求
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
nginx安装
安装nginx前,需要先安装其依赖软件,具体的有pcre-8.3.7.tar.gz, openssl-1.0.1t.tar.gz, zlib-1.2.8.tar.gz, nginx-1.11.1.tar.gz
1.nginx的http模块使用pcre来解析正则表达式,需要在linux上安装pcre库
2.nginx使用zlib对http包的内容进行gzip,需要在linux上安装安装zlib库
3.安装openssl库,让 nginx 支持 https(即在ssl协议上传输http)
安装:
1、安装pcre
上传源码压缩包,解压、编译、安装 三部曲。
(1)解压文件, 进入pcre目录,
(2)./configure 完成后,
(3)执行命令: make && make install
2、安装 openssl
下载OpenSSL的地址:
http://distfiles.macports.org/openssl/
(1)解压文件, 回到 openssl目录下,
(2)./configure 完成后,
(3)执行命令: make && make install
3、安装 zlib
(1)解压文件, 回到 zlib 目录下,
(2)./configure 完成后,
(3)执行命令: make && make install
4、安装 nginx
(1)解压文件, 回到 nginx 目录下,
(2)./configure 完成后,
(3)执行命令: make && make install
安装tar.gz的安装方式:
先解压压缩包:tar -zxvf 一般会生成一个soft目录
进入soft目录: 执行./configure命令为编译做好准备
执行make命令进行软件编译
执行make install完成安装
执行make clean删除安装时产生的临时文件
运行nginx
·安装完nginx后,会在路径/usr/local下自动生成nginx文件夹
cd /usr/local/nginx
进入sbin文件夹,里面有两个文件:nginx 和 nginx.old
·执行命令:./nginx 即可启动nginx
·测试启动: ps -ef | grep nginx
·查看nginx默认端口(默认为80),使用网页的形式测试,(像Tomcat一样 ip:80)
·nginx的配置文件:cd /usr/local/nginx/conf 下的 nginx.conf
在windows系统中访问linux系统中的nginx,默认不能访问的,是防火墙的原因,需要关闭防火墙,开启访问的端口
nginx的常用命令和配置文件
常用命令:
使用nginx操作命令的前提:必须进入到nginx的自动生成目录的下/sbin文件夹下
Nginx有两个目录;一个是安装目录(可以自定义),一个是自动生成的目录(/usr/local/nginx)
命令:
启动nginx:./nginx
查看nginx版本号:./nginx -v
关闭nginx:./nginx -s stop
重新加载nginx:./nginx -s reload
配置文件:
/usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx 配置文件有三部分组成
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:
worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。
第二部分:events块
比如上面的配置:
events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http全局块、server 块。
http全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
nginx反向代理配置实例1
实现效果:在浏览器地址输入www.123.com,跳转到linux系统tomcat主页
准备工作:
在linux中安装tomcat:
tomcat 安装文件放到 liunx 系统中,解压
进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器
将8080端口对外开放:
添加开放的端口:firewall-cmd --add-port=8080/tcp --permanent
重启防火墙:systemctl restart firewalld
查看已开放的端口:firewall-cmd --list-all
在 windows 系统中通过浏览器访问 tomcat 服务器
通过ip:8080的方式验证tomcat
具体配置反向代理:
·第一步:在windows系统中的host文件进行域名和ip对应关系的配置:
添加内容在host文件中:
·第二步:在nginx进行请求转发的配置(反向代理配置):
修改nginx的配置文件,将sever块的listen默认为80,
server_name修改为208.208.128.122,
将下面location块的proxy_pass修改为http://127.0.0.1:8080
·进行测试:
如上配置,我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故 访问该域名时会跳转到 127.0.0.1:8081 路径上
即实现在浏览器地址输入www.123.com,跳转到linux系统tomcat主页的效果
nginx反向代理配置实例二
实现效果
实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 8001,
访问 http://127.0.0.1:8001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:8001/vod/ 直接跳转到 127.0.0.1:8082
准备工作
准备两个tomcat,一个端口是8081,一个端口是8082
需要注意的是:8002的tomcat需要修改三个端口号,分别是http协议的默认端口、http协议的默认端口、默认ajp协议的默认端口 如果不修改的话,8002的tomcat是无法启动的,因为8002的tomcat配置会和8001的冲突
修改后如下:
准备好测试页面
将端口开放
进行nginx反向代理配置:
可以看到,修改的是listen、server_name,两个location块,名字分别是vod和edu
进行测试
nginx实现负载均衡
在 nginx 的配置文件中进行负载均衡的配置:
可以看到,是在upstream myserver块中,增加了一个server
nginx 分配服务器策略:
负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服务,而且 Nginx 提供了几种分配方式
a. 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
b. weight
weight 代表权重, 默认为 1,权重越高被分配的客户端越多
c. ip_hash
ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
d. fair(第三方)