大数据第五天:
学习目标:
掌握nginx集群
Nginx的功能特性
基本Http服务,可以作为Http代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL 高级Http服务,可以进行自定义配置,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等邮件代理服务器,支持IMAP/POP3代理服务功能,支持内部SMTP代理服务功能
nginx的配置文件基本配置
主要描述nginx.conf文件的内容
nginx.conf文件结构
主要由三块组成 全局块 events块 http块,http块中包含http全局块和多个server块,每个server块中包含server全局块和多个location块,采用就近原则生效
全局块
配置一些影响整体运行的指令,通常有服务器用户组 允许生成的worker process nginx.pid存放路径 日志存放路径 类型 配置文件引入
events块
影响nginx服务器与用户的网络连接,这一块的设置对服务的性能影响较大。通常有是否开启对WP下的网络进行序列化 是否允许同时接受多个网络连接 事件驱动模型 每个WP可以同时支持处理的最大连接数
http块
重要组成部分,代理、缓存和日志定义、第三方模块的配置。 通常配置 文件引入 MIME-TYPE定义 日志自定义 是否使用sendfile传输文件 连接超时时间 单连接请求数上限
具体配置
由于nginx的配置大部分是不限定具体位置的(可以在多个地方配置),所以此处将依次进行列举
配置用户组
配置alleyz用户 admin组下有启停权限
user alleyz [admin];
#所有用户具有启停权限
user nobody nobody;12345
配置运行生成的worker process
如果设置为数字,启动以后就具有多少个worker process
设置为auto则自动检测
worker_processes number | auto;
配置pid文件存放路径
认存放在logs/nginx.pid
#必须包含文件名称
pid logs/nginx_alleyz.pid;12
配置错误日志文件的存放路径
可在全局块、http块 server块 location块配置
error_log file | stderr [ DEBUG | info | notice | warn | error | crit | alert | emerg];
设置是否允许同事接受多个连接 events
multi_accept on | off; #默认关闭
事件驱动模型的选择 events
可选择的内容有:select poll kqueue epoll rtsig /dev/poll eventport
use epoll;
配置最大连接数 events
允许每一个WP同事开启的最大连接数。此值不能大于操作系统支持的打开的最大文件句柄数.
worker_connections number; #默认值 5121
MIME-Type http server location
default_type mime-type; #默认为 text/plain
自定义服务日志
access_log 可在http server location中配置; log_format只能在http中配置。
注意 前文提到的error_log 配置的是nginx的运行日志,此处指的是应答前端请求的服务日志。可以对日志的格式、大小、输出进行配置,有access_log log_format指令, log_format 的string整体需要用’括起来,变量名称使用双引号括起来
log_format name string;
access_log path [format [buffer=size]];
log_format main '$remote_addr -
r
e
m
o
t
e
u
s
e
r
[
remote_user [
remoteuser[time_local] “
r
e
q
u
e
s
t
"
′
′
request" ' '
request"′′status
b
o
d
y
b
y
t
e
s
s
e
n
t
"
body_bytes_sent "
bodybytessent"http_referer” ’
‘“
h
t
t
p
u
s
e
r
a
g
e
n
t
"
"
http_user_agent" "
httpuseragent""http_x_forwarded_for”’;
access_log logs/access.log main;
#如果取消日志记录
access_log off;
配置sendfile方式传输文件
相关指令 sendfile sendfile_max_chunk,默认开启
sendfile on | off;
sendfile_max_chunk size; #设置为0为限制12
配置连接超时时间
http块 server块 location块,设置用户会话连接的保持时间
keepalive_timeout timeout[header_timeout];1
Location(难点)
location匹配顺序
- "="前缀指令匹配,如果匹配成功,则停止其他匹配
- 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)
- 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
- 如果第三步中有匹配成功,则使用该结果,否则使用第二步结果
注意点
- 匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。
- 一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。
匹配模式及顺序
location = /uri =开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
反向代理的配置
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
Nginx 反向代理的指令不需要新增额外的模块,默认自带 proxy_pass 指令,只需要修改配置文件就可以实现反向代理。
只要新建一个 vhost.conf,加入如下内容(记得修改 ip 和域名为你的 ip 和域名)。修改nginx.conf,添加 include quancha.conf 到http{}段, reload nginx就可以了。
Nginx 反向代理模板:
#设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
upstream tomcat{
server your_IP:8080;
}
server {
#侦听的80端口
listen 80;
#server_name 后面跟上主机IP或域名,如果是本地测试,可以写成localhost
server_name your_IP;
location / {
index index.html index.jsp;
proxy_pass http://tomcat; #在这里设置一个代理,和upstream的名字一样
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
- 掌握nginx下的session共享问题 (难点)
- nginx和两个tomcat集群之后,如果所有的tomcat都运行一个项目。存在session不一致的问题
4、nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的:
upstream nginx.example.com
{
server 192.168.74.235:80;
server 192.168.74.236:80;
ip_hash;
}
server
{
listen 80;
location /
{
proxy_pass
}
}