一、客户端访问过程的描述:
1、nginx配置中的一些变量的描述:
(1)、http: 使用http协议,里面可以包含多个servlet,多个upstream;
(2)、servlet 就是一个虚拟主机,一个servlet就好比一台现实中的主机,可以配置自己的端口号和名称;
(3)、upstream 就是配置负载均衡的,upstream 里面就是负载的服务器列表,而upstream的名称和反向代理路径即location 中proxy_pass 是一致的!
(4)、一个servlet中可以有多个location,location反向代理,location 可以去匹配你的url,如果匹配了则这个location就接受了这个客户端的请求,并转发到响应的被代理服务器上去,而如果第一个和url不匹配则后面的一次进行匹配直到有匹配的或执行完!
二、nginx只做反向代理服务器,不做负载均衡的配置
1、
location /music$ {
proxy_passhttp://localhost:18080/music/index.jsp;
proxy_redirectoff;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerHost $http_host;
}
2、
location / {
proxy_passhttp://localhost:18080/music/index.jsp;
proxy_redirectoff;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerHost $http_host;
}
3、总结:
这两个反向代理的配置当请求路劲中有music时由第一个代理,并将这个请求转发到proxy_pass 指定的那个服务器上去。如果请求url和第一个代理匹配并代理了则不会和第二个进行匹配代理,如果请求url没能和第一个匹配则一定会和第二个匹配因为第二个是一个通配符回和任何请求匹配,所以请求会被转发到proxy_pass ,从中也能感觉到nginx反向代理代理的是服务器端这句话!
三、nginx+tomcat 配置负载均衡
反向代理负载均衡服务器即nginx反向代理服务器将客户端请求转发到负载均衡服务器
负载均衡的配置: 这里使用了负载均衡
1、upstream localhost{
#ip_hash iphash 实现负载均衡,这里使用了轮回的方式实现
# nginx 转发的后台tomcat服务器配置,以及其权重的配置,权重越大要承载的量越大,负载均衡服务器列表
server localhost:18081 weight=1;
server localhost:18080 weight=1;
}
2、使用负载均衡的反向代理的配置:我们看到 proxy_pass 的路径和upstream的名称一样,而被代理的服务器的路劲为upstream 的server的路径
location~ \.(jsp|do)$ {
# 代理路径,和负载均衡的upstream localhost 这个localhost路径是一致的,但http是不能忘!
proxy_pass http://localhost;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
3、刚开始的时候还很模糊反向代理的proxy_pass 和upstream的名称是不是一致,经过自己的测试发现就是一致的具体的配置如下:
#user nobody;
# 进程数,一般这个和cpu核心数相等
worker_processes 1;
# 错误日志配置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
# pid 进程
#pid logs/nginx.pid;
events{
# work 进程连接数
worker_connections 1024;
}
http{
include mime.types;
default_type application/octet-stream;
# main 为日志格式的名称
#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 定义日志的路径,后面的main 就是上面定义的日志格式
#access_log logs/access.log main;
#如果不想使用这个日志,则可以关闭
#access_log off;
# 开启高效文件传输模式,调用sendfile 进行文件的传输,但一般为了和网速的io进行平衡,降低系统负载一般把sendfile设置为off,
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
# 是否开启gzip压缩输出,gzip压缩后访问速度可以加快
#gzip on;
#负载均衡配置,nginx 是做反向代理的,访问nginx就是在访问负载均衡配置的这个server,这个可以通过log查看
# hubery 就是这个负载均衡的名称,这个名称反向代理的proxy_pass 相同
upstream hubery{
#ip_hash iphash 实现负载均衡,这里使用了轮回的方式实现
# nginx 转发的后台tomcat服务器配置,以及其权重的配置,权重越大要承载的量越大
#server localhost:18081 weight=1;
server localhost:18080 weight=1;
}
# 虚拟主机的配置
server {
# 就是nginx服务的端口
listen 80;
#这个就是访问域名
server_name localhost;
# 字符编码的设置
charset utf-8;
# 列出了默认页面,从左开始,
indexindex.html index.htm index.jsp index.do ;
# nginx 的根目录,当发送静态请求时会默认到这个目录下去查找
root html;
#access_log logs/host.access.log main;
# 动静分离,动态的反向到负载均衡的tomcat上
#jsp,do等页面交由tomcat处理, 也就是请求以 .jsp .do 结尾的都由他反向代理,也就是 location 对url进行匹配可以进行重定向或负载均衡
location~ \.(jsp|do)$ {
# 代理路径,和负载均衡的 upstream 的名称hubery是一致的,但http是不能忘!
proxy_pass http://hubery;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
#客户端请求路径:localhost:80/music的由他反向代理
location/music$ {
# 这个代理路径和upstream的名程要一致。
proxy_passhttp://hubery;
proxy_redirectoff;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerHost $http_host;
}
# 所有请求都被他反向代理
location / {
# 这个代理路径和upstream的名程要一致。
proxy_passhttp://hubery;
proxy_redirectoff;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerHost $http_host;
}
# nginx 浏览器本地缓存设置,静态页面由 nginx处理
location~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf)$ {
# 设置了本地磁盘缓存时间,如果超过缓存时间,则缓存失效
# expires 缓存设置的作用域可以是http、server、location
expires 30d;
}
}
}
四、总结:
通过比较我们会发现,如果只是方向代理而不做负载均衡则proxy_pass 就是你的web服务器的地址,如tomcat的路径等而如果是配置了负载均衡则代理的proxy_pass 就是upstream的名称。