nginx
Nginx是什么?
Nginx重要特性
反向代理
Nginx,不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。正向代理:如果把局域网外的Intermet想象成一个巨大的资源库,则局域网中的客户端要访问lnternet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。正向代理:如果把局域网外的Intemet想象成一个巨大的资源库,则局域网中的客户端要访问lnternet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。 正向代理:如果把局域网外的Intemet想象成一个巨大的资源库,则局域网中的客户端要访问Interternet,则需要通过代理服务器来访问,这种代理服务就称为正向代理.
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。~ 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址.
负载均衡
负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
动静分离
nginx 安装
//一键安装上面四个依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
安装 Nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
1.编译安装
./configure
make && make install
2. 运行nginx
cd /usr/local/niginx/sbin
./niginx
查看nginx版本
./nginx -v
停止nginx
./nginx -s stop
重新加载nginx
./nginx -s reload
查看nginx端口
ps -ef |grep nginx
如果浏览器访问不了nginx
firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl restart firewalld.service
查看开放的端口
firewall-cmd --list-all
Nginx主配置文件nginx.conf
主要分成三部分:
1.全局块从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行 Nginx服务器的用户(组)、允许生成的 worker process 数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
2.events块
events 块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个wordprocess可以同时支持的最大连接数等。v
3.http块
http 块也可以包括http全局块、server块。
- http全局块
http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
- server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。·
[root@chensiqi conf]# egrep -v "#|^$" nginx.conf #去掉包含#号和空行的内容
worker_processes 1; #worker进程的数量
error_log logs/error.log; #错误日志(默认没开)
pid logs/nginx.pid; #进程号(默认没开)
events { #事件区块开始
worker_connections 1024; #每个worker进程支持的最大连接数
} #事件区块结束
http { #http区块开始
include mime.types; #Nginx支持的媒体类型库文件包含
default_type application/octet-stream; #默认的媒体类型
sendfile on; #开启高效传输模式
keepalive_timeout 65; #连接超时。
server { #网站配置区域(第一个server第一个虚拟主机站点)
listen 80; #提供服务的端口,默认80
server_name www.chensiqi.org; #提供服务的域名主机名
location / { #第一个Location区块开始
root html; #站点的根目录(相对于nginx安装路径)
index index.html index.htm; #默认的首页文件,多个用空格分开
}
error_page 500 502 503 504 /50x.html; #出现对应的http状态码时,使用50x.html回应客户
location = /50x.html { #Location区块开始,访问50x.html
root html; #指定对应的站点目录为html
}
}
server { #网站配置区域(第二个server第二个虚拟主机站点)
listen 80; #提供服务的端口,默认80
server_name bbs.chensiqi.org; #提供服务的域名主机名
location / { #服务区块
root html; #相对路径(nginx安装路径)
index index.html index.htm;
}
location = /50x.html { #发生错误访问的页面
root html;
}
}
}
常用命令
前提:命令的执行需要在nginx.exe的跟目录中运行.
1.nginx -s stop 关闭
2.start nginx 开启
3.nginx -s reload 重启
反向代理
Nginx反向代理相关指令介绍
①、listen
一、配置监听的IP地址
listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred]
[accept_filter=filter] [bind] [ssl];
二、配置监听端口
listen port[default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl];
三、配置 UNIX Domain Socket
listen unix:path [default_server] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter]
[deferred] [bind] [ssl];
上面的配置看似比较复杂,其实使用起来是比较简单的:
1 listen *:80 | *:8080 #监听所有80端口和8080端口
2 listen IP_address:port #监听指定的地址和端口号
3 listen IP_address #监听指定ip地址所有端口
4 listen port #监听该端口的所有IP连接
下面分别解释每个选项的具体含义:
1、address:IP地址,如果是 IPV6地址,需要使用中括号[] 括起来,比如[fe80::1]等。
2、port:端口号,如果只定义了IP地址,没有定义端口号,那么就使用80端口。
3、path:socket文件路径,如 var/run/nginx.sock等。
4、default_server:标识符,将此虚拟主机设置为 address:port 的默认主机。(在 nginx-0.8.21 之前使用的是 default 指令)
5、 setfib=number:Nginx-0.8.44 中使用这个变量监听 socket 关联路由表,目前只对 FreeBSD 起作用,不常用。
6、backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在 FreeBSD 中默认为 -1,其他平台默认为511.
7、rcvbuf=size:设置监听socket接收缓存区大小。
8、sndbuf=size:设置监听socket发送缓存区大小。
9、deferred:标识符,将accept()设置为Deferred模式。
10、accept_filter=filter:设置监听端口对所有请求进行过滤,被过滤的内容不能被接收和处理,本指令只在 FreeBSD 和 NetBSD 5.0+ 平台下有效。filter 可以设置为 dataready 或 httpready 。
11、bind:标识符,使用独立的bind() 处理此address:port,一般情况下,对于端口相同而IP地址不同的多个连接,Nginx 服务器将只使用一个监听指令,并使用 bind() 处理端口相同的所有连接。
12、ssl:标识符,设置会话连接使用 SSL模式进行,此标识符和Nginx服务器提供的 HTTPS 服务有关。
②、server_name
该指令用于虚拟主机的配置。通常分为以下两种:
1、基于名称的虚拟主机配置
语法格式如下:
server_name name ...;
一、对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开。而每个名字由两段或者三段组成,每段之间用“.”隔开。
server_name 123.com www.123.com
二、可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。
server_name *.123.com www.123.*
三、还可以使用正则表达式,用“~”作为正则表达式字符串的开始标记。
server_name ~^www\d+\.123\.com$;
该表达式“~”表示匹配正则表达式,以www开头(“^”表示开头),紧跟着一个0~9之间的数字,在紧跟“.123.co”,最后跟着“m”($表示结尾)
以上匹配的顺序优先级如下:
1 ①、准确匹配 server_name
2 ②、通配符在开始时匹配 server_name 成功
3 ③、通配符在结尾时匹配 server_name 成功
4 ④、正则表达式匹配 server_name 成功
2、基于 IP 地址的虚拟主机配置
语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。server_name 192.168.1.1
③、location
该指令用于匹配 URL。
语法如下:
location [ = | ~ | ~* | ^~ ] uri {
1. root:
2. proxy_pass:
}
或者
location / { # 只有一个/后面没有路径,表示访问tomcat首页
1. root:
2. proxy_pass:
}
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
④、root
该指令用于设置被代理文件的地址
语法结构如下:
root URL;
URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。
⑤、proxy_pass
该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。
语法结构如下:
proxy_pass URL;
URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。
proxy_pass http://www.123.com/uri;
⑥、index
该指令用于设置网站的默认首页。
语法为:
index filename ...;
后面的文件名称可以有多个,中间用空格隔开。
index index.html index.jsp;
通常该指令有两个作用:第一个是用户在请求访问网站时,请求地址可以不写首页名称;第二个是可以对一个请求,根据请求内容而设置不同的首页。
负载均衡
server{
listen 80;
server_name xxx;
location /{
# proxy_pass http://localhost:8080;
proxy_pass http://xxx
}
}
#定义Tomcat集群
upstream xxx{
server localhost:8081;
server localhost:8082 ;
server localhost:8083;
}
2)权重:为了让性能更好的服务器更多的承担访问压力.所以采用权重策略
server{
listen 80;
server_name xxx;
location /{
# proxy_pass http://localhost:8080;
proxy_pass http://xxx
}
}
#定义Tomcat集群
upstream xxx{
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=2;
}
Nginx其它知识
1)down 属性 :如果在服务器中标识down属性之后,该服务器将不会再为用户提供服务
2)backup 属性:
如果需要在集群中设置备用机.则需要设置backup属性。设置为备用机之后,当主机遇忙/主机宕机时生效
Nginsx负载均衡策略:当按照配置文件中指定的负载均衡方式进行访问时,如果后台服务器有宕机的显现,则在超时时间过后,会访问全新的服务器.保证用户访问正确.
Nginx 实现tomcat高可用配置
属性说明:
max_fails=1 定义最大失败次数
fail_timeout=60s 设定失败的时间周期.
当nginx访问后台服务器时,如果发现后台服务器连接不通.当失败次数达到了设定的最大次数时,则开启高可用的策略.规定用户在时间周期之内,不会再次访问故障机.
#搭建后台服务器.
server {
listen 80;
server_name manage.jt.com;
location / {
#配置代理路径
#proxy_pass http://localhost:8081;
proxy_pass http://jtxxx;
proxy_connect_timeout 2;
proxy_read_timeout 2;
proxy_send_timeout 2;
}
}
#定义tomcat集群 1.轮循策略 2.权重策略 3.iphash策略
upstream jtWindows {
#ip_hash;
server localhost:8081 weight=6 max_fails=1 fail_timeout=60s down;
server localhost:8082 weight=3 max_fails=1 fail_timeout=60s;
server localhost:8083 weight=1 max_fails=1 fail_timeout=60s backup;
}