Centos 7 安装nginx 并结合 tomcat 反向代理 负载均衡

来源:互联网 发布:浏览器如何打开php文件 编辑:程序博客网 时间:2024/06/06 18:40
  • 下载nginx地址:http://nginx.org/en/download.html
本版本采用1.8版本,如图:

  • nginx安装
  1. 安装依赖
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
2.下载好nginx-1.8.1.tar.gz存放到 服务器Centos 7 上的 /usr/local/ 下

3.解压 nginx-1.8.1.tar.gz

4.进行configure配置(ps:当前我在 /usr/local/ 的位置,执行以下命令)
cd /usr/local/nginx-1.8.1 && ./configure --prefix=/usr/local/nginx
5.编译安装(ps:4步骤执行后,马上进行5步骤)
make && make install
安装完毕后,将在/usr/local/下看到nginx文件夹,nginx文件夹中有四个文件夹:
conf 存放配置文件
html 存放静态页面
logs 存放日志文件
sbin 执行文件
6.启动 nginx
/usr/local/nginx/sbin/nginx //启动    /usr/local/nginx/sbin/nginx -s stop //关闭    /usr/local/nginx/sbin/nginx -s reload //重启    附带:查看启动状态    ps -ef | grep nginx
启动成功如图:

浏览器访问即可,出现下图经典欢迎页面表示 nginx 安装成功

ps:如果登录不到,就可能是防火墙屏蔽80端口,需要如下代码释放80端口:
firewall-cmd --permanent --zone=public --add-port=80/tcp   firewall-cmd --permanent --zone=public --add-port=80/udp   firewall-cmd --reload 
  • nginx配置
nginx 的配置文件默认位于 /usr/local/nginx/conf/ 下的 nginx.conf

nginx简单的配置讲解(ngnix.conf文件)
      #开启进程数 <=CPU数       worker_processes  1;      #自定义错误日志保存位置,全局设置,默认logs/error.log      #error_log  logs/error.log;   #每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024      events {          worker_connections  1024;      }      #      http {          #文件扩展名与文件类型映射表          include       mime.types;          #默认文件类型          default_type  application/octet-stream;          #自定义日志文件输出格式 全局设置          log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                    '$status $body_bytes_sent "$http_referer" '                    '"$http_user_agent" "$http_x_forwarded_for"';          #自定义全局请求日志保存位置,全局设置,默认logs/access.log, 定义格式:文件存储位置 + 日志输出格式          #access_log  logs/access.log  main;          #打开发送文件          sendfile        on;          #连接超时时间          #keepalive_timeout  0;          keepalive_timeout  65;          #打开gzip压缩          #gzip  on;          #配置虚拟主机,基于域名、ip和端口,可以配置多个server          server {              #监听端口,可以是ip:port 或者 port              listen       80;              #监听域名,可以是ip或者域名,server_name有三种匹配方式:精准匹配(www.domain.com)、通配符匹配(*.domain.com 、www.*)、正则表达式匹配(~^(?.+)\.domain\.com$)              server_name  localhost;              #自定义请求日志,局部,当前server有效              #access_log  logs/host.access.log  main;              #错误页面及其返回地址              error_page   500 502 503 504  /50x.html;              #请求匹配,同样有精准(= /index.html)、模糊(~ index)、正则,允许配置多个location              location / {                  #返回根路径地址(相对路径:相对于/usr/local/nginx/)                  root   html;                  #默认主页                  index  index.html index.htm;              }              #              location /html {                  root   html;                  index  index.html index.htm;              }              #          }          #      }
  • nginx反向代理、动静分离、负载均衡
反向代理:要说反向代理,我们就先要理解正向代理 ,下面我们就谈谈正向代理和反向代理吧。
正向代理:一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。(摘自百度百科)
如下图:

正向代理好比,你去找工作,首先你不知道哪里有工作,但是你可以把你的要求信息告诉别人,这时别人知道你想找什么样的工作了。他就帮你问,然后又合适的工作后,别人告诉你这里有符合你要求的工作,你就可以去试试了。
正向代理总结就一句话:代理端代理的是客户端。

反向代理:
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求,发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。(摘自百度百科)
如下图:



反向代理好比,你去超市或者购物中心购物,超市、购物中心就好比一个代理。你只关心你去超市、购物中心购买你想买的商品,具体商品从哪里来你并不关心。但是超市本没有商品,所以超市、购物中心自身去进货,这个过程你并不知道,没有感知。这时代理端代理的是超市、购物中心,你并看不到供货商。
反向代理总结就一句话:代理端代理的是服务端。
下面我们就来看看nginx的反向代理如何做了,反向代理前后如图:

