Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
稳定性极强,7*24小时不间断运行(就是一直运行)
Nginx提供了非常丰富的配置实例
占用内存小,并发能力强(随便配置一下就是5w+,而tomcat的默认线程池是150)
——正向代理
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理
所谓正向代理就是内网服务器主动要去请求外网的地址或服务,所进行的一种行为。内网服务—访问—>外网
——反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已
所谓反向代理就是外网要访问内网服务而进行的一种行为。 外网----请求—>内网服务
——负载均衡
负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略
——HTTP服务器(动静分离)
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
有很多种方法启动nginx
(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可
直接在浏览器地址栏输入网址 http://localhost:80 回车,出现welcome to 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示指定的进程名称 .
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
yum install -y pcre pcre-devel
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库
yum install -y zlib zlib-devel
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
yum install -y openssl openssl-devel
下载完毕上传到服务器上
使用默认配置,在nginx根目录下执行
./configure
make && make install
查找安装路径: whereis nginx
一般在 /usr/local/nginx
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
注意:如何连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口!
# 开启
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:标识添加的端口;
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
#------------------------------------------------------------------------------
# 以上统称为全局块
# worker_processes 数值越大,Nginx的并发能力越强 (这个不是随便写的,需要根据服务器配置来写)
# error_log 代表Nginx的错误日志存放位置
# pid Nginx 运行标识
#------------------------------------------------------------------------------
events {
worker_connections 1024;
}
#------------------------------------------------------------------------------
# events
# worker—connection 他的数值越大, Nginx 并发能力越强
#------------------------------------------------------------------------------
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#-------------------------------------------------------
# location块
# root: 将接受到的请求根据/html去查找静态资源
# index: 默认去上述的路径中找到index.html或index.htm
#-------------------------------------------------------
}
#-------------------------------------------------------
# listen代表Nginx监听的端口号
# server_name代表Nginx接受请求的IP
#-------------------------------------------------------
}
#------------------------------------------------------------------
# http块
# include代表引入一个外部文件
# include /etc/nginx/mime.types; mime.types中存放着大量媒体类型
# include /etc/nginx/conf.d/*.conf; 引入了conf.d下以.conf为结尾的配置文件
#-------------------------------------------------------------------
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
work process 支持的最大连接数为 1024. 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行
正向代理服务是由客户端设立的
客户端了解代理服务器和目标服务器都是谁
帮助咱们实现突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址
反向代理服务器是配置在服务端的
客户端不知道访问的到底是哪一台服务器
达到负载均衡,并且可以隐藏服务器真正的ip地址
客户端发送请求,反向代理接受客户端的请求,并分配给服务器处理,最后返回结果给客户端.
启动tomcat服务器,进入tomcat目录-》webapps-》ROOT
直接vim一个index.html
在访问一下
http://123.57.252.81:8081/
做一下简单的说明tomcat我调成了8081,直接访问8080是访问不到什么的
为了防止直接修改nginx.conf 我在/etc/nginx/conf.d 目录下建立了 一个default.config,修改在这个文件夹,在nginx.conf引入即可
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://123.57.252.81:8081/; # 反向代理地址
}
}
注意一定要在nginx.conf引入,
include /etc/nginx/conf.d/*.conf;
cd /usr/local/nginx/sbin/
启动即可
./nginx
如果已经启动了,修改了配置文件后一定要记得
重新加载配置文件
./nginx -s reload
优先级关系:(location = ) > (location /xxx/yyy/zzz) > (location ^~) > (location ~ , ~*) > (location /起始路径) > (location /)
# 1. = 匹配
location = / {
#精准匹配,主机名后面不能带能和字符串
}
# 2. 通用匹配
location /xxx {
#匹配所有以/xxx 开头的路径
}
# 3. 正则匹配
location ~ /xxx {
#匹配所有以/xxx 开头的路径
#和第2种匹配的区别就是优先级比第2种高
}
# 4. 匹配开头路径 ^~
location ^~ /xxx {
#匹配所有以 /xxx 开头的路径
#优先级比 2和3都高
}
# 5. 匹配结尾路径 ~*
location ~* \.(gif|jpg|png)$ {
#匹配以.gif、.jpg、.png结尾的路径
}
测试,这里准备多个访问地址
http://123.57.252.81:8081/emp/
http://123.57.252.81:8081/emp/user/toLoginPage
server {
listen 8080;
server_name localhost;
location =/emp{
proxy_pass http://123.57.252.81:8081/emp/; #emp 首页
}
location ^~ /emp/user{
proxy_pass http://123.57.252.81:8081/emp/user/toLoginPage; #登录页面
}
location / {
proxy_pass http://123.57.252.81:8081/; # hello nginx
}
}
Nginx为我们默认提供了三种负载均衡的策略:
轮询: 将客户端发起的请求,平均分配给每一台服务器。
权重: 会将客户端的请求,根据服务器的权重值不同,分配不同的数量。
ip_hash: 基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上
实现轮询的方式:是Nginx负载均衡默认策略,配置如下:
upstream MyServer{
server 123.57.252.81:8081;
server 123.57.252.81:80;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://MyServer;
}
}
重新加载nginx配置文件
就会发现每刷新一下就会轮换的跳到不同的页面
实现权重的方式:在配置文件中upstream块中加上weight, weight 值越大,被分配的请求也越多,配置如下:
upstream MyServer{
server 123.57.252.81:8081 weight=10; # hello nginx
server 123.57.252.81:80 weight=2; # nginx默认页面
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://MyServer;
}
}
重新加载nginx配置文件就会发现8081页面出现的次数比80nginx默认的页面多,大概是出现5次hello nginx后出现一次80默认页面
实现 ip_hash 的方式: 在配置文件中upstream块中加上 ip_hash; 即可, 配置如下:
upstream MyServer{
ip_hash;
server 123.57.252.81:8081 weight=10; # hello nginx
server 123.57.252.81:80 weight=2; # nginx默认页面
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://MyServer;
}
}
加载配置文件后就会发现无论怎么加载都一直是一个页面以为ip没变
Nginx的并发能力公式: worker_processes * worker_connections / 4|2 = Nginx最终的并发能力
动态资源需要/4,静态资源需要/2 ,
Nginx通过动静分离来提升Nginx的并发能力,更快的给用户响应
如果只有一台 Nginx 的话,当出现故障时,会导致整个程序的崩溃,使用多台Nginx搭建成一个集群,当其中某一个Nginx宕机,并不会影响整个程序的正常运行。
准备多态nginx
准备keepalived ,监听nginx的健康情况
准备haproxy,提供一个虚拟的路径,统一的取接收用户得请求