nginx反向代理其实主要通过配置 proxy_pass参数即可代理到某个服务器
vim /usr/local/nginx/conf/nginx.conf
添加如下配置即可:
location / {  //在对应的 location 中配置,配置中的监听端口为80           proxy_pass http://127.0.0.1:8081  #我这里tomcat的端口为8081           root   html;           index  index.html index.htm;        }
启动 tomcatnginx/usr/local/nginx/sbin/nginx
tomcat    启动: /usr/local/tomcat8/bin/startup.sh    关闭: /usr/local/tomcat8/bin/shutdown.sh   ngnix   启动: /usr/local/nginx/sbin/nginx    关闭: /usr/local/nginx/sbin/nginx -s stop    测试:http://192.168.2.144/

但是当我们访问 http://192.168.2.144/demo.jsp如下图:demo.jsp将demo.jsp拷贝到tomcatROOT下,中代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">    <html>    <head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <title>Welcome to my demo.jsp</title>    </head>    <body>    欢迎 my demo.jsp<br/>    访问的 ip 地址:   <%=request.getHeader("real_ip") %> <br/>    nginx server ip is: <%=request.getRemoteAddr()%>    </body>    </html>
我们得到的是nginx代理服务器的ip,但是我们并不想要代理服务器的ip,我们想要的是客户端真实的访问ip,因此我们可以通过nginx中获取真实ip,然后传给真实服务器。
同样,我们需要到 nginx.conf 中配置,如下 : proxy_set_header real_ip $remote_addr;
location / {   #设置真实ip   proxy_set_header real_ip $remote_addr;  //real_ip 设置变量名,可以通过web端获取   proxy_pass http://127.0.0.1:8081;   root   html;   index  index.html index.htm;}
接下来,重启 nginx 、 tomcat,访问浏览器

  • 动态资源、静态资源分离
动态资源、静态资源分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离。
为什么要做动 、静分离?
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗。当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决。
动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中。

因此,动态资源转发到tomcat服务器我们就使用到了前面讲到的反向代理了。
vim /usr/local/nginx/conf/nginx.conf
location / {            #设置真实ip            proxy_set_header real_ip $remote_addr;            proxy_pass http://127.0.0.1:8081;            root   html;            index  index.html index.htm;        }
修改为:
//动态资源 location ~ \.(jsp|jspx|do|action)(\/.*)?$ { //动态请求转发到tomcat服务器,匹配方式可自定义 #设置真实ip proxy_set_header real_ip $remote_addr; //real_ip 设置变量名,可以通过web端获取 proxy_pass http://127.0.0.1:8080; } //静态资源 location ~ .*\(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { //静态资源到nginx服务器下static(具体目录自定义)获取 root static; }
启动tomcatnginx,访问http://192.168.58.149/123.jpg和 http://192.168.58.149/demo.jsp,如图:
静态资源:
动态资源:
  • 负载均衡
负载均主要衡解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量,减少后台服务器大并发压力。主要根据算法策略将请求分摊到多台后台服务器处理。我们以weight(权重)策略为例:

nginx 实现负载均衡主要通过upstream,以两个tomcat服务器为例:192.168.58.149:8080  192.168.58.150:8080 nginx.conf 配置如下:
 http 下配置:
 upstream balance { #weight 值越大,负载权重越大,请求次数越多 #max_fails 允许请求失败的次数,超过失败次数后,转发到下一个服务器,当有max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查 #fail_timeout 指定时间内无响应则失败, 在以后的fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器 #down 表示当前server不参与负载#backup 其他非backup server都忙的时候,backup server作为备用服务器,将请求转发到backup服务器 server 192.168.2.190:8081 weight=1 max_fails=2 fail_timeout=30s; server 192.168.2.39:8081 weight=1 max_fails=2 fail_timeout=30s;server 127.0.0.1:8081 down;#server 192.168.58.152:8080 backup;}location / { #设置真实ip proxy_set_header real_ip $remote_addr; #real_ip 设置变量名,可以通过web端获取 proxy_pass http://balance;  //配置上面添加的负载服务器 }注意upstream放在http下,和server为同级,不然会报 nginx: [emerg] "xxx" directive is not allowed here in xxxx 之类报错。

启动149的tomcat、150的tomcatnginx,访问浏览器试试吧:
连续访问两次效果图如下:
第一次:

第二次:

除了上面提到的weight权重策略,还有ip_hash、url_hash哈希策略,后续有时间再补上吧。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 迷路了怎么办活动反思 头突然眩晕是怎么办 孩子学习拖拉懒惰怎么办 头发晕想睡觉怎么办 五年级错别字多怎么办 入党志愿书写错字怎么办 高中不会写作文怎么办 考试不会写作文怎么办 高考不会写作文怎么办 孩子总是写错字怎么办 小孩总是写错字怎么办 孩子马虎不认真怎么办 小孩计算老出错怎么办 小学生计算总出错怎么办 高中考试总粗心怎么办 孩子考试总是粗心怎么办 一年级孩子考试粗心怎么办 老师说孩子粗心怎么办 计算题总出错怎么办 计算题总是出错怎么办 数学老是计算错误怎么办? 苗木抵扣计算错误怎么办 表格中计算错误怎么办 孩子电视瘾太大怎么办 孩子考试前失眠怎么办 孩子上网瘾了怎么办 孩子考试差家长怎么办 手指肿痛有脓包怎么办 手指脓出来红肿怎么办 手指提重物发麻怎么办 小孩拧伤了怎么办 从小就成绩差怎么办 孩子考试总马虎怎么办 上课不认真怎么办初中 对学习兴趣不大怎么办 小学生做作业粗心大意怎么办 小学生考试总是粗心大意怎么办 脚趾内侧长鸡眼怎么办 五岁宝宝胆小怎么办 孩子偏食挑食老师怎么办 九岁孩没有耐心怎么办